MongoDB【迁移篇】01:MongoDB数据迁移【从A机房迁移到B机房】
·
一、迁移流程介绍
1、MongoDB迁移流程

2、迁移过程

四、MongoDB迁移前准备
将A机房的MongoDB迁移到B机房
1、环境信息
A机房:
192.168.184.161 27001
192.168.184.162 27001
192.168.184.163 27001

B机房:
192.168.184.164 27001
192.168.184.165 27001
192.168.184.166 27001

2、环境搭建
(1)A机房搭建MongoDB副本集
可参考:
创建MongoDB高可用环境
(2)A机房MongoDB副本集写入数据
161节点执行
mongosh onlinestore --port 27001 -u onlinestore_rw -p admin
use onlinestore;
db.one.insertOne({name:'liu'});

(3)B机房搭建MongoDB副本集
可参考:
创建MongoDB高可用环境
3、创建同步用户
(1)A机房创建同步用户
在161节点执行,也就是Primary节点执行
mongosh --port 27001 -u root -p admin
db.getSiblingDB("admin").createUser({
user: "mongoshake_rw",
pwd: "admin",
roles: [
{ role: "root", db: "admin" }
]
});

(2)B机房创建同步用户
在165节点执行,我这里165是Primary节点
mongosh --port 27001 -u root -p admin
db.getSiblingDB("admin").createUser({
user: "mongoshake_rw",
pwd: "admin",
roles: [
{ role: "root", db: "admin" }
]
});

4、配置A机房到B机房的同步
(1)下载MongoShake
在B机房166节点下载MongoShake
mkdir -p /data/mongoshake
cd /data/mongoshake
wget https://github.com/alibaba/MongoShake/releases/download/release-v2.8.4-20230425/mongo-shake-v2.8.4.tgz

(2)解压安装包
cd /data/mongoshake
tar -zxvf mongo-shake-v2.8.4.tgz

(3)修改配置文件
cd /data/mongoshake/mongo-shake-v2.8.4
vim collector.conf
修改如下内容:
mongo_urls 填写A机房的地址
tunnel.address 填写B机房地址
mongo_urls = mongodb://mongoshake_rw:admin@192.168.184.161:27001,192.168.184.162:27001,192.168.184.163:27001
sync_mode = all
tunnel.address = mongodb://mongoshake_rw:admin@192.168.184.164:27001,192.168.184.165:27001,192.168.184.166:27001
incr_sync.mongo_fetch_method = change_stream


(4)启动同步
cd /data/mongoshake/mongo-shake-v2.8.4
nohup ./collector.linux -conf=collector.conf &

查看日志
cd /data/mongoshake/mongo-shake-v2.8.4/logs
tail -100f collector.log

5、验证历史数据是否同步到B机房
mongosh onlinestore --port 27001 -u onlinestore_rw -p admin

show tables;
db.one.find();

6、A机房新增数据验证是否同步到B机房
(1)A机房161节点执行
mongosh onlinestore --port 27001 -u onlinestore_rw -p admin
use onlinestore;
db.two.insertOne({name:'zhang'});
db.three.insertOne({name:'tao'});

(2)查看日志
cd /data/mongoshake/mongo-shake-v2.8.4/logs
tail -100f collector.log

(3)B机房165节点查看
mongosh onlinestore --port 27001 -u onlinestore_rw -p admin
show tables;
db.two.find();
db.three.find();

7、迁移前准备
(1)增加监控和备份
可参考如下:
Promethets监控MongoDB以及通过企业微信发送告警信息
设置MongoDB自动备份
(2)给B机房的客户端增加白名单
例如,想将167节点加到白名单中
164节点执行
iptables -A INPUT -s 192.168.184.167 -p tcp --dport 27001 -j ACCEPT
加到开机启动项
vim /etc/rc.local
添加如下内容:
iptables -A INPUT -s 192.168.184.167 -p tcp --dport 27001 -j ACCEPT

165节点执行
iptables -A INPUT -s 192.168.184.167 -p tcp --dport 27001 -j ACCEPT
加到开启启动项
vim /etc/rc.local
添加如下内容:
iptables -A INPUT -s 192.168.184.167 -p tcp --dport 27001 -j ACCEPT

三、迁移过程
1、查看A机房3种数据库是否有连接
161节点执行,查看连接
mongosh --port 27001 -u repl -p admin --eval "db.currentOp()"

2、确定是否有同步延迟
A机房写入数据,161节点执行
mongosh onlinestore --port 27001 -u onlinestore_rw -p admin

use onlinestore;
show tables;
db.one.insertOne({name:'test_delay'});

B机房查询数据,165节点执行,我这里165是Primar节点
mongosh onlinestore --port 27001 -u onlinestore_rw -p admin

show tables;
db.one.find();

3、配置反向同步
这里配置反向同步是为了回滚,万一要回滚的话,新插入B机房的数据也能进行回滚。
下载MongoShake
在A机房163节点下载MongoShake
mkdir -p /data/mongoshake
cd /data/mongoshake
wget https://github.com/alibaba/MongoShake/releases/download/release-v2.8.4-20230425/mongo-shake-v2.8.4.tgz

解压安装包
cd /data/mongoshake
tar -zxvf mongo-shake-v2.8.4.tgz

修改配置文件
cd /data/mongoshake/mongo-shake-v2.8.4
vim collector.conf
修改如下内容:
mongo_urls 填写B机房的地址
tunnel.address 填写A机房地址
mongo_urls = mongodb://mongoshake_rw:admin@192.168.184.164:27001,192.168.184.165:27001,192.168.184.166:27001
sync_mode = all
tunnel.address = mongodb://mongoshake_rw:admin@192.168.184.161:27001,192.168.184.162:27001,192.168.184.163:27001
incr_sync.mongo_fetch_method = change_stream


启动同步
cd /data/mongoshake/mongo-shake-v2.8.4
nohup ./collector.linux -conf=collector.conf &

查看日志
cd /data/mongoshake/mongo-shake-v2.8.4/logs
tail -100f collector.log

4、停止正向同步
B机房166节点停止mongoshake进程
ps -ef | grep collector.linux

kill -9 35624
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)