Replication

副本集 Oplog Maxsize

  • December 21, 2018

我有兩個使用 ReplicaSet 的數據庫(Mongodb 3.6.5),當我在網路中進行拆分時,我強制輔助數據庫成為主數據庫。

cfg = rs.conf()
cfg.members[0].votes = 0
cfg.members[1].votes = 1
cfg.members[0].priority = 0
cfg.members[1].priority = 1
rs.reconfig(cfg, { force: true })

我已經測試了在輔助節點中插入作為主節點,當返回網路並返回輔助節點作為輔助節點時,鹼基被複製,原始主節點等於輔助節點。

現在我再次拔網,在轉為primary的secondary機器上做了幾次操作,直到Oplog的大小超過maxSize。一段時間不做操作後,Oplog 的大小有所減小。我做了一些更多的操作來增加 Oplog 的大小值,但沒有像以前那樣增長。

我的下一步是返回網路,將輔助作為輔助返回,並查看它是否同步。

我想知道這個 Oplog 是如何工作的?

我有兩個使用 ReplicaSet 的數據庫(Mongodb 3.6.5),當我在網路中進行拆分時,我強制輔助數據庫成為主數據庫。

強制重新配置只能用作管理的最後手段。這是一種只有兩個副本集成員的冒險方法,因為您可以輕鬆地創建需要大量手動恢復工作的數據挑戰。

如果您有一個網路分區並且無意中將雙方重新配置為擁有一個主分區,您將不得不處理回滾和手動協調衝突寫入。最壞的情況是有足夠的獨立寫入操作日誌不再有一個共同點:您必須選擇一個成員用作主要成員,然後重新同步另一個成員。

現在我再次拔網,在轉為primary的secondary機器上做了幾次操作,直到Oplog的大小超過maxSize。一段時間不做操作後,Oplog 的大小有所減小。我做了一些更多的操作來增加 Oplog 的大小值,但沒有像以前那樣增長。

複製 oplog是一個系統上限集合,其實現會根據底層 MongoDB 儲存引擎和 MongoDB 伺服器版本而有所不同。從概念上講,上限集合以插入順序維護,最大大小以字節或文件為單位。您可以將其視為類似於循環緩衝區:一旦上限集合達到其最大大小,儲存引擎會根據插入順序刪除或覆蓋最舊的文件。

oplog 的上限集合實現有一些額外的細微差別(與標准上限集合相比),以提高複制案例的性能。WiredTiger(MongoDB 3.2+ 中的預設儲存引擎)不會為 oplog 預分配完整空間,因此該集合將增長直到接近最大 oplog 大小。WiredTiger 有一個後台執行緒,它會定期從oplog.rs集合中刪除一批最舊的條目,因此磁碟上此集合的大小預計會根據整體寫入活動而波動。

引用自:https://dba.stackexchange.com/questions/225487