亚马逊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