副本集信息:
192.168.1.1 PRIMARY 192.168.1.2 SECONDARY 192.168.1.3 SECONDARY 192.168.1.4 SECONDARY(新增)
一、步骤:
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 -uadmin -padmin --host 192.168.1.1 --authenticationDatabase=admin --port=27017 --oplog -o /data/mongo/backup
将备份传输到192.168.1.4进行恢复:
scp -r /data/mongo/backup mongo@192.168.1.4/data/mongo
三、第三个从节点以单实例方式启动:
备注:需要注释掉以下副本集参数 # auth = true #replSet = repl_mongo #keyFile = /data/mongo/27017/replSet.key 启动: mongod -f /data/mongo/27017/conf/mongodb.conf 在192.168.1.4上进行一致性快照恢复: mongorestore --oplogReplay --port=27017 /data/mongo/backup
四、创建oplog.rs集合并初始化大小:
>use local >db.createCollection("oplog.rs",{"capped":true,"size":100000000})
五、查询主节点replset.election集合的数据并将这些数据存储到192.168.1.4节点
在PRIMARY上的操作:若没权限,添加权限:db.grantRolesToUser( "admin", [{ role: "read", db: "local"}]) > use local > db.replset.election.find() { "_id" : ObjectId("60ab1a31c16378e2712acaf4"), "term" : NumberLong(1), "candidateIndex" : NumberLong(0) }
在SECONDARY上保存PRIMARY上replset.election集合的数据内容:
> use local > db.replset.election.save({ "_id" : ObjectId("60ab1a31c16378e2712acaf4"), "term" : NumberLong(1), "candidateIndex" : NumberLong(0) })
六、关闭第三个从节点,以副本集方式启动mongodb:
修改第三个从节点配置,注释去掉: auth = true replSet = repl_mongo keyFile = /data/mongo/27017/replSet.key 以副本集方式启动mongodb: mongod -f /data/mongo/27017/conf/mongodb.conf
七、在PRIMARY上添加SECONDARY节点:若权限不够:db.grantRolesToUser ( "admin", [ { role: "__system", db: "admin" } ] )
> rs.add("192.168.1.4:27017")