数据复制服务 DRS-将DDS同步到MongoDB:使用须知

时间:2024-09-26 16:05:01

使用须知

在创建同步任务前,请务必阅读以下使用须知。

  • 建议创建单独用于DRS任务连接的数据库账号,避免因为数据库账号密码修改,导致的任务连接失败。
  • 连接源和目标数据库的账号密码修改后,请参考修改连接信息章节修改DRS任务的连接信息,避免任务连接失败后自动重试,导致数据库账号被锁定影响使用。
表2 使用须知

类型名称

使用和操作限制

数据库权限设置

源数据库最小权限要求:

  • 增量同步权限要求:
    • 副本集:连接源数据库的用户需要有admin库的readAnyDatabase权限,有local数据库的read权限。
    • 单节点:连接源数据库的用户需要有admin库的readAnyDatabase权限,有local数据库的read权限。
    • 集群:连接源数据库mongos节点的用户需要有admin库的readAnyDatabase权限,有config数据库的read权限。

目标数据库最小权限要求:连接目标数据库的用户需要有admin数据库的dbAdminAnyDatabase权限,有目标数据库的readWrite权限。对于目标数据库是集群的实例,迁移账号还要有config库的read权限。

同步对象约束

  • 副本集:目前只支持集合(包括验证器,是否是固定集合),索引和视图的同步。
  • 集群:目前只支持集合(包括验证器,是否是固定集合),分片键,索引和视图的同步。
  • 单节点:目前只支持集合(包括验证器,是否是固定集合),索引和视图的同步。
  • 不支持_id字段没有索引的集合。
  • 不支持BinData()的第一个参数为2。
  • 不支持范围分片的情况下maxKey当主键。
  • 源库为集群时,不支持DBPointer和DBRef数据类型。
  • 请勿在源库集合的String类型字段中存储非UTF-8类型字符串,否则会导致同步前后数据不一致。
  • 不支持时序集合。

源数据库要求

  • 增量同步时,源数据库的Oplog日志必须打开。
  • 在磁盘空间允许的情况下,建议源数据库Oplog保存时间越长越好,建议为3天。
  • 源数据库的库名不能包含/\."$和空格,集合名和视图名中不能包含$字符或以system.开头。
  • 如果源数据库是集群,则必须关闭Balancer并清理孤儿文档。详细操作可参考如何关闭集合均衡器Balancer分片集群MongoDB迁移前清除孤儿文档

目标数据库要求

  • 不支持从高版本同步到低版本。
  • 目标数据库实例的运行状态必须正常。
  • 目标数据库实例必须有足够的磁盘空间。

操作须知

  • 源数据库为非集群实例时,增量同步阶段支持如下操作
    • 支持数据库(database)新建、删除。
    • 支持文档(document)新增、删除、更新。
    • 支持集合(collection)新建、删除。
    • 支持索引(index)新建、删除。
    • 支持视图(view)新建,删除。
    • 支持convertToCapped、collMod、renameCollection命令。
  • 源库是集群实例时:
    • 不支持集群版本小于4.0。
    • 增量阶段不允许对同步对象做删除操作,否则会导致任务失败。
    • 会消耗源数据库一定量的CPU,内存资源,请提前做好源数据库资源评估。
    • 受MongoDB Change Streams自身性能影响,如果源库的负载比较大,Change Streams会出现处理速度无法跟上Oplog产生速度,进而导致DRS同步出现时延。
    • 目前仅支持drop database,drop collection,rename的DDL,其他DDL均不支持。
    • 增量阶段单表最多支持10000条/秒左右的同步速度。
  • 启动时,指定的启动位点必须在Oplog的范围内。
  • 目标数据库的同步账号必须是有写权限。对于目标数据库是集群的实例,同步账号还要有对config数据的读权限。
  • 对于在源数据库已经存在TTL索引的集合,或者在增量同步期间在源库数据创建了TTL索引的集合,由于源数据库和目标库数据库时区,时钟的不一致,不能保证同步完成之后数据的一致性。
  • 压缩参数block_compressor的取值,根据源库对应集合的stats().wiredTiger.creationString.block_compressor来决定,如果目标库已经存在对应的空集合,则不迁移压缩参数;特殊的,对于不支持的压缩参数,按照目标库实例的net.compression.compressors参数决定。当目标库的存储引擎不是wiredTiger时,DRS不同步压缩参数。
  • 出云同步的目标数据库如果是副本集,则建议目标数据库填写所有的主节点和备节点信息,以防主备切换影响同步任务。如果是填写主备节点,注意填写的节点信息必须属于同一个副本集实例。
  • 出云同步的目标数据库如果是集群,则建议填写多个mongos信息,以防单个mongos节点故障影响同步任务,并且多个mongos信息还可以实现负载均衡。如果填写多个mongos信息,注意所有所填的信息必须属于同一个集群实例。
  • 同步过程中,不允许修改、删除连接源和目标数据库的用户的用户名、密码、权限,或修改源和目标数据库的端口号。
  • 在整个同步过程中,为了保持数据一致性,不允许对正在同步中的目标数据库进行修改操作(包括但不限于DDL、DML操作)。
  • 在整个同步过程中,不支持源数据库主备切换导致数据回滚的情况。
  • 不支持系统库的同步,用户名和角色需要在目标库手动创建。
  • 不支持增量同步阶段insert、update源库大于16MB的文档。
  • 任务增量阶段,为保证同步的性能,会集合级的进行并发回放。特殊地,以下情况只支持单线程写入,不支持并发回放:
    • 集合的索引中有unique key时;
    • 集合属性的capped为true时;

    这种情况可能会导致任务时延增高。

  • 为了防止回环,不支持同时启动入云迁移和出云同步任务。
  • 行对比时,集群实例如果存在孤儿文档或者正在进行chunk同步,会导致返回的行数不准确,对比结果不一致。详细情况可参考MongoDB官方文档
support.huaweicloud.com/realtimesyn-drs/drs_04_0464.html