一、MongoShake工具介绍
MongoShake是一个基于MongoDB的oplog的通用服务平台。它从源mongo数据库中获取oplog,并在目标mongo数据库中重放或发送到不同隧道的其他端。如果目标端是mongo数据库,即直接replay oplog,它就像一个同步工具,用于将数据从源MongoDB复制到另一个MongoDB,以建立冗余复制或双活复制。除了这种直接方式,还有其他隧道类型,如rpc、file、tcp、kafka。用户编写的接收器必须定义自己的接口以分别连接到这些隧道。用户还可以定义自己的可插入隧道类型。如果连接kafka等第三方消息中间件,消费者可以在pub/sub模块中灵活的异步获取订阅者数据。
源可以是单个mongod、副本集或分片,而目标可以是mongod或mongos。如果源是副本集,我们建议从secondary/hidden取数据来缓解primary的压力。如果源是分片,每个分片都应该连接到 Mongo-Shake。目标端可以有多个mongos来保持高可用,不同的数据会被hash后写入不同的mongos。
说明: 如需了解更多MongoShake相关信息,请参见MongoDB-shake Github主页。
二、环境信息说明
类型 | 操作系统 | 软件版本 | 集群类型 | 实例 |
---|---|---|---|---|
源 | Centos7.6 | Mongodb4.4.8 | 副本集 | 192.168.1.1.191:27017 |
源 | Centos7.6 | Mongodb4.4.8 | 副本集 | 192.168.1.1.191:27018 |
源 | Centos7.6 | Mongodb4.4.8 | 副本集 | 192.168.1.1.191:27019 |
目标 | Centos7.6 | Mongodb4.4.8 | 副本集 | 192.168.1.1.192:27017 |
目标 | Centos7.6 | Mongodb4.4.8 | 副本集 | 192.168.1.1.192:27018 |
目标 | Centos7.6 | Mongodb4.4.8 | 副本集 | 192.168.1.1.192:27019 |
三、MongoDB副本集间的单向同步
3.1、创建同步数据用户
同步的数据源 | 所需权限 |
---|---|
源MongoDB实例 | readAnyDatabase权限、local库的read权限和mongoshake库的readWrite权限 |
目标MongoDB实例 | readWriteAnyDatabase权限或目标库的readWrite权限。 |
说明 mongoshake库会在增量同步开始时由MongoShake程序自动在源实例中创建。
1、源副本集主节点
use admin;
db.createUser({user:'shake',pwd:'shake',roles:[{role:'readWrite',db:'mongoshake'}]})
db.grantRolesToUser("shake",[{role:'readAnyDatabase',db:'admin'}])
db.grantRolesToUser("shake",[{role:'read',db:'local'}])
db.grantRolesToUser("shake",[{role:'read',db:'config'}])
如下图所示:
2、目标副本集主节点
use admin;
db.createUser({user:'shake',pwd:'shake',roles:[{role:'readWriteAnyDatabase',db:'admin'}]})
如下图所示:
3.2、安装配置MongoShake
#1、下载MongoShake
[root@localhost pkgs]# wget https://github.com/alibaba/MongoShake/releases/download/release-v2.8.1-20220922/mongo-shake-v2.8.1.tgz
[root@localhost pkgs]# tar axf mongo-shake-v2.8.1
#2、编辑collector.conf配置文件
[root@localhost pkgs]# cd mongo-shake-v2.8.1
[root@localhost mongo-shake-v2.8.1]# vim collector.conf
sync_mode = all
mongo_urls = mongodb://shake:shake@192.168.1.191:27107,192.168.1.191:27018
tunnel.address = mongodb://shake:shake@192.168.1.192:27107,192.168.1.192:27018
3.3、启动MongoShake服务
[root@localhost mongo-shake-v2.8.1]# ./start.sh collector.conf
3.3、监控MongoShake状态
总结:整理不易,如果对你有帮助,可否点赞关注一下?
更多详细内容请参考:《Linux运维篇:Linux系统运维指南》