2.2 入云迁移使用须知
2.2.5 MongoDB->DDS
使用技巧(需要人为配合)
▪
DRS并发读取数据库,会占用大约6-10个session连接数,需要考虑该连 接数对业务的影响。操作要求
针对一些无法预知或人为因素及环境突变导致迁移失败的情况,数据复制服务提供以 下常见的操作限制,供您在迁移过程中参考。
表2-9 操作要求
● 副本集:MongoDB数据库的副本集实例状态必须正常,要存在 主节点。
● 单节点:目前不支持源数据库为非本云单节点实例的迁移。
● 源数据库为非集群实例时,增量迁移阶段支持如下操作:
– 支持数据库(database)新建、删除。
– 支持文档(document)新增、删除、更新。
– 支持集合(collection)新建、删除。
– 支持索引(index)新建、删除。
– 支持视图(view)新建,删除。
– 支持convertToCapped、collMod、renameCollection命令。
● 源库是集群实例时,集群到集群的全量+增量迁移,全量阶段和 增量阶段,不允许对迁移对象做删除操作,否则会导致任务失 败。
● 源库实例类型选择集群(MongoDB 4.0+)模式时,表示源数据 库为集群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均不支持。
● 对于在源数据库已经存在TTL索引的集合,或者在增量迁移期间 在源库数据创建了TTL索引的集合,由于源数据库和目标库数据 库时区,时钟的不一致,不能保证迁移完成之后数据的一致性。
● 如果源数据库的MongoDB服务不是单独部署的,而是和其他的 服务部署在同一台机器,则必须要给源数据库的wiredTiger引擎 加上cacheSizeGB的参数配置,建议值设为最小空闲内存的一 半。
● 专属计算集群暂不支持DDS实例,无法创建迁移任务。
● 选择集合迁移时,增量迁移过程中不建议对集合进行重命名操 作。
● 如果源数据库是副本集,则建议填写所有的主节点和备节点信
类型名称 操作限制(需要人为配合)
● 如果源数据库是集群,则建议填写多个mongos信息,以防单个 mongos节点故障影响迁移任务。如果填写的是多个mongos信 息,注意所有的mongos信息必须属于同一个集群。如果是集群 的增量迁移任务,建议shard信息填写所有的主节点和备节点,以 防主备切换影响迁移任务,并且注意所填写的主备信息必须属于 同一个shard。确保填写的所有shard节点信息必须隶属于同一个 集群。
● 非全部迁移场景下,为防止drop database操作删除目标库已有 的集合,drop database不会同步到目标库。
– 源库是MongoDB 3.6以下版本(不含3.6)时,执行drop database会导致源库删除集合但目标库没有删除。
– 源库是MongoDB 3.6及以上版本(含3.6)时,drop database 操作在oplog中会体现为drop database 和drop collection操 作,所以目标库也会删除相应集合,不会出现问题。
操作须知 ● 为了保持数据一致性,在整个迁移过程中,不允许对正在迁移中 的目标数据库进行修改操作(包括但不限于DDL、DML操作),也 不支持对源数据库进行DDL操作。
● 迁移过程中,不允许修改、删除连接源和目标数据库的用户的用 户名、密码、权限,或修改源和目标数据库的端口号。
● 在任务启动、任务全量迁移阶段,不建议对源数据库做删除类型 的DDL操作,比如删除数据库、集合、索引、文档、视图等,这 样可能会引起任务迁移失败。
● 在整个迁移过程中,不支持源数据库主备切换导致数据回滚的情 况。
● 选择集合迁移时,增量迁移过程中不建议对集合进行重命名操 作。
● 不支持全量迁移和增量迁移阶段insert、update源库大于16MB的 文档。
表2-10 环境要求 readAnyDatabase权限。
– 集群:连接源数据库的用户需要对admin数据库有 readAnyDatabase权限,对config数据库有read权限。
– 单节点:连接源数据库的用户需要对admin数据库有 readAnyDatabase权限。
– 如果需要迁移源数据库用户和角色信息,连接源数据库的用户 需要对admin数据库的系统表system.users,system.roles有读 权限。
● 全量+增量迁移权限要求:
– 副本集:连接源数据库的用户需要对admin数据库有 readAnyDatabase权限,对local数据库有read权限。
– 单节点:连接源数据库的用户需要对admin数据库有 readAnyDatabase权限,对local数据库有read权限。
– 集群:连接源数据库mongos节点的用户需要对admin数据库 有readAnyDatabase权限,对config数据库有read权限, 连接 源数据库分片节点的用户需要对admin数据库有
readAnyDatabase权限,对local数据库有read权限。
– 如果需要迁移源数据库用户和角色信息,连接源数据库的用户 需要对admin数据库的系统表system.users,system.roles有读 权限。
目标数据库最小权限要求:连接目标数据库的用户需要对admin数 据库有readAnyDatabase权限,对目标数据库有readWrite权限。
迁移对象约
(如local、admin、config等)和系统集合,如果业务数据在系 统库下,则需要先将业务数据移动到用户数据库下,可以使用 renameCollection命令进行移出。
● 不支持_id字段没有索引的集合。
● 不支持BinData()的第一个参数为2。
● 不支持范围分片的情况下maxKey当主键。
类型名称 使用限制(DRS自动检查)
源数据库要
求 ● 不支持源数据库的库名、集合名或视图名中包含如下字符:
'<>.。
● 如果迁移任务是源数据集群的增量,则源数据必须关闭 Balancer。
● 源数据库不能是GaussDB(for Mongo)实例。
目标数据库 需要保证目标数据库主shard节点的磁盘空间大于源数据库数据大 小。
● 目前不支持从高版本数据库到低版本数据库的迁移。