加速 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 等技术公司,长期从事于安全,网络,公有云等技术领域。
评论