共计 2099 个字符,预计需要花费 6 分钟才能阅读完成。
环境描述
主节点 192.168.0.1:27002
两个从节点
192.168.0.2:27002
192.168.0.3:27002
目标:用一致性快照方式添加第三个从节点 192.168.0.3
步骤简述:
1) 主节点上进行一致性快照备份
2) 从节点上进行一致性快照恢复,仅仅对数据部分进行恢复,暂时不要对 oplog 进行恢复
3) 初始化 oplog.rs 集合,并恢复 oplog 记录
4) 初始化 local 数据库的其他两个集合 db.replset.election,db.system.replset
5) 修改数据库配置并重启数据库(这一步操作前实例不开启认证模式、复制集的配置),
6) 用 rs.add(“HOST_NAME:PORT”) 命令将从节点添加进集群
7). 用 rs.status() 观察同步状态并校验数据的完整和一致性
一. 主节点或者其他两个从节点上备份数据:
mongodump -uroot -ptest –host 192.168.0.2 –authenticationDatabase=admin –port=27002 –oplog -o /data/mongo/backup
二. 将备份文件 scp 到 192.168.0.3 上并进行恢复:
scp -r /data/mongo/backup mongo@192.168.0.3/data/mongo
三. 第三个节点以单实例方式启动:
备注: 需要注释掉以下副本集参数
# auth = true
#replSet = test27002
#replSet = repl_mongo
#keyFile = /data/mongo/27002/replSet.key
# su – mongo
$ mongod -f /data/mongo/27002/conf/mongodb.conf
在 192.168.0.3 上进行一致性快照恢复:
$ mongorestore –oplogReplay –port=27002 /data/mongo/backup
创建 oplog.rs 集合并初始化大小:
>use local
>db.createCollection(“oplog.rs”,{“capped”:true,”size”:100000000})
恢复一致性备份的 oplog.rs 集合的数据到 192.168.0.3:
$ mongorestore -d local -c oplog.rs –port=27002 /data/mongo/backup/oplog.bson
需要查询主节点 replset.election 集合的数据并将这些数据存储到 192.168.0.3 节点
主 DB 上的操作:
$ mongo 192.168.0.1:27002/admin -uroot -ptest
test27002:PRIMARY> use local
switched to db local
test27002:PRIMARY> db.replset.election.find()
{“_id” : ObjectId(“5d64912a1978c9b194cf7cc5”), “term” : NumberLong(2), “candidateIndex” : NumberLong(2) }
192.168.0.3 节点上保存主 DB 上 replset.election 集合的数据内容:
use local
db.replset.election.save({“_id” : ObjectId(“5d64912a1978c9b194cf7cc5”), “term” : NumberLong(2), “candidateIndex” : NumberLong(2) })
关闭第三个从节点,以副本集方式启动 mongodb:
> use admin
switched to db admin
> db.shutdownServer()
server should be down…
2019-09-01T18:10:57.337+0800 I NETWORK [js] trying reconnect to 127.0.0.1:27002 failed
2019-09-01T18:10:57.337+0800 I NETWORK [js] reconnect 127.0.0.1:27002 failed failed
>
>
修改第三个从节点配置,注释去掉:
auth = true
replSet = test27002
keyFile = /data/mongo/27002/replSet.key
以副本集方式启动 mongodb
$ mongod -f /data/mongo/27002/conf/mongodb.conf
主节点执行添加节点操作:
mongo 192.168.0.1:27002/admin -uroot -ptest
>rs.add(“172.31.30.82:27001”);
主节点上写入数据:
use test
for (var i=0;i<=500;i++) {db.test.insert({id:i,name:”chenfeng”}) }
登录第三个从节点进行数据验证:
>use test
>db.test.count()
说明 :以上步骤和 MySQL 的用 mysqldump 或 xtrabackup 备份方式添加一个从节点方法类似。
: