oplog 中的每個操作都是冪等的。也就是說,無論對目標資料集應用一次還是多次,oplog 操作都會產生相同的結果。
Oplog大小
預設 oplog 大小取決於儲存引擎:
儲存引擎
|
預設 Oplog 大小
|
---|---|
WiredTiger 儲存引擎
|
5% 的可用磁碟空間
|
記憶體儲存引擎
|
5% 的實體記憶體
|
oplog要點
oplog大小
oplog保留期限
oplog時間戳:主副斷開,時間戳內可繼續同步
Oplog狀態:要檢視 oplog 狀態(包括操作的大小和時間範圍),請發出該rs.printReplicationInfo()
方法。
副本集資料同步
MongoDB 使用兩種形式的資料同步:初始同步,用完整資料集填充新成員;複製,將正在進行的更改應用於整個資料集。
您可以使用引數指定首選的初始同步源 initialSyncSourceReadPreference
。此引數只能在啟動時指定mongod
。
初始同步完成時,成員將從 過渡 STARTUP2
到SECONDARY
。
容錯
如果由於瞬態(即臨時)網路錯誤、集合丟失或集合重新命名而中斷,則執行初始同步的輔助伺服器可以嘗試恢復同步過程。
副本集高可用性
副本集使用選舉來支援 高可用性。
- 副本集選舉
- 當主節點不可用時就會發生選舉,並且副本整合員會自主選擇新的主節點。
- 副本集故障轉移期間的回滾
- 當成員在故障轉移後重新加入複製副本集時,回滾將恢復對以前主成員的寫入操作。
- 當成員在故障轉移後重新加入其副本集時,回滾會還原前主節點上的寫入操作。僅當主節點接受了在主節點關閉之前輔助節點未成功複製的寫入操作時,才需要回滾 。當主節點作為輔助節點重新加入副本集時,它會還原或“回滾”其寫入操作以保持與其他成員的資料庫一致性。
當副本集擁有穩定的主節點後,選舉演算法將“盡最大努力”讓具有最高 priority
可用優先順序的輔助節點發起選舉。成員優先順序會影響選舉的時間和結果;具有較高優先順序的輔助節點比具有較低優先順序的輔助節點相對較早地發起選舉,並且獲勝的可能性也更大。但是,即使有更高優先順序的輔助節點可用,較低優先順序的例項也可能會在短時間內被選為主節點。副本整合員將繼續發起選舉,直到可用的最高優先順序成員成為主節點。
優先順序為 的成員0
無法成為主成員,也不會參與選舉。
寫入副本集關注
副本集的寫入關注度描述了在操作成功返回之前必須確認寫入操作的資料承載成員(即主節點和次節點,但不是仲裁節點)的數量。成員只有在成功接收並應用寫入後才能確認寫入操作。
對於副本集:
-
寫入關注
w: "majority"
需要確認寫入操作已持久提交給 計算得出的大多數資料承載投票成員。對於大多數副本集配置,w: "majority"
是預設的寫入關注。 -
寫入關注
w: 1
只需要主副本整合員的確認,然後返回寫入關注確認。 -
數值大於的寫入關注
1
需要主節點和儘可能多的輔助節點確認才能達到指定值。輔助節點無需是投票成員即可達到寫入關注閾值。指定的寫入關注值不能大於副本集中承載資料的成員總數。
驗證對副本集的寫入操作
以下操作包括writeConcern
方法選項insertOne()
。操作指定:-"majority"
寫入關注,以及 - 5 秒超時。
寫入wtimeout
關注引數確保操作不會無限期阻塞。
db.products.insertOne( { item: "envelopes", qty : 100, type: "Clasp" }, { writeConcern: { w: "majority" , wtimeout: 5000 } } )