1:oplog簡介
oplog是local庫下的一個固定集合,Secondary就是通過查看Primary 的oplog這個集合來進行復制的。每個節點都有oplog,記錄這從主節點復制過來的信息,這樣每個成員都可以作為同步源給其他節點。
2:副本集數據同步的過程
副本集中數據同步的詳細過程:Primary節點寫入數據,Secondary通過讀取Primary的oplog得到復制信息,開始復制數據並且將復制信息寫入到自己的oplog。如果某個操作失敗(只有當同步源的數據損壞或者數據與主節點不一致時才可能發生),則備份節點停止從當前數據源復制數據。如果某個備份節點由於某些原因掛掉了,當重新啟動后,就會自動從oplog的最后一個操作開始同步,同步完成后,將信息寫入自己的oplog,由於復制操作是先復制數據,復制完成后再寫入oplog,有可能相同的操作會同步兩份,不過MongoDB在設計之初就考慮到這個問題,將oplog的同一個操作執行多次,與執行一次的效果是一樣的。
3:oplog的增長速度
oplog是固定大小,他只能保存特定數量的操作日志,通常oplog使用空間的增長速度跟系統處理寫請求的速度相當,如果主節點上每分鍾處理1KB的寫入數據,那么oplog每分鍾大約也寫入1KB數據。如果單次操作影響到了多個文檔(比如刪除了多個文檔或者更新了多個文檔)則oplog可能就會有多條操作日志。db.testcoll.remove() 刪除了1000000個文檔,那么oplog中就會有1000000條操作日志。如果存在大批量的操作,oplog有可能很快就會被寫滿了。
4:oplog注意事項:
local.oplog.rs特殊的集合。用來記錄Primary節點的操作。
為了提高復制的效率,復制集中的所有節點之間會相互的心跳檢測(ping)。每個節點都可以從其他節點上獲取oplog。
oplog中的一條操作。不管執行多少次效果是一樣的
5:oplog的大小
第一次啟動復制集中的節點時,MongoDB會建立Oplog,會有一個默認的大小,這個大小取決於機器的操作系統
rs.printReplicationInfo()
db.getReplicationInfo()
可以用來查看oplog的狀態、大小、存儲的時間范圍