文档中心>实践教程>数据传输服务>基于 DTS 搭建 MongoDB 同步灾备实践教程

基于 DTS 搭建 MongoDB 同步灾备实践教程

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

我的收藏

方案概览

本方案适用于腾讯云上 MongoDB 生产实例搭建灾备架构的场景。通过 DTS 数据同步(全量+增量)将主库 A 实时同步至灾备库 B,主库故障时快速切换至灾备库。切换后根据主库 A 的恢复情况,搭建 B→A 反向同步链路切回 A,或为新主库 B 搭建 B→C 灾备同步链路,确保灾备能力不中断。

方案架构

业务场景

MongoDB 生产实例已在腾讯云上稳定运行,但缺少灾备架构。当实例所在可用区发生基础设施故障、数据库主节点出现不可恢复的异常、或因运维操作失误导致数据损坏时,业务中断时间完全取决于故障修复或数据恢复的速度,RTO 不可控。
本方案推荐使用 DTS 数据同步链路将主库 A 的全量 + 增量数据实时同步至灾备库 B。灾备库 B 平时不对外提供服务,仅作为 A 的热备副本——数据延迟通常在秒级。当主库 A 发生故障时,结束 A→B 同步任务并将业务切换至 B。
切换至 B 后,根据主库 A 的恢复情况选择不同的后续操作:
A 可恢复(灾备演练、临时故障等):搭建 B→A 反向同步链路,数据追平后将业务切回 A。
A 不可恢复(可用区级故障、数据严重损坏等):为新主库 B 搭建 B→C 灾备同步链路,确保灾备能力不中断。

架构图



方案优势

RPO 趋近于 0:灾备库实时保持与主库数据一致,切换时数据丢失最小化。
灾备不断档:切换完成后可快速重建灾备链路,灾备能力不存在空窗期。
支持异地容灾:灾备库可部署在不同地域,满足跨地域容灾合规要求。

前提条件

已注册腾讯云账号并完成实名认证。
源数据库和目标数据库符合 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. 主库 A 故障或需要维护时,根据 A 的状态执行灾备切换与重建:
A 可恢复时,切换至 B 后搭建 B→A 反向同步并切回 A;
A 不可恢复时,切换至 B 后创建 B→C 新灾备。

详细操作步骤

步骤一:创建灾备同步任务(A→B)

说明:
各参数的详细配置说明请参见 MongoDB 同步操作指导
1. 登录 DTS 控制台,在左侧导航栏选择数据同步
2. 单击新建同步任务,在新建同步任务页面,选择同步的源实例类型和所属地域,目标实例类型和所属地域,规格等,然后单击立即购买
3. 设置同步源和目标数据库页签,填写源和目标数据库等信息,然后单击测试连通性,测试连通性后,单击下一步
源端选择主库 A。
目标端选择灾备库 B。
4. 设置同步选项和同步对象页签,将对数据初始化选项、数据同步选项、同步对象选项进行设置,在设置完成后单击保存并下一步
初始化类型选择全量数据初始化
同步对象选择整个实例或指定对象。
5. 设置一致性校验页面,勾选开启数据一致性校验,配置参数后,单击下一步
6. 在校验任务页面,完成校验并全部校验项通过后,单击立即启动。任务启动后进入持续同步状态。

步骤二:灾备切换与重建

确认主库 A 需要切换(计划内维护、故障等)时,根据主库 A 的状态选择对应方案。

主库 A 可恢复:

适用于灾备演练、计划内维护、临时故障等主库 A 仍可访问且后续可恢复的场景。
1. 切换至灾备库 B
1.1 登录 DTS 控制台,确认灾备同步任务(A→B)的同步步骤显示为同步中,目标与源库数据差距为 0 KB,时间延迟为 0 秒。
1.2 暂停主库 A 的业务,停止新的数据写入。
1.3 在同步任务操作列选择更多 > 结束,结束 A→B 同步任务。
1.4 验证源库和目标库的数据一致后,将业务系统指向灾备库 B,恢复业务使用。
2. 创建反向同步任务(B→A)
2.1 在 DTS 控制台左侧导航栏选择数据同步
2.2 单击新建同步任务,在新建同步任务页面,选择同步的源实例类型和所属地域,目标实例类型和所属地域,规格等,然后单击立即购买
2.3 设置同步源和目标数据库页签,填写源和目标数据库等信息,然后单击测试连通性,测试连通性后,单击下一步
源端选择灾备库 B(当前主库)。
目标端选择原主库 A。
2.4 设置同步选项和同步对象页签,将对数据初始化选项、数据同步选项、同步对象选项进行设置,在设置完成后单击保存并下一步
初始化类型选择不选择
2.5 设置一致性校验页面,勾选开启数据一致性校验,配置参数后,单击下一步
2.6 在校验任务页面,完成校验并全部校验项通过后,单击立即启动
3. 切回原主库 A
3.1 登录 DTS 控制台,确认反向同步任务(B→A)的同步步骤显示为同步中,目标与源库数据差距为 0 KB,时间延迟为 0 秒。
3.2 暂停灾备库 B 的业务,停止新的数据写入。
3.3 在同步任务操作列选择更多 > 结束,结束 B→A 同步任务。
3.4 验证源库和目标库的数据一致后,将业务系统指向原主库 A,恢复业务使用。

主库 A 不可恢复:

适用于可用区级故障、数据严重损坏等主库 A 完全不可用的场景。
1. 切换至灾备库 B
1.1 登录 DTS 控制台,以灾备库 B 当前已同步的数据为准执行切换。
1.2 在同步任务操作列选择更多 > 结束,结束 A→B 同步任务。
1.3 将业务系统指向灾备库 B,恢复业务使用。
2. 创建灾备同步任务(B→C)
2.1 在 DTS 控制台左侧导航栏选择数据同步
2.2 单击新建同步任务,在新建同步任务页面,选择同步的源实例类型和所属地域,目标实例类型和所属地域,规格等,然后单击立即购买
2.3 设置同步源和目标数据库页签,填写源和目标数据库等信息,然后单击测试连通性,测试连通性后,单击下一步
源端选择新主库 B。
目标端选择新灾备库 C。
2.4 设置同步选项和同步对象页签,将对数据初始化选项、数据同步选项、同步对象选项进行设置,在设置完成后单击保存并下一步
初始化类型选择全量数据初始化
同步对象选择范围与步骤一保持一致。
2.5 设置一致性校验页面,勾选开启数据一致性校验,配置参数后,单击下一步
2.6 在校验任务页面,完成校验并全部校验项通过后,单击立即启动。任务启动后进入持续同步状态。

常见问题

Q1:MongoDB 是否支持两端同时写入(异地多活)?

当前不支持。DTS MongoDB 同步链路未内置破环机制,不支持两端同时写入。如果两个方向的同步任务同时运行且两端都在写入,会产生数据回环导致数据错乱。本文方案中正反向链路为串行关系,任何时刻仅一端写入。

Q2:灾备库 B 的实例规格如何选择?

建议灾备库 B 的实例规格与主库 A 保持一致或略高。灾备切换后 B 将直接承接生产负载,如果规格不足可能导致切换后性能不达预期。建议在日常运维中定期对灾备库进行性能验证。

相关文档

文档
说明
DTS 任务创建前的网络打通、账号准备等前置工作指导。
MongoDB 同步任务的详细配置步骤和参数说明。
割接前数据对比验证工具的使用说明。