安装包下载地址:Releases · alibaba/MongoShake (github.com)
#建议新建mongoshake文件夹,在文件夹内,每个需要迁移的app都建立单独的文件夹
# 下载安装包至指定mongoshake文件夹下需要进行迁移的app的文件夹内
wget https://github.com/alibaba/MongoShake/releases/download/release-v2.6.5-20210630/mongo-shake-v2.6.5.tar.gz
#解压缩
tar -zxvf mongo-shake-v2.6.5.tar.gz
```
mongoshake多种功能的实现依赖于对配置项的修改,通过配置不同的参数实现多种功能。
对于MongoDB到MongoDB的同步需求,用户只需要修改collector.conf
的配置文件。
cd mongo-shake-v2.6.5
vim collector.conf
sync_mode。同步的模式,有3种模式:all表示全量+增量同步,全量同步完毕以后进入增量同步;full表示仅进行全量同步,全量同步后进程将会退出;incr表示仅进行增量同步(默认),从给定的checkpoint(见下述)开始拉取增量数据。默认incr。
mongo_urls。源MongoDB连接串的地址,其格式与mongo_shell使用的连接串格式保持一致。逗号分隔同一个副本集内的结点,分号分隔分片sharding实例,免密模式可以忽略“username:password@”,注意,密码里面不能含有’@'符号。
举例:
副本集的连接串格式(A是主节点,B和C是2个从节点):mongodb://username1:password1@primaryA,secondaryB,secondaryC
。
分片集的连接串格式(shard1的结点是A,B,C;shard2是X,Y,Z):mongodb://username1:password1@primaryA,secondaryB,secondaryC;mongodb://username2:password2@primaryX,secondaryY,secondaryZ
。
注意:如果mongo_connect_mode不是为standalone的话,每个副本集(分片)都需要配置primary+secondary的连接串,不能只配置一个secondary节点,但可以只配置primary的。
mongo_cs_url。源MongoDB的config server的地址,如果源端是sharding,需要填写这个配置。默认空。
mongo_s_url。源MongoDB的mongos地址,如果源端是sharding,需要填写这个配置。默认空。
mongo_connect_mode。数据是从源MongoDB的哪个节点进行拉取的,primary表示从主节点拉取;secondaryPreferred(默认)表示优先从secondary拉取,没有的话将会从primary拉取;standalone表示从给定的单个节点拉取。需要注意的是,如果源端是sharding,且版本小于3.6,而且是全量同步(sync_mode=full),或者全量+增量同步(sync_mode=incr),建议这里配置primary
tunnel。通道类型,direct表示目的端对接的是MongoDB,rpc,file,kafka用于远程传输,mock仅用于调试。默认direct,对于Mongodb之间的数据同步,tunnel=direct。
tunnel.address。通道地址,不同类型的通道需要配置不同的地址。对于***tunnel = direct***,此处配置目的端MongoDB的地址,地址的格式同mongo_urls的格式要求。
mongo_connect_mode。MongoDB实例的连接模式,仅限tunnel参数为direct
时有效。取值:primary:从primary节点中拉取数。secondaryPreferred:从secondary节点中拉取数据。建议取默认值"secondaryPreferred"。
filter.namespace.black 指定数据同步的黑名单,这些指定的命名空间不会被同步至目标数据库,多个命名空间用英文分号(;)分隔。格式:filter.namespace.black = mongodbtest.customer;testdata.test123
filter.namespace.white 指定数据同步的白名单,只有这些指定的命名空间会被同步至目标数据库,多个命名空间用英文分号(;)分隔。格式:filter.namespace.white = mongodbtest.customer;test123
其余参数可使用默认配置
# 执行下述命令启动同步任务,并打印日志信息
./collector.linux -conf=collector.conf -verbose 2
# 在sync_mode = all,即全量+增量同步模式下,观察打印的日志信息,当出现如下日志时,即代表全量数据同步已完成,并进入增量数据同步模式。
[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]
A: 不会同步。如果用户一定要把admin的库同步到别的,那么可以通过命名转换功能(配置transform.namespace)把admin库同步到别的数据库,同时配置filter.pass.special.db参数:
A: 不会,会持续报错,用户需要关注日志的运行情况。
A: 可以,需要启动多个mongoshake。对于不同的mongoshake,可以修改写入不同地方的checkpoint即可(比如表名修改一下),或者直接修改不同的collector.id。此外,需要注意的是,同一个目录下启动多个mongoshake,如果collector.id相同,是无法启动成功的。
A: 显示全量同步,全量同步完毕会写入checkpoint,然后进行增量同步,增量同步阶段会不断更新checkpoint。对于mongoshake来说,是否进行全量同步取决于checkpoint,如果checkpoint存在且合法,那么只会进入增量同步;否则,会先进行全量同步,然后是增量。那么checkpoint怎么知道是存在的,就是context里面的参数的位置决定;那么怎么知道checkpoint是合法的?如果最老的oplog的时间位点小于checkpoint,那么就是合法的,证明增量能接上。
Mongoshake同步过程的报错信息可参考以下网站解决:
如果这篇文章对您的学习工作产生了帮助,请您点一个免费的赞,您的鼓励是我继续创作的动力!