您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關mongodb如何借助一致性全備份加oplogs來添加新節點,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
一致性備份+oplogs
如果采用直接rs.add的方法添加新節點,需要保證oplog不被覆蓋并且需要評估同步oplog的流量影響
問題,所以(一致性備份+oplogs)是我們通常進行橫向復制集添加secondary節點的方法,
當數據量大的時候,需要采用下面的方法:
環境描述
主節點 10.9.21.114:27017
兩個從節點
10.9.21.178:27017
10.9.21.179:27017
目標:用一致性快照方式添加第三個從節點10.9.21.115:27017
整體步驟簡述:
1)主節點或者其中一個從節點上進行一致性快照備份;
2)從節點上進行一致性快照恢復,僅僅對數據部分進行恢復,暫時不要對oplog進行恢復;
3)初始化oplog.rs集合,并恢復oplog記錄,恢復oplog記錄是為了告訴該節點從哪里去讀取主庫的oplog,同時如果oplog為空,就會進行initial sync初始化,而初始化的時候會把原來的數據都刪除,所以需要恢復oplog;
4)初始化local數據庫的其他兩個集合db.replset.election(告訴目前的主節點是誰),db.system.replset(存儲的是副本集節點信息,當添加進去之后可以自行同步主節點數據,也就是說可以不必恢復它)
5)修改數據庫配置并重啟數據庫(這一步操作前實例不開啟認證模式、復制集的配置);
6)用rs.add("HOST_NAME:PORT")命令將從節點添加進集群;
7).用rs.status()觀察同步狀態并校驗數據的完整和一致性;
一.主節點或者其他兩個從節點上備份數據,我選擇的是一個從節點:
首先在主節點執行insert操作,模擬線上的業務,同時也可以作為最后驗證節點添加正常的依據:
MongoDB Enterprise liuhe_rs:PRIMARY> use liuwenhe
switched to db liuwenhe
MongoDB Enterprise liuhe_rs:PRIMARY> for (var i = 0; i < 100000; i++) { db.hezi.insert({id: i}); }
同時執行備份操作,如下,等我備份完成,前面的插入操作還沒有結束!
[mongod@beijing-fuli-hadoop-04 ~]$ mongodump -h 10.9.21.179 -u liuwenhe -p liuwenhe --authenticationDatabase admin --oplog -o /data/mongodb/backup/
二.將備份文件scp到192.168.0.3上并進行恢復:
scp -r /data/mongodb/backup mongod@10.9.21.115:/data/mongodb/backup/
三.第三個節點以單實例方式啟動:
備注:需要注釋掉以下副本集參數
vi /etc/mongod.conf
#replication:
# oplogSizeMB: 51200
# replSetName: liuhe_rs
#security:
# keyFile: /data/mongodb/config/mongodb.key
# authorization: enabled
[mongod@beijing-fuli-hadoop-03 /]$ /usr/bin/mongodb/bin/mongod -f /etc/mongod.conf
about to fork child process, waiting until server is ready for connections.
forked process: 60522
child process started successfully, parent exiting
四:在10.9.21.115上進行一致性快照恢復:
[mongod@beijing-fuli-hadoop-03 /data/mongodb/backup/backup]$ mongorestore --oplogReplay
--dir /data/mongodb/backup/backup/
五:創建oplog.rs集合并初始化大小;
MongoDB Enterprise > use local
switched to db local
注釋:因為一致性全備份的時候并不會備份local和config庫,并且新創建啟動的mongod實例的local庫下只有startup_log這個集合如下所示:
MongoDB Enterprise > show collections;
startup_log
MongoDB Enterprise > db.createCollection("oplog.rs",{"capped":true,"size":100000000})
{ "ok" : 1 }
注釋:其中capped:true表示創建的集合是循環覆蓋的,限制大小的;創建固定集合。固定集合是指有著固定大小的集合,當達到最大值時,它會自動覆蓋最早的文檔。size單位是KB
六:恢復一致性備份的oplog.rs集合的數據到10.9.21.115:
[mongod@beijing-fuli-hadoop-03 /data/mongodb/backup/backup]$ mongorestore -d local -c oplog.rs /data/mongodb/backup/backup/oplog.bson
2019-12-13T22:29:33.370+0800 checking for collection data in /data/mongodb/backup/backup/oplog.bson
2019-12-13T22:29:33.371+0800 restoring local.oplog.rs from /data/mongodb/backup/backup/oplog.bson
2019-12-13T22:29:33.433+0800 no indexes to restore
2019-12-13T22:29:33.433+0800 finished restoring local.oplog.rs (1378 documents)
2019-12-13T22:29:33.433+0800 done
七:需要查詢主節點replset.election集合的數據并將這些數據存儲到10.9.21.115節點
在主節點21.114上的操作:
MongoDB Enterprise liuhe_rs:PRIMARY> use local
switched to db local
MongoDB Enterprise liuhe_rs:PRIMARY> db.replset.election.find()
{ "_id" : ObjectId("5dcfb9112670e3e338d03747"), "term" : NumberLong(7), "candidateIndex" : NumberLong(2) }
10.9.21.115節點上保存主節點(21.114)上replset.election集合的數據內容:
MongoDB Enterprise > use local
switched to db local
MongoDB Enterprise > db.replset.election.save({ "_id" : ObjectId("5dcfb9112670e3e338d03747"), "term" : NumberLong(7), "candidateIndex" : NumberLong(2) })
WriteResult({
"nMatched" : 0,
"nUpserted" : 1,
"nModified" : 0,
"_id" : ObjectId("5dcfb9112670e3e338d03747")
})
八:關閉第三個從節點,以副本集方式啟動mongodb:
MongoDB Enterprise > use admin
switched to db admin
MongoDB Enterprise > db.shutdownServer()
2019-12-13T22:36:36.935+0800 I NETWORK [js] DBClientConnection failed to receive message from 127.0.0.1:27017 - HostUnreachable: Connection closed by peer
server should be down...
九:以副本集方式啟動mongodb
修改第三個從節點配置,注釋去掉:
vi /etc/mongod.conf
#replication:
# oplogSizeMB: 51200
# replSetName: liuhe_rs
#security:
# keyFile: /data/mongodb/config/mongodb.key
# authorization: enabled
[mongod@beijing-fuli-hadoop-03 ~]$ /usr/bin/mongodb/bin/mongod -f /etc/mongod.conf
about to fork child process, waiting until server is ready for connections.
forked process: 64136
child process started successfully, parent exiting
十:主節點執行添加節點操作
MongoDB Enterprise liuhe_rs:PRIMARY> rs.add("10.9.21.115:27017")
{
"ok" : 1,
"operationTime" : Timestamp(1576247871, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1576247871, 1),
"signature" : {
"hash" : BinData(0,"p3g5oVNzyiHogsBYfSCpzrBpIks="),
"keyId" : NumberLong("6758082305262092289")
}
}
}
十一:驗證是否成功:
1.rs.status()可以看到剛加入的21.115的狀態
MongoDB Enterprise liuhe_rs:PRIMARY> rs.status()
2.rs.printSlaveReplicationInfo()查看復制的狀態,如下可以看到21.115的信息:
MongoDB Enterprise liuhe_rs:PRIMARY> rs.printSlaveReplicationInfo()
source: 10.9.21.178:27017
syncedTo: Fri Dec 13 2019 22:39:59 GMT+0800 (CST)
0 secs (0 hrs) behind the primary
source: 10.9.21.179:27017
syncedTo: Fri Dec 13 2019 22:39:59 GMT+0800 (CST)
0 secs (0 hrs) behind the primary
source: 10.9.21.115:27017
syncedTo: Fri Dec 13 2019 22:39:59 GMT+0800 (CST)
0 secs (0 hrs) behind the primary
3.在32.115上查看hezi的集合的數據量,這個是最關鍵的驗證,因為你一致性備份的時候,同時還有操作,如果數據量是一樣的,那么也就證明,你的21.115節點添加是沒有問題了,數據開始同步了
MongoDB Enterprise liuhe_rs:SECONDARY> rs.slaveOk()
MongoDB Enterprise liuhe_rs:SECONDARY> use liuwenhe
switched to db liuwenhe
MongoDB Enterprise liuhe_rs:SECONDARY> db.hezi.count()
221323
在21.114上查看hezi集合的數據量:
MongoDB Enterprise liuhe_rs:PRIMARY> use liuwenhe
switched to db liuwenhe
MongoDB Enterprise liuhe_rs:PRIMARY> db.hezi.count()
221323
對比發現數據是一樣的,說明添加節點的工作完成了。。。
關于mongodb如何借助一致性全備份加oplogs來添加新節點就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。