You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不停机跨AWS账户迁移MongoDB副本集数据(不使用Atlas)

跨AWS账户MongoDB副本集零停机迁移方案

你提到的「先在目标AWS账户新增副本集第4个节点、后续逐步扩容目标侧节点再下线源侧节点」的方案完全可行,是符合零停机要求、无需使用Atlas工具的最优方案,具体操作流程如下:

前置准备

  • 打通两个AWS账户的网络:通过VPC对等连接或Transit Gateway实现两个VPC的内网互通,确认源侧和目标侧的安全组都放开对方所有节点的MongoDB服务端口(默认27017)入方向访问权限
  • 目标侧节点配置对齐:新节点的MongoDB版本、硬件配置、存储配置、操作系统参数(ulimit、目录权限、时区等)完全和源侧节点保持一致,避免同步异常
  • 确认oplog窗口足够:登录源副本集Primary节点执行rs.printReplicationInfo(),确认oplog保留时长大于新节点全量同步+追齐增量的预计耗时,避免同步过程中oplog被覆盖
  • 认证配置对齐:如果源副本集开启了身份认证,将源侧使用的keyfile完整复制到所有目标侧新节点,保证集群节点间认证正常

操作步骤

步骤1:添加目标账户首个节点到源副本集

  • 启动目标侧新节点的MongoDB进程,配置文件中replication.replSetName参数值和源副本集名称完全一致
  • 登录源副本集Primary节点,执行命令添加新节点,建议临时调低新节点的优先级和投票权避免影响源集群稳定性:
    rs.add({host: "目标节点内网域名/IP:端口", priority: 0, votes: 0})
    
  • 执行rs.status()查看新节点状态,待状态变为SECONDARY、且optime和Primary节点差值稳定在1s以内,说明同步完成

步骤2:完成目标侧集群扩容

按照步骤1的操作,在目标账户再添加2个节点,待3个目标侧节点全部同步完成后,整个副本集群变为6节点(3个源侧节点+3个目标侧节点)

步骤3:切换主节点到目标侧

  • 登录当前Primary节点,调整节点优先级和投票权:将3个目标侧节点的priority和votes都设为1,将3个源侧节点的priority设为0、votes设为0,执行rs.reconfig()使配置生效
  • 执行rs.stepDown()触发主节点退位,集群会自动选举目标侧的节点作为新的Primary,执行rs.isMaster()确认主节点归属正常

步骤4:下线源侧节点

  • 逐个移除源侧的3个节点,每次移除后等待rs.status()显示集群状态稳定再执行下一次操作,移除命令为:
    rs.remove("源节点内网域名/IP:端口")
    
  • 所有源侧节点移除完成后,修改业务侧的MongoDB连接串指向目标侧节点,或修改域名解析记录指向目标侧节点,迁移全程无业务停机

注意事项

  • 节点同步过程中尽量避免执行大批量数据删改操作,防止oplog被快速覆盖导致同步失败
  • 迁移完成后可对核心业务集合执行db.runCommand({validate: "集合名"})校验数据一致性
  • 如果不选择跨集群加节点的方案,也可以采用全量备份+增量oplog追齐的方式迁移,但需要手动切写,无法做到完全无停机,优先级低于上述方案

内容的提问来源于stack exchange,提问作者user2710961

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 20:15:07