主要步驟:
- 添加延時節點(已有忽略)
- 清洗oplog集合的數據,導出主節點 oplog 集合(local庫oplog.rs)
- 備份延時節點
- 將延時節點恢復到另一個副本集中
- 重放oplog
注意:oplog.rs集合需要容延時節點所延遲的操作
—————————————————以下爲附錄—————————————————
mongodb添加延時節點
1. 簡介
延時節點是主節點過去某個時間點的“數據快照”,通常用來做數據備份,如果主節點有誤操作而刪除了數據,可以通過延時節點來恢復數據。例如,當前時間是10:00,並且延時節點設置1個小時的延時同步,那麼該節點不會同步1個小時內主節點上的操作。
2. 基本要求
2.1. 優先級
優先級必須設置爲0,防止延時節點被選爲主節點。
2.2. 隱藏節點
應該把延時節點設置爲隱藏節點,這樣客戶端在做從服務器讀操作時,請求不會被分發到延時節點。
2.3. 可以選舉投票
在發生選舉時,該節點可以投票。
2.4. 延時時長
延時節點通過延時從opLog同步數據來實現,因此延時時長的設置需要考慮兩個因素:
- 不小於維護時間窗口。
- 比opLog的容量要小一些,不然會不能同步而進入stale狀態。
3. 延時節點設置
下面舉一個例子來說明如果設置延時節點。假定目前有一個包含5個節點的複製組:1個主節點、3個普通從節點、1個延時節點。延時節點的延時時長設置爲3600s,並且它是一個優先級爲0的隱藏節點,如下圖所示:
連接到複製組的主節點,然後配置:
>cfg = rs.conf()
cfg.members[1].priority = 0
cfg.members[1].hidden = true
cfg.members[1].slaveDelay = 3600
>rs.reconfig(cfg)
4. 注意事項
rs.reconfig()命令執行後,會強制當前的主節點下線,然後進行新的主節點選擇。主節點下線時,會關閉所有客戶端的連接,這個過程會持續10-20s,因此該操作應該在維護時間執行,減少對系統的影響。
清洗oplog集合的數據,導出主節點 oplog 集合(local庫oplog.rs)
#拉取oplog.rs
sudo mongodump
--db=local
--collection=oplog.rs
--query='{$and:[{ "ts" : { "$gte" : Timestamp(1578441670, 3) }}]}'
--host xx.xxx.xxx.xxx
--port xxxxx
--authenticationDatabase admin
-u admin
-p admin
-o ./backupdir
備份延時節點
略
將延時節點恢復到另一個副本集中
略
重放oplog
#重放oplog
sudo mongorestore
--host xx.xxx.xxx.xxx
--port xxxxx
-u admin
-p admin
--authenticationDatabase admin
--oplogReplay
--dir ./backupdir