数据传输服务DTS(Data Transmission Service)支持云数据库MongoDB版(分片集群架构)间的双向同步,适用于异地多活(单元化)、数据异地容灾等多种应用场景。本文介绍双向数据同步的配置步骤。
前提条件
- 已创建源和目标云数据库MongoDB版分片集群实例,创建方式,请参见创建分片集群实例。
说明 支持的版本,请参见同步方案概览。
- 目标云数据库MongoDB版实例的存储空间须大于源云数据库MongoDB版实例占用的存储空间。
- 您需要将Shard和ConfigServer节点的参数replication.oplogGlobalIdEnabled设置为true,设置方式,请参见设置数据库参数。
- 源和目标云数据库MongoDB版为分片集群架构,您需要根据业务需求,在源和目标云数据库MongoDB版实例中创建需要分片的数据库和集合,并配置数据分片。具体操作,请参见设置数据分片以充分利用Shard性能。
说明
- 配置数据分片可避免数据被同步至同一Shard,导致无法发挥集群性能。
- Shard节点的账户密码和连接地址,且各shard的账号和密码需统一。设置方法,请参见创建Shard节点连接地址。
- 本配置场景以先配置后购买DTS任务为例,无需填写源云数据库MongoDB版(分片集群架构)下的Shard数量。
如您先购买后配置DTS任务,则需要在购买DTS任务时填写其正确的Shard数量。
注意事项
类型 | 说明 |
---|---|
源和目标库的限制 |
|
其他限制 |
|
支持的双向同步架构
目前DTS仅支持两个云数据库MongoDB版实例(分片集群架构)之间的双向同步,暂不支持多个云数据库MongoDB版实例之间的双向同步。
支持的冲突检测
为保障同步数据的一致性,您需要确保同一个主键、业务主键或唯一键的记录只在双向同步的一个节点进行更新。如果同时更新则会按照您在数据同步作业中配置的冲突修复策略进行响应。
DTS通过冲突检测和修复最大程度地维护双向同步实例的稳定性。目前DTS支持进行检测的冲突类型包括:
- INSERT导致的唯一性冲突
同步INSERT语句时违背了唯一性约束,例如双向同步的两个节点同时或者在极为接近的时间INSERT某个主键值相同的记录,那么同步到对端时,会因为已经存在相同主键值的记录,导致Insert同步失败。
- UPDATE更新的记录不完全匹配
- UPDATE要更新的记录在同步目标实例中不存在时,DTS会自动转化为INSERT,此时可能会出现唯一键的唯一性冲突。
- UPDATE要更新的记录出现主键或唯一键冲突。
- DELETE对应的记录不存在
DELETE要删除的记录在同步的目标实例中不存在。出现这种冲突时,不论配置何种冲突修复策略,DTS都会自动忽略DELETE操作。
注意
- 由于数据同步两端的系统时间可能存在差异、同步存在延时等多种因素,DTS无法完全保证冲突检测机制能够完全防止数据的冲突。在使用双向同步时,您需要在业务层面配合进行相应的改造,保证同一个主键、业务主键或唯一键的记录只在双向同步的某个节点进行更新。
- 对于上述数据同步的冲突,DTS提供了修复策略,您可以在配置双向同步时选择。
任务步骤说明
同步类型 | 说明 |
---|---|
库表结构同步 | 将源云数据库MongoDB版中同步对象的结构同步到目标云数据库MongoDB版中。 |
全量同步 | 将源云数据库MongoDB版同步对象的存量数据全部同步到目标云数据库MongoDB版中。
说明 支持全量同步DATABASE、COLLECTION、INDEX。
|
增量同步 | 在全量同步的基础上,将源云数据库MongoDB版的增量更新同步到目标云数据库MongoDB版中。
说明 支持同步的增量更新如下:
|
操作步骤
注意 本配置场景以先配置后购买DTS任务为例,无需填写源云数据库MongoDB版(分片集群架构)下的Shard数量。
如您先购买后配置DTS任务,则需要在购买DTS任务时填写其正确的Shard数量。