• 沒有找到結果。

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节点的磁盘空间大于源数据库数据大 小。

● 目前不支持从高版本数据库到低版本数据库的迁移。