之前360出的那个mongodb数据同步工具比较老,对于3.X版本的mongodb支持不太好。
阿里巴巴出了个 MongoShake , 目前可以支持到MongoDB4.X(我测试从mongodb3.2.16同步数据到mongodb4.0.4没问题)
官方地址: https://github.com/alibaba/MongoShake
中文介绍地址: https://yq.aliyun.com/articles/603329
具体的介绍,可以参考上面第二个链接。 实际原理类似于 我们在mysql环境下常用的canal (MongoShake 通过订阅oplog, 然后给下游消费或者直接发送给下游mongodb实例)
1. MongoDB集群间数据的异步复制,免去业务双写开销。
2. MongoDB集群间数据的镜像备份(当前1.0开源版本支持受限)
3. 日志离线分析
4. 日志订阅
5. 数据路由。根据业务需求,结合日志订阅和过滤机制,可以获取关注的数据,达到数据路由的功能。
6. Cache同步。日志分析的结果,知道哪些Cache可以被淘汰,哪些Cache可以进行预加载,反向推动Cache的更新。
7. 基于日志的集群监控
MongoShake从源库抓取oplog数据,然后发送到各个不同的tunnel通道。源库支持:ReplicaSet,Sharding,Mongod,目的库支持:Mongos,Mongod。现有通道类型有:
1. Direct:直接写入目的MongoDB
2. RPC:通过net/rpc方式连接
3. TCP:通过tcp方式连接
4. File:通过文件方式对接
5. Kafka:通过Kafka方式对接
6. Mock:用于测试,不写入tunnel,抛弃所有数据
其它的介绍,可以参考上面的地址,这里就不大段贴了。
直接上实操吧:
环境: centos7
源库: mongodb 3.2.16
目的库: mongodb 4.0.4
mongo-shake的编译安装
yum install golang golang-bin golang-src # 我这里安装的是1.9.4的go包 mkdir /home/gocode/ export GOPATH=/home/gocode/ echo 'export GOPATH=/home/gocode/' >> /root/.bashrc source /root/.bashrc git clone https://github.com/aliyun/mongo-shake.git cd mongo-shake/src/vendor GOPATH=`pwd`/../.. go get -u -v github.com/kardianos/govendor # 依赖到这个包,需要先安装下govendor /home/gocode/bin/govendor sync cd ../../ && ./build.sh 这样,就会在 bin目录下生成可执行的二进制文件 启动方式: ./bin/collector -conf=conf/collector.conf