mongodb副本集用一致性快照方法新增從節點步驟

chenfeng發表於2019-09-13

環境描述

主節點 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備份方式新增一個從節點方法類似。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2656983/,如需轉載,請註明出處,否則將追究法律責任。

相關文章