跨中国、新加坡AWS数据中心搭建支持双写的Mongo Cluster方案咨询
MongoDB双区域可写+跨区域异步同步部署方案
首先明确基础限制:原生MongoDB单副本集仅支持单主节点写入,要实现中国区、新加坡区双区域同时支持写入,需适配对应架构,以下是自托管场景下的可落地方案:
方案一:多区域分片集群(推荐,依托MongoDB原生能力实现)
该方案无业务侧额外开发量,依托MongoDB原生分片+区域感知能力实现双区域本地写入,异步同步。
- 前置准备
- 打通AWS中国区与新加坡区的VPC Peering/专线,确保两端Mongo节点网络互通,端口27017~27019双向放通,平均延迟稳定在200ms以内
- 现有Mongo集群升级至5.0及以上版本,已开启分片模式,拥有正常运行的mongos路由节点、配置服务器副本集
- 操作步骤
- 在新加坡区部署3节点的分片副本集,将节点优先级全部设为0,禁止该分片选举为全局主分片,为该分片打区域标签
zone: sg - 为现有中国区分片打区域标签
zone: cn - 在mongos节点配置分片规则:业务集合按
region(或其他可区分访问区域的字段)作为分片键,中国区域的数据分片路由到cn标签的分片,新加坡区域的数据路由到sg标签的分片 - 双区域各部署至少2个mongos节点,本地业务流量优先接入本区域mongos,实现本地写入
- 按需配置跨区域数据均衡规则,MongoDB后台会异步完成跨区域的数据同步,无需额外开发
- 在新加坡区部署3节点的分片副本集,将节点优先级全部设为0,禁止该分片选举为全局主分片,为该分片打区域标签
该方案不存在写入冲突,因为不同区域的数据归属不同分片,一致性由MongoDB原生保证,适合核心业务场景使用
方案二:Change Stream双向同步(适合无需改现有架构的轻量场景)
如果现有集群是副本集架构、不想做分片改造,可以基于MongoDB Change Stream实现双向异步同步。
- 前置准备
- 现有中国区Mongo副本集升级至4.4及以上版本,oplog保留时长调整到7天以上
- 在新加坡区部署同版本的3节点Mongo副本集,通过全量备份+增量同步完成初始数据对齐
- 操作步骤
- 分别在两个区域部署Change Stream监听服务,监听所有业务库的insert、update、delete操作
- 为所有写入操作新增
write_id(唯一标识)和source_zone(来源区域)字段,同步时过滤来源是对端区域的写入,避免循环同步 - 配置冲突解决逻辑,默认按最后写入时间(LWW)优先处理冲突,也可根据业务规则自定义冲突处理逻辑
- 监听服务将捕获的写入操作异步推送到对端副本集执行,实现双区域双向同步
该方案存在极低概率的写入冲突,适合对一致性要求不高的业务场景,需要业务侧做少量兼容
上线前验证项
- 先开启只读流量验证跨区域同步延迟,确保稳定在业务可接受范围内(通常100~300ms)
- 模拟双区域同时写入同一条数据的场景,验证冲突解决规则符合预期
- 模拟单区域网络中断场景,验证另一区域可正常承接所有流量,网络恢复后数据可自动同步对齐
内容的提问来源于stack exchange,提问作者angelokh
相关产品推荐
相关产品推荐

