云服务器内容精选

  • 支持的迁移对象范围 在使用DRS进行迁移时,不同类型的迁移任务,支持的迁移对象范围不同,详细情况可参考表2。DRS会根据用户选择,在“预检查”阶段对迁移对象进行自动检查。 表2 支持的迁移对象 类型名称 使用须知 迁移对象范围 支持选择表级、库级或实例级(全部迁移)。 副本集:目前只支持集合(包括验证器,是否是固定集合),索引和视图的迁移。 集群:目前只支持集合(包括验证器,是否是固定集合),分片键,索引和视图的迁移。 单节点:目前只支持集合(包括验证器,是否是固定集合),索引和视图的迁移。 不支持迁移系统库(如local、admin、config等)的迁移,用户名和角色需要在目标库手动创建。 不支持视图的创建语句中有正则表达式。 不支持_id字段没有索引的集合。 不支持BinData()的第一个参数为2。 不支持源库集合的String类型字段中存储非UTF-8类型字符串,否则会导致迁移前后数据不一致。
  • 数据库账号权限要求 在使用DRS进行迁移时,连接源库和目标库的数据库账号需要满足以下权限要求,才能启动实时迁移任务。不同类型的迁移任务,需要的账号权限也不同,详细可参考表3进行赋权。DRS会在“预检查”阶段对数据库账号权限进行自动检查,并给出处理建议。 表3 数据库账号权限 类型名称 全量迁移 全量+增量迁移 源数据库连接账号 副本集:连接源数据库的用户需要有admin库的readAnyDatabase权限。 单节点:连接源数据库的用户需要有admin库的readAnyDatabase权限。 集群:连接源数据库的用户需要有admin库的readAnyDatabase权限,有config库的read权限。 副本集:连接源数据库的用户需要有admin库的readAnyDatabase权限,有local库的read权限。 单节点:连接源数据库的用户需要有admin库的readAnyDatabase权限,有local库的read权限。 目标数据库连接账号 连接目标数据库的用户需要有admin库的dbAdminAnyDatabase权限,有目标数据库的readWrite权限。 对于目标数据库是集群的实例,迁移账号还要有admin库的clusterManager权限。 建议创建单独用于DRS任务连接的数据库账号,避免因为数据库账号密码修改,导致的任务连接失败。 连接源和目标数据库的账号密码修改后,请尽快修改DRS任务中的连接信息,避免任务连接失败后自动重试,导致数据库账号被锁定影响使用。 用户赋权参考语句:连接源数据库的用户需要有admin库的readAnyDatabase权限和config库的read权限。 db.grantRolesToUser("用户名",[{role:"readAnyDatabase",db:"admin"}, {role:"read",db:"config"}])
  • 支持的源和目标数据库 表1 支持的数据库 源数据库 目标数据库 DDS实例(3.2、3.4、4.0、4.2、4.4版本) 本地自建Mongo数据库(3.2、3.6、3.4、4.0、4.2、4.4版本) E CS 自建Mongo数据库(3.2、3.6、3.4、4.0、4.2、4.4版本) 其他云上Mongo数据库(3.2、3.6、3.4、4.0、4.2、4.4版本) 说明: 仅支持目标库版本等于或高于源库版本。
  • 使用须知 为保证任务的正常运行,DRS提供了自动化的检查方法,在您启动DRS任务前,会针对源数据库和目标数据库的相关配置、条件进行检查。主要的检查项和对应的处理建议请参考DRS预检查项一览表。除了预检查项目之外,您还需要注意的事情如表4所示 表4 注意事项 类型名称 使用和操作限制 源数据库限制 源数据库的库名不能包含/\."$和空格,集合名和视图名中不能包含$字符或以system.开头。 多个源数据库迁移到同一个目标数据库时,所选的待迁移数据库的库名不能重复。 使用限制 通用: 整个迁移过程中,不允许修改、删除连接源和目标数据库的用户的用户名、密码、权限,或修改源和目标数据库的端口号。 整个迁移过程中,不允许对正在迁移中的目标数据库进行修改操作(包括但不限于DDL、DML操作)。 整个迁移过程中,不支持源数据库主备切换导致数据回滚的情况。 整个迁移过程中,不支持insert、update源库大于16MB的文档。 整个迁移过程中,源数据库不允许手动执行sh.moveChunk()操作,否则将导致迁移数据不一致。 全量迁移阶段: 任务启动和全量数据迁移阶段,请不要在源数据库执行DDL操作,否则可能导致任务异常。 增量迁移阶段: 选择集合迁移时,增量迁移过程中不建议对集合进行重命名操作。 为保证迁移的性能,任务增量阶段,会集合级的进行并发回放。特殊地,以下情况只支持单线程写入,不支持并发回放: 集合的索引中有unique key时; 集合属性的capped为true时; 这种情况可能会导致任务时延增高。 数据对比: 建议在源库的业务低峰期进行数据比对,防止误报不一致数据,以及减少对源库和DRS任务的冲击。 在增量同步过程中做对比时,源库若存在写入,则对比结果可能不一致。 行对比时,集群实例如果存在孤儿文档或者正在进行chunk迁移,会导致返回的行数不准确,对比结果不一致。详细情况可参考MongoDB官方文档。 其他限制 对于在源数据库已经存在TTL索引的集合,或者在增量迁移期间在源库数据创建了TTL索引的集合,由于源数据库和目标库数据库时区,时钟的不一致,不能保证迁移完成之后数据的一致性。 压缩参数block_compressor的取值,根据源库对应集合的stats().wiredTiger.creationString.block_compressor来决定,如果目标库已经存在对应的空集合,则不迁移压缩参数;特殊的,对于不支持的压缩参数,按照目标库实例的net.compression.compressors参数决定。当目标库为DDS 4.2版本时,由于目标库不支持压缩参数的设置,DRS不迁移压缩参数。 出云迁移的目标数据库如果是副本集,则建议目标数据库填写所有的主节点和备节点信息,以防主备切换影响迁移任务。如果是填写主备节点,注意填写的节点信息必须属于同一个副本集实例。 出云迁移的目标数据库如果是集群,则建议填写多个mongos信息,以防单个mongos节点故障影响迁移任务,并且多个mongos信息还可以实现负载均衡。如果填写多个mongos信息,注意所有所填的信息必须属于同一个集群实例。 为了提高迁移的速度,在开始迁移之前,建议在源数据库删掉不需要的索引,只保留必须的索引。在迁移过程中不建议对源库创建索引,如果必须要创建索引,请使用后台的方式创建索引。 为了防止回环,不支持在相同的源和目标库同时启动入云和出云任务。
  • 使用建议 DRS任务启动和全量数据同步阶段,请不要在源数据库执行DDL操作,否则可能导致任务异常。 为保证同步前后数据一致性,确保同步期间目标数据库无业务写入。 数据库同步与环境多样性和人为操作均有密切关系,为了确保同步的平顺,建议您在进行正式的数据库同步之前进行一次演练,可以帮助您提前发现问题并解决问题。 基于以下原因,建议您在启动任务时选择“稍后启动”功能,将启动时间设置在业务低峰期,相对静止的数据可以有效提升一次性同步成功率,避免同步对业务造成性能影响。 在网络无瓶颈的情况下,全量同步会对源数据库增加约50MB/s的查询压力,以及占用2~4个CPU。 正在同步的数据被其他事务长时间锁死,可能导致读数据超时。 由于MySQL固有特点限制,CPU资源紧张时,存储引擎为Tokudb的表,读取速度可能下降至10%。 DRS并发读取数据库,会占用大约6-10个session连接数,需要考虑该连接数对业务的影响。 全量阶段读取表数据时,特别是大表的读取,可能会阻塞业务上对大表的独占锁操作。 更多DRS对数据库的影响,可参考DRS对源数据库和目标数据库有什么影响。 数据对比 建议您结合数据对比的“稍后启动”功能,选择业务低峰期进行数据对比,以便得到更为具有参考性的对比结果。由于同步具有轻微的时差,在数据持续操作过程中进行对比任务,可能会出现少量数据不一致对比结果,从而失去参考意义。