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
對比發現資料是一樣的,說明新增節點的工作完成了。。。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29654823/viewspace-2668650/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 備份之全庫一致性備份
- MONGODB使用MONGDODUMP備份來搭建備份集MongoDB
- mongodb副本集新增刪除節點MongoDB
- mongodb副本集用一致性快照方法新增從節點步驟MongoDB
- 【Mongodb】 replica set 新增和刪除節點。MongoDB
- Mongodb通過一致性備份搭建SECONDARY.MongoDB
- OpenStack 新加計算節點後修改
- 深度乾貨 | 如何藉助雲原生搞定Oracle備份快速恢復?Oracle
- Networker備份oracle單節點Oracle
- DKHhadoop新增新節點功能介紹Hadoop
- 給XML檔案新增新的節點XML
- oracle 10g rac,刪除故障節點並新增新節點Oracle 10g
- mongodb主從備份MongoDB
- Mongodb 備份指令碼MongoDB指令碼
- MongoDB副本集新增和刪除仲裁節點一例MongoDB
- 【Mongodb】 replica set 兩種新增節點方法的日誌分析MongoDB
- MySQL 5.5 Slave節點備份指令碼(mysqldump)MySql指令碼
- 新增節點教程
- KubeSphere 新增節點
- 藉助ai來分析程式碼,理解程式碼AI
- jquery如何新增一個新的元素節點jQuery
- MongoDB資料庫備份MongoDB資料庫
- 整庫(whole)備份-一致性整庫備份
- 藉助Edge,微軟的Windows強制更新降到了一個新的低點微軟Windows
- jQuery新增節點___例_新增表格jQuery
- rman 備份 全庫
- 整庫(whole)備份-非一致性整庫備份
- 藉助查詢引數來利用 Laravel 快取Laravel快取
- RHEL5 Oracle 10g RAC新增新節點Oracle 10g
- Oracle RAC新增節點Oracle
- Oracle RAC 新增節點Oracle
- oop主節點(NameNode)備份策略以及恢復方法OOP
- MongoDB叢集搭建(包括隱藏節點,仲裁節點)MongoDB
- RAC一個節點恢復另一個節點在帶庫上的備份
- MongoDB 邏輯備份工具mongodumpMongoDB
- MongoDB之備份與恢復MongoDB
- rancher新增k8s節點時顯示節點已新增K8S
- 什麼是備份資料庫?什麼是資料庫一致性備份和非一致性備份?資料庫