mongoShake是阿里云自研开源工具,该功能可用于数据分析、灾备和多活等业务场景。
MongoShake是阿里云以Golang语言编写的通用平台型服务工具,它通过读取MongoDB的Oplog操作日志来复制MongoDB的数据以实现特定需求。
MongoShake还提供了日志数据的订阅和消费功能,可通过SDK、Kafka、MetaQ等方式的灵活对接,适用于日志订阅、数据中心同步、Cache异步淘汰等场景。
如需了解更多MongoShake相关信息,请参见:https://github.com/alibaba/MongoShake?spm=a2c4g.11186623.0.0.5f002c26LcPvCh
适用的数据源:
1、ECS上的自建MongoDB数据库;
2、本地自建的MongoDB数据库;
3、阿里云MongoDB实例;
4、第三方云MongoDB数据库;
以获取最低的网络延迟,当前mongo实例所在服务器最好与将迁移的服务器内网能互通;
1、在迁移服务器上下载mongoShake程序并重命名为mongoshake.tar.gz
wget "http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/196977/jp_ja/1608863913991/mongo-shake-v2.4.16.tar.gz" -O mongoshake.tar.gz
2、执行如下命令在将MongoShake解压到/root/mongoshake目录中,个人可以按安装位置自行选择。
tar zxvf mongoshake.tar.gz && mv mongo-shake-v2.4.16 /root/mongoshake && cd /root/mongoshake
3、进到mongoshake目录下,执行vi collector.conf
命令,修改MongoShake的配置文件collector.conf,主要参数有:
参数 | 说明 | 示例值 |
---|---|---|
mongo_urls | 源端MongoDB实例的ConnectionStringURI格式连接地址。说明
| mongo_urls = mongodb://root:Ftxxxxxx@dds-bpxxxxxxxx.mongodb.rds.aliyuncs.com:3717,dds-bpxxxxxxxx.mongodb.rds.aliyuncs.com:3717 说明 密码中不得包含艾特(@)字符,否则会导致连接失败。 |
tunnel.address | 目标端MongoDB实例的ConnectionStringURI格式连接地址。说明
| tunnel.address = mongodb://root:Ftxxxxxx@dds-bpxxxxxxxx.mongodb.rds.aliyuncs.com:3717,dds-bpxxxxxxxx.mongodb.rds.aliyuncs.com:3717 说明 密码中不得包含艾特(@)字符,否则会导致连接失败。 |
sync_mode | 数据同步的方式,取值:
说明 默认值为incr。 | sync_mode = all |
4、执行命令启动同步任务,并打印日志信息
./collector.linux -conf=collector.conf -verbose
5、观察打印的日志信息,当出现如下日志时,即代表全量数据同步已完成,并进入增量数据同步模式
[09:38:57 CST 2019/06/20] [INFO] (mongoshake/collector.(*ReplicationCoordinator).Run:80) finish full sync, start incr sync with timestamp: fullBeginTs[1560994443], fullFinishTs[1560994737]
6、注意一点,在开启同步命令执行后,命令无法后台运行,使用Ctrl+c会杀死同步进程;
开启同步后,在主库会生成mongoShake数据库,报错同步optlog同步位置标识;删除后同步会重新全量同步