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

时间:2023-11-01 16:19:02

使用须知

DRS全量+增量迁移过程一般包含四个阶段:任务启动阶段、全量阶段、增量阶段、结束任务阶段(单全量任务则包含三个阶段)。为了确保迁移各个阶段的平顺,在创建迁移任务前,请务必阅读以下使用须知。

表4 使用须知

类型名称

使用和操作限制

任务启动前须知

  • 源数据库参数要求:
    • 增量迁移时,源数据库的Oplog日志必须打开。
    • 在磁盘空间允许的情况下,建议源数据库Oplog保存时间越长越好,建议为3天。
    • 如果迁移任务是源数据集群的增量,则源数据必须关闭Balancer。
  • 源数据库对象要求:
    • 源数据库不能是 GaussDB (for Mongo)实例。
    • 源数据库的库名不能包含/\."$和空格,集合名和视图名中不能包含$字符或以system.开头。
    • 多个源数据库迁移到同一个目标数据库时,所选的待迁移数据库的库名不能重复。
  • 目标数据库参数要求:
    • 目标数据库实例的运行状态必须正常。
    • 目标数据库实例必须有足够的磁盘空间。
    • 目标数据库实例版本要高于或等于源数据库版本。
    • 集群到集群的全量迁移,如果源数据库的集群没有开启分片,则需要保证目标数据库主shard节点的磁盘空间大于源数据库数据大小。
  • 其他使用须知:
    • 相互关联的数据对象要确保同时迁移,避免迁移因关联对象缺失,导致迁移失败。常见的关联关系:视图引用集合、视图引用视图等。
    • 副本集:MongoDB数据库的副本集实例状态必须正常,要存在主节点。
    • 单节点:目前不支持源数据库为非本云单节点实例的迁移。
    • 单节点类型实例的增量迁移目前仅支持源库为文档数据库单节点实例。
    • 源数据库为非集群实例时,增量迁移阶段支持如下操作

      支持数据库(database)新建、删除。

      支持文档(document)新增、删除、更新。

      支持集合(collection)新建、删除。

      支持索引(index)新建、删除。

      支持视图(view)新建,删除。

      支持convertToCapped、collMod、renameCollection命令。

    • 源库是集群实例时,集群到集群的全量+增量迁移,全量阶段和增量阶段,不允许对迁移对象做删除操作,否则会导致任务失败。
    • 源库实例类型选择集群的Change Streams(MongoDB 4.0+)模式时,DRS内部迁移使用MongoDB特性Change Streams。使用该模式应注意以下几个方面:

      Change Streams订阅数据过程会消耗源数据库一定量的CPU,内存资源,请提前做好源数据库资源评估。

      受MongoDB Change Streams自身性能影响,如果源库的负载比较大,Change Streams会出现处理速度无法跟上Oplog产生速度,进而导致DRS同步出现时延。

      Change Streams目前仅支持drop database,drop collection,rename的DDL,其他DDL均不支持。

      不支持DBPointer和DBRef数据类型。

      增量阶段单表最多支持10000条/秒左右的迁移速度。

      Change Streams模式目前仅支持白名单用户使用。

    • 源库实例类型选择集群的Oplog模式时,DRS会根据“源端分片个数”创建多个子任务。如果选择任务限速,设置的限流值会同步给每个子任务。
    • 对于在源数据库已经存在TTL索引的集合,或者在增量迁移期间在源库数据创建了TTL索引的集合,由于源数据库和目标库数据库时区,时钟的不一致,不能保证迁移完成之后数据的一致性。
    • 压缩参数block_compressor的取值,根据源库对应集合的stats().wiredTiger.creationString.block_compressor来决定,如果目标库已经存在对应的空集合,则不迁移压缩参数;特殊的,对于不支持的压缩参数,按照目标库实例的net.compression.compressors参数决定。当目标库为DDS 4.2版本时,由于目标库不支持压缩参数的设置,DRS不迁移压缩参数。
    • 对于用户和角色的迁移,DRS冲突策略为忽略,即迁移的用户和角色与目标数据库冲突时,将跳过冲突数据,继续进行后续迁移。
    • 如果源数据库的MongoDB服务不是单独部署的,而是和其他的服务部署在同一台机器,则必须要给源数据库的wiredTiger引擎加上cacheSizeGB的参数配置,建议值设为最小空闲内存的一半。
    • 如果源数据库是副本集,则建议填写所有的主节点和备节点信息,以防主备切换影响迁移任务。如果填写的是主备多个节点的信息,注意所有的节点信息必须属于同一个副本集实例。
    • 如果源数据库是集群,则建议填写多个mongos信息,以防单个mongos节点故障影响迁移任务。如果填写的是多个mongos信息,注意所有的mongos信息必须属于同一个集群。如果是集群的增量迁移任务,建议shard信息填写所有的主节点和备节点,以防主备切换影响迁移任务,并且注意所填写的主备信息必须属于同一个shard。确保填写的所有shard节点信息必须隶属于同一个集群。
    • 创建迁移任务时目标数据库可以设置“只读”或“读写”(根据DDS的内核版本决定的,如果DDS的内核版本不支持设置,DRS不支持该选项),任务创建成功后不能修改。

      只读:目标数据库实例将转化为只读、不可写入的状态,迁移任务结束后恢复可读写状态,此选项可有效的确保数据迁移的完整性和成功率,推荐此选项。

      读写:目标数据库可以读写,但需要避免操作或接入应用后会更改迁移中的数据(注意:无业务的程序常常也有微量的数据操作),进而形成数据冲突、任务故障、且无法修复续传,充分了解要点后可选择此选项。

      用户在使用时需注意,迁移任务和灾备任务的只读设置是互不干涉的,为避免互相影响,迁移任务的目标库被设置为只读后,不能再作为灾备任务的业务数据库或者灾备数据库。灾备任务的业务数据库或者灾备数据库,也不能作为迁移任务的只读目标库。

    • 非全部迁移场景下,为防止drop database操作删除目标库已有的集合,drop database不会同步到目标库。

      源库是MongoDB 3.6以下版本(不含3.6)时,执行drop database会导致源库删除集合但目标库没有删除。

      源库是MongoDB 3.6及以上版本(含3.6)时,drop database 操作在oplog中会体现为drop database 和drop collection操作,所以目标库也会删除相应集合,不会出现问题。

    • 为了提高迁移的速度,在开始迁移之前,建议在源数据库删掉不需要的索引,只保留必须的索引。在迁移过程中不建议对源库创建索引,如果必须要创建索引,请使用后台的方式创建索引。
    • 为了防止回环,不支持在相同的源和目标库同时启动入云和出云任务。

全量迁移阶段须知

  • 任务启动和全量数据迁移阶段,请不要在源数据库执行DDL操作,否则可能导致任务异常。
  • 迁移过程中,不允许修改、删除连接源和目标数据库的用户的用户名、密码、权限,或修改源和目标数据库的端口号。
  • 迁移过程中,不允许对正在迁移中的目标数据库进行修改操作(包括但不限于DDL、DML操作)。
  • 迁移过程中,不支持源数据库主备切换导致数据回滚的情况。
  • 迁移过程中,不支持insert、update源库大于16MB的文档。

增量迁移阶段须知

  • 迁移过程中,不允许修改、删除连接源和目标数据库的用户的用户名、密码、权限,或修改源和目标数据库的端口号。
  • 迁移过程中,不允许对正在迁移中的目标数据库进行修改操作(包括但不限于DDL、DML操作)。
  • 迁移过程中,不支持源数据库主备切换导致数据回滚的情况。
  • 迁移过程中,不支持insert、update源库大于16MB的文档。
  • 选择集合迁移时,增量迁移过程中不建议对集合进行重命名操作。
  • 为保证迁移的性能,任务增量阶段,会集合级的进行并发回放。特殊地,以下情况只支持单线程写入,不支持并发回放:
    • 集合的索引中有unique key时;
    • 集合属性的capped为true时;

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

对比使用须知

  • 建议在源库的业务低峰期进行数据比对,防止误报不一致数据,以及减少对源库和DRS任务的冲击。
  • 在增量同步过程中做对比时,源库若存在写入,则对比结果可能不一致。
  • 行对比时,集群实例如果存在孤儿文档或者正在进行chunk迁移,会导致返回的行数不准确,对比结果不一致。详细情况可参考MongoDB官方文档

常见故障排查

  • 在任务创建、启动、全量同步、增量同步、结束等过程中,如有遇到问题,可先参考“故障排查”章节进行排查。
support.huaweicloud.com/realtimemig-drs/drs_04_0095.html