第一章 RDS基础概念介绍
一、 RDS基础概念介绍
云数据库RDS是Relation Database Service的简称,它是关系型数据库,也是OLTP类的数据库,是基于阿里云飞天分布式操作系统与SSD盘高性能存储的数据库,支持MySQL、PostgreSQL、SQLServer、MariaDB引擎。其中MySQL与PG经过深度自研的内核,相比于开源有一些独有的功能,比如AliSQL上提供了sequence引擎,可以作为自增值的替代方案;又比如大表的异步删除,可以避免引起实例性能抖动或夯掉的风险。
除了基础版本以外,RDS均提供了双机热备、数据多副本冗余、自动备份、性能监控、异地容灾、备份与恢复、主备库故障切换等功能,保证了云数据库的安全性、稳定性、可靠性。
相比于本地自建数据库,云上RDS数据库无需购买硬件、安装软件,具备开箱即用、低运维的特点;也不必担心硬件规划的问题,能够根据资源需要随时动态调整资源规格。针对MySQL、PostgreSQL、SQLServer、MariaDB引擎,也都做到了透明兼容,可直接迁移使用。
自动化运维方面,云RDS数据库提供了API/SDK功能,能够通过API/SDK完成自动化的管理与监控数据库的相关功能;能够通过DAS自动弹性伸缩来减少成本。另外,也可以利用DAS的异常诊断,及时发现数据库运行过程中出现的异常,并可针对异常问题进行自动分析限流、自动添加索引、判断索引添加效果等。
云RDS数据库是云上全托管数据库,在容灾、备份、恢复、监控、迁移等方面提供了全套解决方案。
容灾方面,购买RDS数据库时,可以选择多可用区部署的形态,可以提供机房级别的容灾能力。对于要求更高的场景,比如跨地域的容灾能力,可以基于DTS数据传输工具,搭建两个RDS实例之间的数据同步,提供跨地域的容灾能力。
备份方面,除了RDS实例本身提供的自动备份功能外,也有DBS数据备份功能、跨地域备份功能,可以满足额外的备份需求。
恢复方面,可以基于备份在控制台直接操作,恢复到某个备份集或某个时间点以应对恢复需求。
监控方面,RDS控制台提供了多个监控项目,比如性能监控指标,诸如CPU、QPS等;也提供了日志监控能力,比如错误日志、洞察日志,帮助审计数据库的运行情况。比如通过SQL洞察功能,可快速准确地掌握SQL在什么时间点开始执行、由哪个用户发起等信息。
迁移方面,通过DTS数据传输工具,可以支持同构与异构数据库之间的迁移。在实际业务场景中,经常会遇到以RDS MySQL作为关系型数据库满足日常业务需求,通过DTS数据传输工具将数据同步到比如ADB MySQL或Clickhouse等OLAP类的分析型数据库做报表分析操作。又比如,可以用DTS订阅任务订阅RDS MySQL、RDS PG的日志,使客户端消费相关日志完成业务解耦的需求。
云上RDS数据库能够让我们更加聚焦于业务本身的开发,减少运维管理的麻烦。
云RDS数据库包括4个系列,分别为基础版本、高可用版本、集群版本与三节点企业版本。每个版本支持的数据库引擎类型不同,适合的业务场景也不同,需要根据业务的特点合理选型。
基础版支持MySQL、PG、SQLServer引擎,是单节点部署、计算与存储分离的架构,使用了SSD云盘存储,因此,在备份方面只支持快照备份。另外,它不支持只读节点,无法提供读写分离的功能。因其为单节点的部署架构,因此当节点遇到意外宕机、执行重启或变配、升级版本操作时,会出现较长时间的不可用。因此基础版本不适用于生产环境中,一般只适用于测试环境。
高可用版本支持MySQL、PG、SQLServer、MariaDB四种引擎,采用一主一备的高可用架构,支持高可用的容灾切换。当主实例不可访问时,可以快速切换到备实例上。另外MySQL与PG也支持只读实例,可以通过添加只读实例实现读写分离,分担主实例的读请求压力。
集群版目前支持MySQL,SQLServer 2种引擎。MySQL引擎采用一主一备或一主二备的高可用性部署,所有备节点可以提供读访问,但是目前集群版本不支持创建只读实例,所以最多可以提供2个只读节点提供访问。SQLServer采用一主一备的高可用架构。备实例可以提供只读访问,也可以创建只读实例以实现读写分离的功能。高可用版本与集群版本的区别仅在于支持的引擎不同和备节点是否可以提供读请求访问。
三节点企业版只支持MySQL引擎,采用一主一备一日志的三节点架构部署。当主实例不可访问时,可快速切换到备实例上,实现快速恢复。需要注意,写入相关的操作时,必须保证至少两个节点同步到日志之后才可以完成事务的提交。因此业务保障上的要求为金融级别,目前三节点企业版即将下线,后续有集群版本替换相关安全保证。
无论是哪种系列,数据库引擎部署在云平台上,都是对计算资源、存储资源、网络资源创建实例,做相应的资源划分隔离。根据业务量的访问不同,可以灵活地对计算资源做弹性升降配。存储上,只有本地SSD盘才可以支持降低存储的操作,其他存储类型只支持升级存储容量,不支持降低。如果存储空间打满,也会导致实例被锁定,变为只读的状态。因此在业务上或实际生产中,需要注意配置存储的使用率告警,避免存储空间被打满。
另外,云RDS数据库也可以支持不同的引擎之间小版本与大版本的升级,社区版本的bug修复或引入新特性后,会通过内核小版本或大版本的发布做迭代。如果小版本太旧,也会主动推送相关升级提示,避免实例稳定性受到影响。
RDS实例规格包括共享规格、通用规格、独享规格。
共享型只支持SQLServer引擎。每个实例独享被分配到的内存与存储资源,与同一物理机上的其他共享规格实例共享CPU资源,因此可能存在CPU竞争。这适用于对成本有要求但是对稳定性要求较低,需要SQLServer高可用保障业务可用性的场景。
通用型支持四种引擎,分为本地盘与云盘。本地盘存在CPU的竞争关系,云盘实例存储资源不和CPU及内存绑定,可以灵活选配。云盘是On-ECS的形态,而ECS本身需要开销一部分内存。在今年6月份之前,实例的内存使用率上没有刨除系统本身开销的内存,因此会让客户误以为内存使用率没有达到百分之百却出现OOM的情况。对此,我们已经对RDS MySQL,RDS PostgreSQL内存在监控上做了修正。
通用型存在资源的复用,因此也会存在争抢。如果对业务稳定性要求高,则不建议采用共享型与通用型的实例。
独享型也支持四种引擎,完全独享CPU与内存,不会造成资源竞争。独享型适用于对性能稳定性要较求较高的场景。
每一种架构对于不同版本均提供了多种规格。
云盘的实例除了IOPS能力,还有IO带宽的限制。IO带宽又与存储空间大小相关,比如会按照存储的大小计算IO带宽的大小。IOPS打满或IO打满都会导致实例出现IO方面的瓶颈。IOPS方面,可以通过IOPS使用率进行观察。而针对IO带宽打满目前在前端还未有相关的监控能力,如有需要可提交工单咨询确认。
网络方面分为经典网络与专有网络。
经典网络采用三层隔离,共用的基础网络上不同用户之间的网络相通。RDS实例只能依靠白名单与账号密码做安全防护,安全性较低。因此,我们推荐最好使用VPC专有网络,目前VPC专有网络也不再支持从专有网络切换到经典网络,如果大家还有经典网络的RDS实例,建议大家可以考虑升级到专有网络。
VPC网络也就是虚拟专业网络,采用两层隔离。相对于经典网络,具有更高的安全性与灵活性。不同的VPC之间为相对隔离的环境,可以根据不同的业务类型,按产品划分到不同的VPC网络以保证网络的安全性。
在RDS网络拓扑上,当一台ECS部署了程序发起连接时,首先会通过DNS解析RDS的域名,域名会解析到RDS前端的SLB上,再由SLB转发给后端的RDS主实例。如果RDS实例开通了读写分离功能,则会存在代理,SLB会先转发给代理,再由代理转发给后端的RDS 主库或从库,实现读写分离的架功能。
购买多可用区实例时需要注意,ECS、SLB与RDS主库可能会跨地域,比如ECS在可用区y,SLB与RDS主库在可用区x,属于跨机房。该种情况下,由于物理距离的增加,会导致网络延迟增加,3ms以内的延迟为正常范围,对网络延迟特别敏感的业务需要考虑这种跨可用区带来的影响。
程序访问时需要使用域名地址,不建议使用域名解析生成的VIP进行访问。比如实例变配可能会导致底层的VIP发生变化,如果依然使用域名访问,可能会出现访问连接不到的情况,因此在生产上建议使用域名访问,而且需要保证应用上具有自动重连的机制,比如RDS主库与从库发生了HA切换,此时SLB会将重新解析的请求转发给之前的从库,之前的连接会断开。如果ECS上部署的程序无法自动重连,会导致业务影响时长被拉长。另外,尽量不要对域名做本地解析,底层VIP变化之后此时访问就会出现问题。