文档中心>实践教程>数据传输服务>基于 DTS 搭建 MongoDB 上云迁移回切实践教程

基于 DTS 搭建 MongoDB 上云迁移回切实践教程

最近更新时间:2026-07-02 15:12:30

我的收藏

方案概览

本方案适用于将自建或第三方云厂商的 MongoDB 迁移至腾讯云,并在割接后保留回切能力的场景。通过 DTS 数据迁移(全量+增量)完成正向迁移,搭配 DTS 数据同步(仅增量)搭建反向回切通道,确保割接后如果目标库出现兼容性或性能异常,可以快速回切至源库。

方案架构

业务场景

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

架构图



方案优势

资源消耗低:回切链路仅同步增量数据,无需重复全量传输,对源端和目标端资源占用极小。实测在中等写入吞吐(数千 QPS)场景下,反向同步任务对目标库 CPU 占用通常不超过 5%。
按需释放:确认业务在目标库稳定运行后,可随时结束回切链路并下线源库。

方案限制

需要双向同时写入(异地多活)→ 当前 MongoDB 链路未内置破环机制,不支持两端同时写入。
纯冷数据归档迁移(无增量)→ 直接使用全量迁移即可,无需搭建反向链路。
跨大版本迁移且存在不兼容 DDL → 建议先做兼容性评估,参考 MongoDB 同步至 MongoDB 使用说明

前提条件

已注册腾讯云账号并完成实名认证。
源数据库和目标数据库符合 DTS 同步功能和版本要求,请参见 MongoDB 同步至 MongoDB 使用说明
已根据接入类型完成网络打通(公网/专线/VPN/云联网),请参见 准备工作概述
已在源端和目标端创建满足权限要求的数据库账号。
建议在源数据库创建一个具有读写权限账号供迁移/同步使用,参考方式如下。
# 源数据库为副本集、单节点时的语法示例
use admin
db.createUser({user: "username",pwd: "password",roles:[{role: "readWriteAnyDatabase", db: "admin"},{role: "read", db: "local"}]})
# 源数据库为分片集群时的语法示例
use admin
db.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)

说明:
各参数的详细配置说明请参见 MongoDB 数据迁移指导
1. 登录 DTS 控制台,在左侧导航栏选择数据迁移
2. 单击新建迁移任务,在新建迁移任务页面,选择迁移的源实例类型和所属地域,目标实例类型和所属地域,规格等,然后单击立即购买
3. 在设置源和目标数据库页面,完成任务设置、源库设置和目标库设置,单击保存
源端数据库类型选择 MongoDB,根据实际部署选择接入类型(公网/云服务器自建/专线/VPN/云联网/云数据库),填写连接信息。
目标端数据库类型选择 MongoDB,接入类型选择云数据库,选择目标实例。
4. 在设置迁移选项及选择迁移对象页面,设置迁移类型和迁移对象,单击下一步
迁移类型选择全量 + 增量迁移
迁移对象选择整个实例或指定对象。
5. 设置一致性校验页面,勾选开启数据一致性校验,配置参数后,单击下一步
6. 在校验任务页面,完成迁移前校验工作,单击立即启动

步骤二:业务割接

1. 登录 DTS 控制台,等待数据迁移任务的迁移步骤显示为同步增量,并且目标与源库数据差距为 0KB,目标与源库时间延迟为 0 秒。
2. 暂停源库业务,停止新的数据写入。
3. 再次查看迁移任务,等待目标与源库数据差距为 0KB,目标与源库时间延迟为 0 秒,并保持 1 分钟以上,单击完成,结束增量迁移任务。
4. 验证源库和目标库的数据一致后,确定割接时机,将业务系统指向目标数据库,恢复业务使用。

步骤三:创建回切同步任务(B → A)

说明:
各参数的详细配置说明请参见 MongoDB 同步操作指导
1. 登录 DTS 控制台,在左侧导航栏选择数据同步
2. 单击新建同步任务,在新建同步任务页面,选择同步的源实例类型和所属地域,目标实例类型和所属地域,规格等,然后单击立即购买
3. 设置同步源和目标数据库页签,填写源和目标数据库等信息,然后单击测试连通性,测试连通性后,单击下一步
源端选择目标库 B。
目标端选择源库 A。
4. 设置同步选项和同步对象页签,将对数据初始化选项、数据同步选项、同步对象选项进行设置,在设置完成后单击保存并下一步
初始化类型选择不选择
已存在同名集合选择忽略并继续执行
冲突处理机制选择冲突覆盖
同步操作类型选择 InsertUpdateDeleteDDL
同步对象选择范围与步骤一的迁移对象保持一致。
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 数据迁移任务的配置步骤和参数说明。
割接前数据对比验证工具的使用说明。