方案概览
本方案适用于将自建或第三方云厂商的 MongoDB 迁移至腾讯云,并在割接后保留回切能力的场景。通过 DTS 数据迁移(全量+增量)完成正向迁移,搭配 DTS 数据同步(仅增量)搭建反向回切通道,确保割接后如果目标库出现兼容性或性能异常,可以快速回切至源库。
方案架构
业务场景
当企业将 MongoDB 从 IDC 机房或第三方云厂商(如阿里云、AWS、华为云)迁移至腾讯云时,割接后的目标库可能出现应用兼容性问题、网络链路延迟变化、或业务高峰期性能不及预期等情况。如果未提前搭建回切通道,业务将长时间运行在异常环境中,而回退到源库又需要重新执行数据传输,恢复时间不可控。
本方案推荐使用 DTS 数据迁移链路将源库数据全量+增量传输至腾讯云目标库(正向链路),割接完成后通过 DTS 数据同步的仅增量配置搭建一条反向任务,作为回切逃生通道。反向链路启动后,目标库产生的所有增量数据将实时同步至源库,确保源库数据始终保持完整,具备随时接管业务的能力。
架构图

方案优势
资源消耗低:回切链路仅同步增量数据,无需重复全量传输,对源端和目标端资源占用极小。实测在中等写入吞吐(数千 QPS)场景下,反向同步任务对目标库 CPU 占用通常不超过 5%。
按需释放:确认业务在目标库稳定运行后,可随时结束回切链路并下线源库。
方案限制
需要双向同时写入(异地多活)→ 当前 MongoDB 链路未内置破环机制,不支持两端同时写入。
纯冷数据归档迁移(无增量)→ 直接使用全量迁移即可,无需搭建反向链路。
跨大版本迁移且存在不兼容 DDL → 建议先做兼容性评估,参考 MongoDB 同步至 MongoDB 使用说明。
前提条件
已注册腾讯云账号并完成实名认证。
源数据库和目标数据库符合 DTS 同步功能和版本要求,请参见 MongoDB 同步至 MongoDB 使用说明。
已根据接入类型完成网络打通(公网/专线/VPN/云联网),请参见 准备工作概述。
已在源端和目标端创建满足权限要求的数据库账号。
建议在源数据库创建一个具有读写权限账号供迁移/同步使用,参考方式如下。
# 源数据库为副本集、单节点时的语法示例use admindb.createUser({user: "username",pwd: "password",roles:[{role: "readWriteAnyDatabase", db: "admin"},{role: "read", db: "local"}]})# 源数据库为分片集群时的语法示例use admindb.createUser({user: "username",pwd: "password",roles:[{role: "readWriteAnyDatabase", db: "admin"},{role: "read", db: "local"},{role: "read", db: "config"}]})
目标库为腾讯云数据库实例,可以使用 mongouser 进行迁移/同步,也可以自行创建账号,自行创建账号的参考方式如下。
db.createUser({user:"username",pwd:"password",roles:[{role:"readWriteAnyDatabase",db:"admin"}]})
注意事项
MongoDB 链路未内置破环机制,不支持两端同时写入。正反向链路为串行关系,任何时刻仅一端写入。
DTS 执行全量数据同步时会占用源端实例资源,可能导致源实例负载上升,建议在业务低峰期执行。
同步过程中请勿修改或删除源端和目标端的数据库用户信息(包括用户名、密码和权限)及端口号。
操作步骤概要
1. 创建数据迁移任务(A → B),迁移类型选择全量 + 增量迁移。
2. 等待迁移进入增量同步阶段,数据延迟归零后执行业务割接。
3. 创建回切同步任务(B → A),初始化类型选择不选择,仅同步增量。
4. (可选)目标库 B 异常时,执行回切至源库 A。
详细操作步骤
步骤一:创建数据迁移任务(A → B)
说明:
1. 登录 DTS 控制台,在左侧导航栏选择数据迁移。
2. 单击新建迁移任务,在新建迁移任务页面,选择迁移的源实例类型和所属地域,目标实例类型和所属地域,规格等,然后单击立即购买。
3. 在设置源和目标数据库页面,完成任务设置、源库设置和目标库设置,单击保存。
源端数据库类型选择 MongoDB,根据实际部署选择接入类型(公网/云服务器自建/专线/VPN/云联网/云数据库),填写连接信息。
目标端数据库类型选择 MongoDB,接入类型选择云数据库,选择目标实例。
4. 在设置迁移选项及选择迁移对象页面,设置迁移类型和迁移对象,单击下一步。
迁移类型选择全量 + 增量迁移。
迁移对象选择整个实例或指定对象。
5. 在设置一致性校验页面,勾选开启数据一致性校验,配置参数后,单击下一步。
6. 在校验任务页面,完成迁移前校验工作,单击立即启动。
步骤二:业务割接
1. 登录 DTS 控制台,等待数据迁移任务的迁移步骤显示为同步增量,并且目标与源库数据差距为 0KB,目标与源库时间延迟为 0 秒。
2. 暂停源库业务,停止新的数据写入。
3. 再次查看迁移任务,等待目标与源库数据差距为 0KB,目标与源库时间延迟为 0 秒,并保持 1 分钟以上,单击完成,结束增量迁移任务。
4. 验证源库和目标库的数据一致后,确定割接时机,将业务系统指向目标数据库,恢复业务使用。
步骤三:创建回切同步任务(B → A)
说明:
1. 登录 DTS 控制台,在左侧导航栏选择数据同步。
2. 单击新建同步任务,在新建同步任务页面,选择同步的源实例类型和所属地域,目标实例类型和所属地域,规格等,然后单击立即购买。
3. 在设置同步源和目标数据库页签,填写源和目标数据库等信息,然后单击测试连通性,测试连通性后,单击下一步。
源端选择目标库 B。
目标端选择源库 A。
4. 在设置同步选项和同步对象页签,将对数据初始化选项、数据同步选项、同步对象选项进行设置,在设置完成后单击保存并下一步。
初始化类型选择不选择。
已存在同名集合选择忽略并继续执行。
冲突处理机制选择冲突覆盖。
同步操作类型选择 Insert、Update、Delete、DDL。
同步对象选择范围与步骤一的迁移对象保持一致。
5. 在设置一致性校验页面,勾选开启数据一致性校验,配置参数后,单击下一步。
6. 在校验任务页面,完成校验并全部校验项通过后,单击立即启动。
步骤四:执行回切(可选)
当目标库 B 出现异常需要回切至源库 A 时,执行以下操作:
1. 登录 DTS 控制台,确认回切同步任务(B→A)的同步步骤显示为同步中,目标与源库数据差距为 0KB,时间延迟为 0 秒。
2. 暂停目标库 B 的业务,停止新的数据写入。
3. 在同步任务操作列选择更多 > 结束,结束回切同步任务。
4. 验证源库和目标库的数据一致后,将业务系统指向源库 A,恢复业务使用。
常见问题
Q1:回切链路应在割接前还是割接后搭建?
两种方式均可:
割接后搭建(本文采用的方式):割接完成后再配置反向同步任务,操作流程更简洁直观。由于割接后源库 A 已停写,此时配置反向任务不会漏数据。
割接前搭建:正向任务进入增量阶段后提前配好反向任务但暂不启动,割接后立即启动。优点是减少回切链路搭建时间,但需要注意如果启动前检查超过 2 小时,需要重新发起校验。
Q2:MongoDB 是否支持两端同时写入(异地多活)?
当前不支持。DTS MongoDB 同步链路未内置破环机制,不支持两端同时写入。如果两个方向的同步任务同时运行且两端都在写入,会产生数据回环导致数据错乱。本文方案中正反向链路为串行关系,任何时刻仅一端写入。
相关文档
文档 | 说明 |
DTS 任务创建前的网络打通、账号准备等前置工作指导。 | |
MongoDB 同步任务的详细配置步骤和参数说明。 | |
MongoDB 数据迁移任务的配置步骤和参数说明。 | |
割接前数据对比验证工具的使用说明。 |