使用DTS专线从自建MongoDB分片集迁移到百度智能云DocDB for MongoDB 分片集
更新时间:2022-12-01
概览
本文主要介绍自建 MongoDB 分片集实例和云数据库 DocDB for MongoDB 分片集实例之间的迁移。
需求场景
适用于使用百度智能云数据传输服务DTS(以下简称DTS),将自建 MongoDB 分片集实例的数据,通过专线迁移到云数据库 DocDB for MongoDB 分片集实例或者自建 MongoDB 分片集实例中。
方案概述
迁移前置条件
已创建作为迁移源端的 MongoDB 分片集实例,版本为3.4、3.6、4.0或4.2。
已创建作为迁移目标端的 MongoDB 分片集实例,版本为3.4、3.6、4.0或4.2。
MongoDB迁移要求
权限要求:
- 对于源端和目标端的数据库实例,用户需要提供满足具有root角色的账号来进行数据迁移。
- 源端所有的 mongos 和 shard 的账号密码必须保持一致。
粒度要求:
现 MongoDB 到 MongoDB 的迁移仅支持以实例级别为粒度进行迁移。
前置工作
-
关闭源端 MongoDB 分片集的 Balancer,以防出现数据不一致的现象。
1.1. 登录源端实例的 mongos 节点,切换到 config 数据库
`use config`
1.2. 查看 Balancer 是否在执行
`sh.isBalancerRunning()` 如果执行命令返回 true ,表示正在执行,需要等待 Balancer 执行完毕,再进行下一步
1.3. 关闭 Balancer
`sh.stopBalancer()`
-
清理源端实例存在的孤儿文档。
2.1. 复制以下代码到本地文件,并将文件命名为 cleanupOrphaned.js
``` function cleanupOrphaned(coll) { var nextKey = { }; var result; while ( nextKey != null ) { result = db.adminCommand( { cleanupOrphaned: coll, startingFromKey: nextKey } ); if (result.ok != 1) print("Unable to complete at this time: failure or timeout.") printjson(result); nextKey = result.stoppedAtKey; } } var dbName = 'test' db = db.getSiblingDB(dbName) db.getCollectionNames().forEach(function(collName) { cleanupOrphaned(dbName + "." + collName); }); ```
2.2. 修改 cleanupOrphaned.js 脚本文件,将数据库名称 test 替换为需要清理孤立文档的数据库名称。 2.3. 执行以下命令,依次清理每个 shard 节点存在的孤儿文档。
`mongo --host <Shardhost> --port <Primaryport> --authenticationDatabase <database> -u <username> -p <password> cleanupOrphaned.js` * Shardhost:Shard 节点的 IP 地址 * Primaryport:Shard 节点中的 Primary 节点的服务端口 * database:鉴权数据库名,即数据库账号所属的数据库 * username:登录数据库的账号 * password:登录数据库的密码
操作步骤
创建迁移任务
- 进入DTS产品页面,点击【创建数据传输任务】按钮。
2. 进入实例信息配置界面,进行源端目标端基本信息配置:
- 源端位置:选择自建数据存储
- 源端接入类型:选择专线迁移
- 分片数量:填写源端实例的 shard 数量
- 点击【下一步】进行订单信息确认,确认无误点击【确认订单】。
配置任务
- 新创建的任务可在任务列表查看,状态为 未配置,点击右侧的【配置任务】对任务进行配置。
- 进入任务配置界面,进行源端目标端连接信息配置:
- 源端"专线接入所在网络":选择专线打通的 VPC;
- "Mongos" :填写搭建 redir 所用的 BCC 的内网的 Mongos url,目前只支持填写一个;
- "Shard" :填写搭建 redir 所用的 BCC 的内网的 Shard url,多个 url 之间用「逗号」隔开,且 url 总数必须与创建任务时填写的分片数量保持一致;
- "账号""密码":填写源端 Mongos 和 Shard 节点共用的账号与密码;
- 若配置目标端为百度智能云数据库 DocDB for MongoDB 分片集实例,选择要迁入的云数据库实例,填写账号密码即可。
- 点击【授权白名单进入下一步】,进入迁移类型选择界面:
MongoDB 分片集支持结构、全量、增量迁移,您可以根据需求进行选择。配置完成之后可点击【保存】进行配置保存或者点击【保存并预检查】直接进行任务的配置和预检查。
预检查和启动任务
- 只保存任务配置后,可在任务列表看到已配置的任务,状态为 未启动。
点击左侧小箭头可展开或者收起子任务信息列表,如果配置了结构迁移,则只有一个子任务包含结构迁移。
- 选中任务,点击任务上方的【预检查】或者直接点击任务列表后端的【预检查】,进行预检查步骤。检查结果可在【状态】栏查看,如果预检查失败,可通过 "蓝色小眼睛"查看具体报错信息。主任务聚合了所有子任务的预检查信息,子任务包含各自的预检查信息。
- 根据信息提示,重新配置任务并进行预检查。预检查成功后,可启动任务。
- 如果配置了结构迁移,则包含结构迁移的子任务先启动,待结构迁移完成后,其他子任务会依次启动。
相关产品
云数据库 DocDB for MongoDB:兼容 MongoDB 协议的文档数据库服务