亚马逊AWS官方博客

加速 Amazon RDS for MySQL 只读副本提升

概述

本文主要讲述在一个RDS MySQL集群中,如何在有限的时间内尽可能加快从MySQL Read Replica中提升。

本方案适用场景

  • 数据库数据量大、停机维护窗口时间短
  • 需要在提升后需要立即创建Read Replica

方案描述

假定原有数据库集群为一个主节点、一个只读副本。我们现在希望将这个RDS集群拆分成2个独立的集群。

首先我们需要在原集群中创建一个只读副本,然后只读等待数据同步完成。

您可以通过查看 Amazon RDS ReplicaLag 指标,在 Amazon CloudWatch 中监控复制滞后。当 ReplicaLag 指标达到 0 时,即表示副本已赶上主数据库实例进度。如果 ReplicaLag 指标返回 -1,则当前未激活复制。ReplicaLag = -1 等效于 Seconds_Behind_Master = NULL

创建只读副本的行为,会从当前主节点的最新快照中恢复出一个数据库副本。因此最近一次快照时间会影响只读副本创建后数据同步的时间。

建议在创建只读副本之前查看最近一次快照的时间,如果快照时间距离当前时间比较长。在创建手动快照后,可以缩短创建Read Replica的时间。

在只读副本“Read Replica B”上创建快照。

等待完成快照创建,再“提升”只读副本“Read Replica B”,并选择启用自动备份。

此时在“Read Replica B”上做快照,速度会较快,原因是系统会自动选取主节点的快照做增量快照,而不是对只读节点的全量存储做快照。

如果提升时选择不启动自动备份,提升后的实例是无法创建只读节点的。重新开启自动备份后即可创建只读节点,只需要将备份的保留周期设置为大于0天。

“提升”完成后,“Read Replica B”会从“DB Cluster 1”的集群中分离出来,成为一个新的独立数据库集群“DB Cluster 2”。

“提升”这个行为会自动触发被提升节点的快照操作。默认情况下,新建的只读副本(Read Replica B)是没有快照的。因此会从全量存储中做一次快照,如果这个节点的数据量非常大,这个时间将会持续很长。预计约1小时/TB的速度完成快照。

执行快照期间,您无法对快照行为进行“取消”操作,会增加非预期的窗口维护时间。

如果按照前面的步骤,在已经做过手工快照,此步骤的自动快照时间会大大缩减。

在“DB Cluster 2”上创建只读副本“Read Reaplic B”,等待数据完成同步。

如果前面在提升的时候没有开启自动备份,此时控制台中“创建只读”的菜单项为灰色禁用状态。

至此RDS MySQL的提升并添加只读副本操作完成。

参考资料

在Amazon RDS for MySQL数据库上提升MySQL只读副本的最佳实践 | 亚马逊AWS官方博客

使用只读副本 – Amazon Relational Database Service

本篇作者

林业

亚马逊云科技解决方案架构师,负责基于亚马逊云科技的云计算方案的咨询与架构设计。拥有超过14年研发经验,曾打造千万级用户APP,多项Github开源项目贡献者。在游戏、IOT、智慧城市、汽车、电商等多个领域都拥有丰富的实践经验。

茅金辉

亚马逊云科技资深技术客户经理

郁冰

亚马逊云科技技术客户经理,负责企业级客户的架构和成本优化、技术支持,协助客户实现亚马逊云科技最佳实践等工作。曾就职于Cisco,Microsoft等技术公司,长期从事于安全,网络,公有云等技术领域。