MongoDB 的迁移方案

因为mongo数据库占用机器内存过大,且主服务器上运行得服务比较多,内存有些吃紧,故考虑将主节点的mongodb迁移到另一台主机,目前存在三种方案,对比其优缺点,考虑使用副本集的方式进行。

第一种:关闭数据库,数据写回磁盘,停止服务,直接拷贝库文件

优点:各种信息都会附带,操作简单,时间段

缺点:碎片多,文件大

第二种:停止服务,使用monogoexport/mongodump

优点:没有碎片和日志信息,库比较干净

缺点:耗时长

第三种:新增一个mongodb实例,加入副本集,自动同步

优点:不需要停机,没有碎片信息
缺点:操作复杂,需要手动切换主从,配置RC信息,需要同时启动两个数据库实例,存在一定开销

考虑使用第三种方案,可以做到不停机迁移数据

准备信息:

1、原mongo docker容器的运行参数,包括网络、命令、卷、端口等。
2、原mongodb 的配置文件。

声明:

1、迁入节点称为节点B,迁出节点称为节点A
2、因为在docker环境中运行容器,为减小复杂度,未开启副本集认证

详细步骤:

1、拷贝节点A mongodb配置文件到节点B,并检查副本集设置是否正确。

cat /etc/mongo/mongo.config
########################################
...
replication: #副本集设置
  oplogSizeMB: 25600
  replSetName: rs0
...

2、节点B建立数据库文件夹和配置文件夹

mkdir /mongodb
chmod 777 mongodb

3、节点B建立docker容器并且挂载配置文件夹和数据卷

docker run -d -p 27017:27017 -v /etc/mongo:/etc/mongo -v /database/mongo:/data/db /etc/mongo:/etc/mongo mongdb:<version>

4、登录节点A数据库,执行命令

>config = {_id:"rs0",protocolVersion:1,members:[{_id:0,host:'xx.xx.xx.xx',priority :1},{_id:1,host:'xx.xx.xx.xx',priority:5}]}
>## 这里ip和优先级需要更改,优先级越大选为主节点的可能性越大
>rs.initiate(config)
## 如果提示已经注册的话,运行以下命令:
>re.reconfig(config)
## 检查同步状态
>db.printSlaveReplicationInfo() 

5、主从节点切换

## 节点A 执行mongo命令,重新选举主库 
>rs.stepDown()
## 切换到节点B,如果切换成功的话,会发现节点B的mongo命令行显示RIMARY
## 从副本集移除节点A数据库
>re.remove("xx.xx.xx.xx")
## 至此完成数据库迁移工作 

6、检查数据完整性 关闭节点A mongo服务
通过工具连接数据库,检查数据没有问题后,停止节点A的mongo 容器,有需要的话可以备份原来的数据库文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值