mongoshake deploy demo

wdghub - May 24, 2021

mongoshake安装样例

将mongodb副本集群的数据同步到另外一个mongodb集群(其他的架构模式也支持)

预先条件

分别部署两mongodb副本集集群,并确保网络互通

1
2
3
4
5
6
7
8
9
# replset1 源端
10.10.100.16:37017
10.10.100.5:37017
10.10.100.6:37017

# replset2 目的端
172.16.0.6:37017
172.16.0.9:37017
172.16.0.7:37017

安装文件

1
2
3
4
# 在目的端任意一个节点运行
wget "http://url_to_get_software/mongo-shake-v2.4.22.tar.gz" 
tar -zxvf mongo-shake-v2.4.22.tar.gz
mv mongo-shake-v2.4.22 /usr/local/

账号设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// 依据最小授权创建账号
// 创建复制账号 源端
use mongoshake;   
db.createUser(
 {
	user: "repl_user",
	pwd: "repl_user_passwd",
	roles: [ { role: "readWrite", db: "mongoshake" },
    { role: "backup", db: "admin"}
    ]
 }
)


// 创建复制账号 目的端
use admin;   
db.createUser(
 {
	user: "repl_user",
	pwd: "repl_user_passwd",
	roles: [ { role: "readWriteAnyDatabase", db: "admin" } ]
 }
)

配置信息

修改配置文件collector.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 源端连接uri
mongo_urls = mongodb://repl_user:repl_user_passwd@10.10.100.16:37017,10.10.100.5:37017,10.10.100.6:37017/mongoshake

# 目的端连接uri
tunnel.address = mongodb://repl_user:repl_user_passwd@172.16.0.6:37017,172.16.0.9:37017,172.16.0.7:37017/admin

# 先全量同步,然后增量同步
sync_mode = all

# 同步DDL
filter.ddl_enable = true

# 全量同步后创建索引
full_sync.create_index = background

# v2.4.22默认没有设置 其他版本可能不需要设置
incr_sync.tunnel.write_thread = 16

启动服务

1
2
cd /usr/local/mongo-shake-v2.4.22
./collector.linux -conf=collector.conf &

其他信息

mongoshake在源端通过mongoshake库下的表ckpt_default记录同步信息,可以控制ckpt_default的记录实现控制同步信息,需要重启mongoshake。

  • 重新全量同步 删掉目的端的库的数据,删除源端的 mongoshake ckpt_default

  • 跳过某个时间段的事件 进入增量同步时,修改源端的 mongoshake ckpt_default 的 ckpt

注意事项

mongodb版本为4.4.4,mongoshake版本为2.4.22时,在增量同步时新创建索引会导致同步失败。(可考虑升级mongoshake)
可以通过查看源端local库下oplog.rs的记录,确定创建索引操作的结束点,修改mongoshake库下ckpt_default的记录跳过创建索引的同步操作,在目的端手动创建索引。