添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

数据传输服务DTS(Data Transmission Service)支持 云数据库MongoDB版 (分片集群架构)间的双向同步,适用于异地多活(单元化)、数据异地容灾等多种应用场景。本文介绍双向数据同步的配置步骤。

前提条件

  • 已创建源和目标 云数据库MongoDB版 分片集群实例,创建方式,请参见 创建分片集群实例

    重要
    • 云数据库MongoDB版 分片集群实例(含反向任务的源实例)的所有Shard节点需要申请连接地址,且各Shard的账号和密码需保持一致。申请方法,请参见 申请Shard连接地址

    • 支持的版本,请参见 同步方案概览

  • 建议目标 云数据库MongoDB版 实例的存储空间比源 云数据库MongoDB版 实例占用的存储空间大10%。

  • 您需要将源和目标实例的Shard和ConfigServer节点参数 replication.oplogGlobalIdEnabled 设置为 true ,设置方式,请参见 设置数据库参数

    说明

    若未设置为 true ,将会导致实例预检查失败或者报错 two-way mongo must have gid

  • 请根据库表结构的创建方式,进行相应的准备工作。

    说明

    配置数据分片可以避免数据被同步至同一Shard(存储数据库数据的组件),导致无法发挥集群性能;开启Balancer并进行预分片可以避免数据倾斜问题。

注意事项

类型

说明

源和目标库的限制

  • 带宽要求:源库所属的服务器需具备足够的出口带宽,否则将影响数据同步速率。

  • 待同步的集合需具备主键或唯一约束,且字段具有唯一性,否则可能会导致目标数据库中出现重复数据。

  • 待同步集合中的_id字段需具有唯一性,否则可能会导致数据不一致。

  • 如同步对象为集合级别,且需进行编辑(如集合的名称映射),则单次同步任务仅支持同步至多1000个集合。当超出数量限制,任务提交后会显示请求报错,此时建议您拆分待同步的集合,分批配置多个任务,或者配置整库的同步任务。

  • 源库待同步的单条数据不能超过16 MB,否则会导致任务失败。

  • 源库不支持Azure Cosmos DB for MongoDB和弹性集群的Amazon DocumentDB。

  • 源库需开启Oplog日志,并确保Oplog日志至少保留7天以上,否则可能会因无法获取源库的数据变更而导致任务失败,极端情况下甚至可能会导致数据不一致或丢失。由此导致的问题,不在DTS的SLA保障范围内。

    重要
    • 建议通过Oplog日志获取源库的数据变更。

    • 使用Change Streams获取源库的数据变更时,不支持双向同步。

  • MongoDB分片集群为源的单向同步不支持源端做分片的扩缩容,双向同步源和目标都不支持分片数量的扩缩容,否则会导致DTS任务失败。

  • 源MongoDB分片集群实例的Mongos节点的数量不能超过10个。

  • 若待同步的集合中包含TTL(Time To Live)索引,则可能会导致数据不一致或实例产生延迟。

  • 请确保源和目标实例中没有孤立文档,否则可能会导致数据不一致甚至任务失败。更多信息,请参见 孤立文档 如何清理MongoDB(分片集群架构)的孤立文档

  • 源和目标库需为相同架构的 云数据库MongoDB版 ,即自建MongoDB或不同架构的MongoDB不支持双向同步。

  • 源库操作限制:

    • 在结构同步和全量同步阶段,请勿执行库或集合的结构变更(包含数组类型数据的更新),否则会导致数据同步任务失败或源库与目标库的数据不一致。

    • 若仅执行全量数据同步,请勿向源实例中写入新的数据,否则会导致源库与目标库的数据不一致。

    • 在同步实例运行期间,请勿在源库对待同步的对象执行更改数据分布的相关命令(例如shardCollection、reshardCollection、unshardCollection、moveCollection、movePrimary等),否则可能会导致数据不一致。

  • 若源库的均衡器Balancer存在均衡数据的行为,则可能会导致实例产生延迟。

  • 不支持通过SRV地址连接MongoDB数据库。

其他限制

  • 在任务开始前,需要为源端待同步的数据添加与目标端对应的分片键;在任务开始后,待同步的数据在使用INSERT命令时必须包含分片键,使用UPDATE命令时不支持更改分片键。

  • 建议源和目标库的MongoDB的数据库版本保持一致,或者从低版本同步到高版本以保障兼容性。如为高版本同步至低版本,可能存在数据库兼容性问题。

  • 若目标集合存在唯一索引或目标集合的 capped 属性为 true 时,则在增量同步阶段该集合不支持并发回放(只支持单线程写入),从而可能会导致任务延迟增高。

  • 不支持同步admin和local库中的数据。

  • 不保留事务信息,即源库中的事务同步到目标库时会转变为单条的记录。

  • 在DTS将数据写入目标集合时,如果发生主键或唯一键冲突,DTS将直接跳过相应的数据写入语句,保留目标集合已有的数据。

  • 执行数据同步前需评估源库和目标库的性能,同时建议业务低峰期执行数据同步。否则全量数据初始化时将占用源库和目标库一定的读写资源,可能会导致数据库的负载上升。

  • 全量初始化会并发执行INSERT操作,导致目标数据库的集合产生碎片,因此全量初始化完成后目标实例的集合空间比源实例的集合空间大。

  • 在DTS同步期间,不允许有除DTS外的数据写入目标库,否则会导致源库与目标库数据不一致。例如,有除DTS外的数据写入目标库时,使用DMS执行在线DDL变更,可能引起目标库数据丢失。

  • 双向同步实例包含正向和反向同步任务,在配置或重置双向同步实例时,若其中一个任务的目标对象是另一个任务待同步的对象:

    • 仅允许其中一个任务同步全量和增量数据,另一个任务仅支持同步增量数据。

    • 当前任务的源数据仅支持同步到当前任务的目标端,同步过来的数据不会作为另一个任务的源数据继续同步。

  • 由于DTS写入数据的逻辑为并发写入,所以会导致目标端占用的存储空间比源端大5%~10%。

  • 目标端MongoDB的count数量需要使用 db.$table_name.aggregate([{ $count:"myCount"}]) 语法查询。

  • 请确保目标端MongoDB没有与源端相同的主键(默认为_id),否则会导致数据丢失。若目标端有与源端相同的主键,请在不影响业务的前提下清空目标端的相关数据(删掉目标端中与源端相同_id的文档)。

  • 全量同步期间必须关闭源MongoDB数据库的均衡器(Balancer),直至每个子任务都运行到增量阶段,否则可能会造成数据不一致。关于均衡器的操作,请参见 管理MongoDB均衡器Balancer

  • 若您无需使用DTS提供的库表结构同步功能(例如目标端已配置好数据分片),请勿在 对象配置 页面中勾选 同步类型 库表结构同步 ,否则可能会因为分片冲突而导致数据不一致或任务失败。

  • 若实例运行失败,DTS技术支持人员将在8小时内尝试恢复该实例。在恢复失败实例的过程中,可能会对该实例进行重启、调整参数等操作。

    说明

    在调整参数时,仅会修改DTS实例的参数,不会对数据库中的参数进行修改。 可能修改的参数,包括但不限于 修改实例参数 中的参数。

  • 在将业务切换为目标MongoDB数据库后,您需自行确保业务行为符合该MongoDB数据库对分片集合的要求。

费用说明

同步类型 链路配置费用
库表结构同步和全量数据同步 不收费。
增量数据同步 收费,详情请参见 计费概述

支持的双向同步架构

目前DTS仅支持两个 云数据库MongoDB版 实例(分片集群架构)之间的双向同步,暂不支持多个 云数据库MongoDB版 实例之间的双向同步。

支持的冲突检测

为保障同步数据的一致性,您需要确保同一个主键、业务主键或唯一键的记录只在双向同步的一个节点进行更新。

DTS通过冲突检测和修复最大程度地维护双向同步实例的稳定性。目前DTS支持进行检测的冲突类型包括:

  • INSERT导致的唯一性冲突

    INSERT要插入的记录在目标实例中出现冲突时,DTS会自动忽略INSERT操作。

  • UPDATE更新的记录不完全匹配

    UPDATE要更新的记录在目标实例中不存在或出现冲突时,DTS都会自动忽略UPDATE操作。

  • DELETE对应的记录不存在

    DELETE要删除的记录在目标实例中不存在时,DTS会自动忽略DELETE操作。

重要
  • 由于数据同步两端的系统时间可能存在差异、同步存在延时等多种因素,DTS无法完全保证冲突检测机制能够完全防止数据的冲突。在使用双向同步时,您需要在业务层面配合进行相应的改造,保证同一个主键、业务主键或唯一键的记录只在双向同步的某个节点进行更新。

  • 对于上述数据同步的冲突,DTS提供了默认的修复策略( Ignore )且不支持修改。

任务步骤说明

同步类型

说明

库表结构同步

将源 云数据库MongoDB版 中同步对象的结构同步到目标 云数据库MongoDB版 中。

全量同步

将源 云数据库MongoDB版 同步对象的存量数据全部同步到目标 云数据库MongoDB版 中。

说明

支持全量同步DATABASE和COLLECTION。

增量同步

在全量同步的基础上,将源 云数据库MongoDB版 的增量更新同步到目标 云数据库MongoDB版 中。

说明

增量同步不支持在任务开始运行后新建的数据库,支持同步的增量更新如下:

  • CREATE COLLECTION、INDEX

  • DROP COLLECTION、INDEX

  • RENAME COLLECTION

  • 在集合中插入、更新、删除文档的操作。

  • 在同步增量更新文档的数据时,仅支持同步使用 $set 命令更新的操作。

操作步骤

重要

本配置场景以先配置再购买DTS任务为例,无需填写源 云数据库MongoDB版 (分片集群架构)下的Shard数量。若您先购买再配置DTS任务,则需要在购买DTS任务时正确填写Shard数量。

  1. 进入目标地域的同步任务列表页面(二选一)。

    通过DTS控制台进入

    1. 登录 数据传输服务DTS控制台

    2. 在左侧导航栏,单击 数据同步

    3. 在页面左上角,选择同步实例所属地域。

    通过DMS控制台进入

    说明

    实际操作可能会因DMS的模式和布局不同,而有所差异。更多信息,请参见 极简模式控制台 自定义DMS界面布局与样式

    1. 登录 DMS数据管理服务

    2. 在顶部菜单栏中,选择 Data + AI > 数据传输(DTS) > 数据同步

    3. 同步任务 右侧,选择同步实例所属地域。

  2. 单击 创建任务 ,进入任务配置页面。

  3. 配置源库及目标库信息。

    警告

    选择源和目标实例后,建议您仔细阅读页面上方显示的 使用限制 ,否则可能会导致任务失败或数据不一致。

    类别

    配置

    说明

    任务名称

    DTS会自动生成一个任务名称,建议配置具有业务意义的名称(无唯一性要求),便于后续识别。

    源库信息

    选择已有连接信息

    • 若您需要使用 已录入系统 (新建或保存)的数据库实例,请在下拉列表中选择所需的数据库实例,下方的数据库信息将自动进行配置。

      说明

      DMS控制台的配置项为 选择DMS数据库实例

    • 若您未将数据库实例录入到系统,或无需使用已录入系统的数据库实例,则需要手动配置下方的数据库信息。

    数据库类型

    选择 MongoDB

    接入方式

    选择 云实例

    实例地区

    选择源 云数据库MongoDB版 所属地域。

    是否跨阿里云账号

    本示例使用当前阿里云账号下的数据库实例,需选择 不跨账号

    架构类型

    选择 分片集群架构

    迁移方式

    选择 Oplog

    实例ID

    选择源 云数据库MongoDB版 实例ID。

    鉴权数据库名称

    填入源 云数据库MongoDB版 实例数据库账号所属的数据库名称,若未修改过则默认为admin。

    数据库账号

    填入源 云数据库MongoDB版 的数据库账号,需具备待同步库、config库、admin库和local库的read权限。

    数据库密码

    填入该数据库账号对应的密码。

    Shard账号

    填入源 云数据库MongoDB版 的数据库Shard账号。

    Shard密码

    填入源 云数据库MongoDB版 的数据库Shard密码。

    连接方式

    DTS支持 非加密连接 SSL安全连接 Mongo Atlas SSL 三种连接方式。 连接方式 的选项与 接入方式 架构类型 有关,请以控制台为准。

    说明
    • 架构类型 分片集群架构 ,且 迁移方式 Oplog 的MongoDB数据库,不支持 SSL安全连接

    • 若源库为自建( 接入方式 不为 云实例 副本集架构 的MongoDB数据库,并且选择了 SSL安全连接 ,DTS还支持上传CA证书对连接进行校验。

    目标库信息

    选择已有连接信息

    • 若您需要使用 已录入系统 (新建或保存)的数据库实例,请在下拉列表中选择所需的数据库实例,下方的数据库信息将自动进行配置。

      说明

      DMS控制台的配置项为 选择DMS数据库实例

    • 若您未将数据库实例录入到系统,或无需使用已录入系统的数据库实例,则需要手动配置下方的数据库信息。

    数据库类型

    选择 MongoDB

    接入方式

    选择 云实例

    实例地区

    选择目标 云数据库MongoDB版 所属地域。

    是否跨阿里云账号

    本示例使用当前阿里云账号下的数据库实例,需选择 不跨账号

    架构类型

    选择 分片集群架构

    实例ID

    选择目标 云数据库MongoDB版 实例ID。

    鉴权数据库名称

    填入目标 云数据库MongoDB版 实例数据库账号所属的数据库名称,若未修改过则默认为admin。

    数据库账号

    填入目标 云数据库MongoDB版 的数据库账号,需具备dbAdminAnyDatabase权限、目标库的readWrite权限和local库的read权限。

    数据库密码

    填入该数据库账号对应的密码。

    连接方式

    DTS支持 非加密连接 SSL安全连接 Mongo Atlas SSL 三种连接方式。 连接方式 的选项与 接入方式 架构类型 有关,请以控制台为准。

    说明
    • 架构类型 分片集群架构 的MongoDB数据库,不支持 SSL安全连接

    • 若目标库为自建( 接入方式 不为 云实例 副本集架构 的MongoDB数据库,并且选择了 SSL安全连接 ,DTS还支持上传CA证书对连接进行校验。

  4. 配置完成后,在页面下方单击 测试连接以进行下一步

    说明

    请确保DTS服务的IP地址段能够被自动或手动添加至源库和目标库的安全设置中,以允许DTS服务器的访问。更多信息,请参见 添加DTS服务器的IP地址段

  5. 配置任务对象。

    1. 对象配置 页面,配置待同步的对象。

      配置

      说明

      同步类型

      固定选中 增量同步 。默认情况下,您还需要同时选中 库表结构同步 全量同步 。预检查完成后,DTS会将源实例中待同步对象的全量数据在目标集群中初始化,作为后续增量同步数据的基线数据。

      目标已存在表的处理模式

      • 预检查并报错拦截 :检查目标数据库中是否有同名的集合。如果目标数据库中没有同名的集合,则通过该检查项目;如果目标数据库中有同名的集合,则在预检查阶段提示错误,数据同步任务不会被启动。

        说明

        如果目标库中同名的集合不方便删除或重命名,您可以更改该集合在目标库中的名称,详情请参见 设置同步对象在目标实例中的名称

      • 忽略报错并继续执行 :跳过目标数据库中是否有同名集合的检查项。

        警告

        选择为 忽略报错并继续执行 ,可能导致数据不一致,给业务带来风险,例如:

        • 在目标库遇到与源库主键或唯一键的值相同的记录,则会保留目标库中的该条记录,即源库中的该条记录不会同步至目标库中。

        • 可能会导致无法初始化数据、只能同步部分的数据或同步失败。

      同步拓扑

      请选择 双向同步

      是否过滤DDL

      • 选择为是:不同步DDL操作。

      • 选择为否:同步DDL操作。

        说明

        DDL语法同步方向限制 。为保障双向同步链路的稳定性,只支持正向同步任务同步DDL,不支持反向同步任务同步DDL。

      冲突修复策略

      如遇到以上 支持的冲突检测 ,根据业务需要,选择合适的冲突修复策略。

      • TaskFailed (遇到冲突,任务报错退出)

        当数据同步遇到冲突时,同步任务直接报错并退出,同步任务进入失败状态,需要您介入修复任务。

      • Ignore (遇到冲突,直接使用目标实例中的冲突记录)

        当数据同步遇到冲突时,直接跳过当前同步语句,继续往下执行,选择使用目标库中的冲突记录。

      • Overwrite (遇到冲突,直接覆盖目标实例中的冲突记录)

        当数据同步遇到冲突时,直接覆盖目标库中的冲突记录。

      说明

      本场景仅支持 Ignore

      源库对象

      源库对象 框中单击待同步对象,然后单击 向右 将其移动至 已选择对象 框。

      说明

      同步对象的选择粒度为DATABASE、COLLECTION。

      已选择对象

      • 如需设置待同步对象在目标实例中的名称,或指定目标实例中接收数据的对象,请右击 已选择对象 中的同步对象进行修改。设置方式,请参见 库表列名映射

      • 如需移除已选择的同步对象,请在 已选择对象 框中单击待同步的对象,然后单击 image 将其移动到 源库对象 框。

      说明
      • 如需按库或集合级别选择增量同步的操作,请在 已选择对象 中右击待同步的对象,并在弹出的对话框中进行选择。

      • 如需设置条件过滤数据(全量同步阶段支持条件过滤数据,增量同步阶段不支持),请在 已选择对象 中右击待同步的表,并在弹出的对话框中进行设置。设置方法,请参见 设置过滤条件

      • 如果使用了对象名映射功能(指定用于接收数据的数据库或集合),可能会导致依赖这个对象的其他对象同步失败。

    2. 单击 下一步高级配置 ,进行高级参数配置。

      配置

      说明

      选择调度该任务的专属集群

      DTS默认将任务调度到共享集群上,您无需选择。若您希望任务更加稳定,可以购买专属集群来运行DTS同步任务。更多信息,请参见 什么是DTS专属集群

      源库、目标库无法连接后的重试时间

      在同步任务启动后,若源库或目标库连接失败则DTS会报错,并会立即进行持续的重试连接,默认持续重试时间为720分钟,您也可以在取值范围(10~1440分钟)内自定义重试时间,建议设置30分钟以上。如果DTS在设置的重试时间内重新连接上源库、目标库,同步任务将自动恢复。否则,同步任务将会失败。

      说明
      • 针对同源或者同目标的多个DTS实例,如DTS实例A和DTS实例B,设置网络重试时间时A设置30分钟,B设置60分钟,则重试时间以低的30分钟为准。

      • 由于连接重试期间,DTS将收取任务运行费用,建议您根据业务需要自定义重试时间,或者在源和目标库实例释放后尽快释放DTS实例。

      源库、目标库出现其他问题后的重试时间

      在同步任务启动后,若源库或目标库出现非连接性的其他问题(如DDL或DML执行异常),则DTS会报错并会立即进行持续的重试操作,默认持续重试时间为10分钟,您也可以在取值范围(1~1440分钟)内自定义重试时间,建议设置10分钟以上。如果DTS在设置的重试时间内相关操作执行成功,同步任务将自动恢复。否则,同步任务将会失败。

      重要

      源库、目标库出现其他问题后的重试时间 的值需要小于 源库、目标库无法连接后的重试时间 的值。

      是否限制全量同步速率

      在全量同步阶段,DTS将占用源库和目标库一定的读写资源,可能会导致数据库的负载上升。您可以根据实际情况,选择是否对全量同步任务进行限速设置(设置 每秒查询源库的速率QPS 每秒全量迁移的行数RPS 每秒全量迁移的数据量(MB)BPS ),以缓解目标库的压力。

      说明

      待同步的数据中,同一张表内主键_id的数据类型是否唯一

      待同步的数据中,同一个集合内主键 _id 的数据类型是否唯一。

      重要
      • 请根据实际情况选择,否则可能会导致数据丢失。

      • 仅当 同步类型 选择了 全量同步 ,才有此配置项。

      • :唯一。在全量同步阶段,DTS将不会扫描源库待同步数据中主键的数据类型;在单个集合中,DTS仅会同步一种数据类型的主键所对应的数据。

      • :不唯一。在全量同步阶段,DTS将扫描源库待同步数据中主键的数据类型,并同步其所有数据。

      是否限制增量同步速率

      您也可以根据实际情况,选择是否对增量同步任务进行限速设置(设置 每秒增量同步的行数RPS 每秒增量同步的数据量(MB)BPS ),以缓解目标库的压力。

      环境标签

      您可以根据实际情况,选择用于标识实例的环境标签。本示例无需选择。

      配置ETL功能

      选择是否配置ETL功能。关于ETL的更多信息,请参见 什么是ETL

      监控告警

      是否设置告警,当同步失败或延迟超过阈值后,将通知告警联系人。

    3. 单击 下一步数据校验 ,进行数据校验任务配置。

      若您需要使用数据校验功能,配置方法请参见 配置数据校验

  6. 保存任务并进行预检查。

    • 若您需要查看调用API接口配置该实例时的参数信息,请将鼠标光标移动至 下一步保存任务并预检查 按钮上,然后单击气泡中的 预览OpenAPI参数

    • 若您无需查看或已完成查看API参数,请单击页面下方的 下一步保存任务并预检查

    说明
    • 在同步作业正式启动之前,会先进行预检查。只有预检查通过后,才能成功启动同步作业。

    • 如果预检查失败,请单击失败检查项后的 查看详情 ,并根据提示修复后重新进行预检查。

    • 如果预检查产生警告:

      • 对于不可以忽略的检查项,请单击失败检查项后的 查看详情 ,并根据提示修复后重新进行预检查。

      • 对于可以忽略无需修复的检查项,您可以依次单击 点击确认告警详情 确认屏蔽 确定 重新进行预检查 ,跳过告警检查项重新进行预检查。如果选择屏蔽告警检查项,可能会导致数据不一致等问题,给业务带来风险。

  7. 购买实例。

    1. 预检查通过率 显示为 100% 时,单击 下一步购买

    2. 购买 页面,选择数据同步实例的计费方式、链路规格,详细说明请参见下表。

      类别

      参数

      说明

      信息配置

      计费方式

      • 预付费(包年包月):在新建实例时支付费用。适合长期需求,价格比按量付费更实惠,且购买时长越长,折扣越多。

      • 后付费(按量付费):按小时扣费。适合短期需求,用完可立即释放实例,节省费用。

      资源组配置

      实例所属的资源组,默认为 default resource group 。更多信息,请参见 什么是资源管理

      链路规格

      DTS为您提供了不同性能的同步规格,同步链路规格的不同会影响同步速率,您可以根据业务场景进行选择。更多信息,请参见 数据同步链路规格说明

      订购时长

      在预付费模式下,选择包年包月实例的时长和数量,包月可选择1~9个月,包年可选择1年、2年、3年和5年。

      说明

      该选项仅在付费类型为 预付费 时出现。

    3. 配置完成后,阅读并勾选 《数据传输(按量付费)服务条款》

    4. 单击 购买并启动 ,并在弹出的 确认 对话框,单击 确定

      您可在数据同步界面查看具体任务进度。

  8. 配置反向同步任务。

    1. 等待正向同步任务同步初始化完成,直至 运行状态 处于 运行中

    2. 定位至反向同步任务,单击 配置任务

    3. 参考 步骤3 ~ 步骤6 ,配置反向同步任务。

      重要
      • 配置反向任务时,您需要选择正确的源和目标实例。反向同步中源实例为正向同步中的目标实例,目标实例为正向同步中的源实例,并且您还需仔细确认实例信息(如数据库名称、账号、密码)的一致性。

      • 配置反向任务时不建议更改映射名称,否则可能会导致数据不一致。

      • 反向同步任务源和目标库的 实例地区 不支持修改,且需要配置的参数比正向同步任务少,请以控制台界面为准。

      • 反向同步任务的 目标已存在表的处理模式 配置不检测正向同步任务同步至目标实例中的表。

      • 反向同步任务不支持同步正向任务 已选择对象 中的对象。

      • 反向同步任务将自动过滤DDL操作。

    4. 预检查通过率 显示为 100% 时,单击 返回列表

  9. 第二个同步任务配置完成后,等待两个同步任务链路的 运行状态 均处于 运行中 ,即完成双向数据同步的配置流程。