产品架构

产品架构概述

产品架构将介绍云数据库 RDS 的重点技术架构,帮助用户理解云数据库 RDS 重要特性的实现原理。

包括以下内容:

数据链路

业务用户通过互联网、百度智能云统一接入层连接到区域甲中的 VPC1 中的数据库,BCC 等云服务器可以通过内网高速连接同一个可用区中的云数据库 RDS 实例。

云数据库 RDS 高可用主实例包含负载均衡组件 LB、云数据库 RDS 主节点、云数据库 RDS 备节点。只读实例和代理实例为可选组件。

云数据库 RDS 高可用实例可以选择单可用区架构(见子网1内部主从复制)或多可用区架构(见子网2及子网n之间跨可用区主从复制)。多可用区主备架构相较单可用区主备架构具有更强的容灾能力。

高可用说明

服务高可用

服务高可用由 XMaster、XAgent、Noah 、冷备服务等模块组成。配合7*24小时值班的运维人员负责保障数据链路服务的可用性、数据安全、处理数据库内部的异常以及发生无法自动修复的异常时报警(主动通知运维人员)。

另外,用户还可以通过在支持多可用区的地域创建实例、采用适当的数据复制方式,进一步提升 云数据库 RDS 服务的高可用性。

XMaster

XMaster 模块部署在集群中控机上,接受 XAgent 模块发来的心跳信息(内容为健康状态),分析主节点、热备节点和只读节点的心跳信息,自动发起主备热切换,自动修复各个节点等任务,保障云数据库 RDS 服务的高可用性。

例如:

  • 主从同步异常中断的自动修复;
  • 主、备、只读节点表级别损坏的自动修复;
  • 主、备、只读节点Crash的现场保存和自动修复;
  • 主节点Crash或网络不可达时自动提升热备节点成为主节点保证服务。
  • XMaster模块还负责把主、备、只读节点的身份变化、状态变化上报给负载匀衡和Proxy,保证用户访问到正确的节点,把无法自动修复的异常状态上报给Noah ,通知运维人员尽快介入。

XAgent

XAgent模块负责检测云数据库 RDS 服务各节点的健康状态(服务是否正常,CPU、内存、磁盘等资源占用是否正常等)。通过间隔为3秒的心跳信息,将各节点的健康状态报告给XMaster,供XMaster模块判断是否发起主备热切换,自动修复等高可用性维护任务。

XAgent模块还负责监控没有自动修复的异常状态(如非抖动性网络异常,磁盘使用量超过警戒线,主从同步异常中断、主从延迟过大等),将信息报告给Noah 模块发出报警,通知运维人员尽快介入,保证极端情况下云数据库 RDS 服务的高可用性。

Noah

Noah 模块负责接收XAgent上报的异常信息并通过邮件、短信、电话通知运维人员尽快介入,保证极端情况下云数据库 RDS 服务的高可用性。

冷备服务

冷备服务周期性全量备份云数据库 RDS 服务数据,与热备节点共同作用保证用户数据的安全。

高可用各模块关系说明

XMaster模块根据XAgent上报的健康信息发现主节点异常,发起主备热切换。此时用户流量均指向提升上来的新主节点。然后自动修复切换下来的节点。若尝试后无法修复,则将异常信息上报给Noah ,Noah 通知运维人员。

XMaster模块根据XAgent上报的健康信息发现热备节点主从中断,尝试自动修复后发现无法恢复,则将异常信息上报给Noah ,Noah 通知运维人员。

多可用区

多可用区是在单可用区的基础上,将同一地域的多个单可用区组合成的逻辑区域,主、备节点部署在不同的单可用区上。相对于单可用区 云数据库 RDS 服务,多可用区云数据库 RDS 服务可以承受更高级别的灾难。

例如,单可用区云数据库 RDS 服务可以承受服务器和机架级别的故障,而多可用区云数据库 RDS 服务可以承受机房级别的故障。

目前多可用区云数据库 RDS 服务不额外收取费用,已开通多可用区地域的用户可以直接购买多可用区云数据库 RDS 服务,也可以利用D云数据库 RDS 服务将单可用区云数据库 RDS 实例迁移至不同的可用区组成多可用区云数据库 RDS 服务。

注意: 因为多可用区之间存在一定的网络延迟,因此多可用区云数据库 RDS 实例在采用半同步数据复制方案时,对于单个更新的响应时间会比单可用区实例长。这种情况最好通过提高并发量的方式来实现整体吞吐量的提高。

数据复制方式

用户可以根据自身业务特点,选择合适的数据复制方式,提高可用性。当前云数据库 RDS for MySQL提供以下两种数据复制方式:

  • 异步复制:异步复制是指当应用发起更新请求,即进行增加、删除、修改数据的操作时,主库完成相应操作后会立即响应应用,同时主库向备库异步复制数据。因此,备库不可用时不会影响主库上的操作。但如果在操作提交完成时,主库恰好出现宕机,此时数据尚未发送给备库,那么备库上将没有已经完成提交的事务修改的数据,因此在备库切换为新主库时,会造成数据丢失。不过总体而言,因主库不可用引起主备库数据不一致的概率较低。
  • 半同步:为了解决异步复制的数据丢失问题,MySQL引入了半同步复制特性。半同步复制指的是在MySQL的复制过程中,事务在主库上提交后,事务日志需要在主库上落盘,传送到至少一个备库上,并在该备库上也完成落盘并通知主库之后,主库上的事务才提交成功。在半同步复制模式下,主库上已完成提交的事务能在至少一个备库上找回,因而解决了异步复制的数据丢失问题。但是需要等待至少一个备库落盘并发送确认,主库上事务提交的时延会变大,因而TPS会下降。主备复制出现异常时,复制方式会退化成异步复制,异常恢复后复制方式才会恢复,因此主库不可用仍然可能会较小概率出现数据不一致。

数据快照和恢复

云数据库 RDS 的备份与恢复功能是通过数据快照来进行的,包含Snapshot和Recovery两个模块。

Snapshot

Snapshot模块负责从用户的云数据库 RDS 实例中生成一份数据快照、打包并上传到每个云数据库 RDS 实例独立的BOS存储路径中进行集中存储。
Snapshot模块一般工作在云数据库 RDS 的热备节点上以避免快照生成操作对主节点产生额外的资源开销,不过SQLServer类型的云数据库 RDS 实例无法在热备节点中进行快照,Snapshot模块工作在主节点上。

Recovery

Recovery模块负责将BOS中存储的数据快照恢复到目标节点上。数据快照内的数据会在恢复过程中被进行分块MD5校验和基于数据库redo log的数据对齐以保证恢复结果的完整性和一致性

Recovery模块有两种工作场景:

  • 用户手动发起数据恢复时:Recovery模块会使用用户指定的数据快照替换主节点和热备节点的数据。
  • 用户实例故障后:Recovery模块会使用最新的一份数据快照来创建新的热备节点以保障云数据库 RDS 可用性,避免服务单点。

数据迁移

DTS架构

DTS数据传输服务的后端系统主要由传输模块与监控模块两部分组成。

  1. 传输模块的功能分为数据抽取、数据转化与数据加载三步,其中:

    • 数据抽取功能负责从上游数据库导出需要迁移的数据,既可以导出库表结构等源数据信息,也可以导出表中数据的全量快照,甚至可以导出数据库实时产生的增量数据;
    • 数据转化功能将上游数据库提取出的数据转化为下游数据库可接受的格式。当上下游数据库类型不同,即在异构数据库之间进行数据迁移时,就需要对上游的数据格式进行一定的翻译;
    • 数据加载功能负责将转化后的数据加载到下游数据库。通过数据合并、批量加载、并行加载等多种优化技术,DTS能够保证数据高效地在上下游数据库之间进行迁移。
  2. 监控模块的主要功能为监控传输模块的健康状态。当某一传输模块出现异常无法工作时,监控模块会负责将传输模块上原本运行的数据迁移任务分配到其他正常工作的传输模块上,整个过程可在秒级完成,保证了DTS任务的高可用性。

DTS迁移模式

DTS数据传输服务提供将用户自建数据库的数据迁移到百度智能云数据库云数据库 RDS 并建立数据同步,或在两个云数据库 RDS 之间建立数据同步的功能。DTS将整个数据迁移的过程分为三步,分别是:

  1. 结构迁移:结构迁移任务负责将上游数据库的库表结构、视图、触发器、存储过程等数据结构信息导出,经格式转化后导入下游数据库(根据上下游数据库类型不同,可能存在某些结构信息不支持迁移的情况);

  2. 全量迁移:全量迁移任务在启动时会先记录增量数据同步点(用于之后的增量迁移),记录完毕后通过快照读的方式从上游数据库分批读取全量数据并导入下游数据库,整个过程支持断点续传;

  3. 增量迁移:增量迁移任务并非采用查询方式,而是从上游数据库的日志中直接提取增量数据,因此具有很强的实时性。增量迁移任务启动时会从全量迁移开始前记录的同步点处开始提取增量并写入下游数据库,最终补齐自全量迁移快照读之后产生的所有增量,保持上下游数据库实时同步。由于增量迁移写入下游数据库时采用了幂等性的操作(幂等操作前提为表中需要有主键或唯一键约束),因此虽然与全量迁移导出的数据存在部分交集,也不会产生数据重复等不一致的现象。

读写分离

应用程序通过负载均衡组件LB将读写请求全部发送给代理实例,代理实例自动分离读请求并均摊到只读实例上,剩余的读写请求发给主实例的主节点,从而扩展整体读能力;主实例备节点、只读实例和主节点之间通过异步复制进行主从同步。