AWS RDS双向复制实现灾备场景的相关实操经验咨询
AWS RDS双向复制灾备场景实操参考
RDS原生提供的只读副本是单向同步架构,官方没有内置双向多主复制功能,我司去年做跨Region灾备的时候落地过两套方案,给你参考:
方案1:基于RDS原生逻辑复制实现(成本最低,适配MySQL/PostgreSQL引擎)
这个方案不需要额外工具,只用RDS自带的逻辑复制能力就能实现,我们的MySQL 8.0 RDS实例用的就是这套:
- 前置准备
- 两个RDS实例(主/灾备)都修改参数组开启逻辑复制:
- MySQL引擎:设置
binlog_format=ROW、binlog_row_image=FULL、log_bin_trust_function_creators=1,参数修改后需要重启实例生效 - PostgreSQL引擎:设置
wal_level=logical,同时调大max_replication_slots、max_wal_senders参数(至少大于你要创建的订阅数+2)
- MySQL引擎:设置
- 提前配置自增ID偏移避免主键冲突:比如实例A自增步长设为2、起始值1,实例B自增步长设为2、起始值2,完全避免同主键写入冲突
- 停掉业务写入,做一致性快照把数据同步到两个实例,保证初始数据完全一致
- 两个RDS实例(主/灾备)都修改参数组开启逻辑复制:
- 配置步骤
- 两边实例都创建专用的逻辑复制账号,授予REPLICATION权限
- 两边实例分别为需要同步的库表创建发布(Publication),排除系统表不需要同步
- 两边实例互相创建订阅(Subscription),对接对端的发布地址,启动同步即可
- 注意事项
- 逻辑复制默认不会同步DDL语句,两边改表需要手动同步执行,不要直接在线执行DDL
- 自定义冲突处理规则:如果有非自增主键的写入场景,要提前定义冲突优先级,比如按最后更新时间覆盖、或者指定主Region写入优先,出现冲突直接按规则处理不会中断同步
方案2:基于ECS部署同步中间件实现(适合复杂规则场景)
如果需要跨引擎同步、或者有复杂的过滤/转换规则,可以自己在ECS上部署开源同步工具或者商业同步工具,配置双向同步:
- 同步工具部署在和两个RDS同VPC的ECS上,网络延迟可以控制在毫秒级
- 工具层面默认支持冲突检测、DDL同步、数据校验等功能,不需要自己写规则
- 唯一的成本就是多出来的ECS和工具运维成本
落地必做验证
- 同步配置完成后做双写压测,验证冲突处理逻辑是否符合预期,同步延迟是否满足业务要求(我们生产环境目前延迟稳定在1s以内)
- 每个季度做一次灾备切换演练,切换前停主实例写入,等同步完全追平后再切流量到灾备实例,切换完成后做全量数据一致性校验
内容的提问来源于stack exchange,提问作者スーパーマン
相关产品推荐
相关产品推荐

