Replication
MongoDB OplogStart 缺失
我知道有時 MongoDB 輔助數據會變得陳舊,我們需要從主實例執行初始化同步。
但有時我們會看到如下所示的錯誤日誌:
2022-07-22T21:24:20.065+0000 I REPL [rsBackgroundSync] Starting rollback due to OplogStartMissing: Our last optime fetched: { ts: Timestamp(1658512549, 30), t: 57 }. source's GTE: { ts: Timestamp(1658513748, 2), t: 88 }
上述錯誤消息與以下內容有何不同:
2022-08-01T02:30:21.915+0000 I REPL [replication-0] We are too stale to use xyz as a sync source. Blacklisting this sync source because our last fetched timestamp: Timestamp(1659314292, 1) is before their earliest timestamp: Timestamp(1659320029, 301) for 1min until: 2022-08-01T02:31:21.915+0000
我試圖了解上述兩者之間的區別。
第一個是從其中一個節點回滾寫入。
當輔助節點失去連接時,它聲稱自己是主節點並接受了一些寫入。日誌條目說,在此之前 20 分鐘,真正的主節點接受了其他寫入,因此重新聯合的輔助節點會降級並回滾自己的寫入。
第二個說 oplog 大小不足以應對如此長的停機時間。Oplog 是一個有上限的集合。較新的寫入會覆蓋較舊的記錄。節點上的最後一個 oplog 條目是 2022 年 8 月 1 日星期一 00:38:12,源上的第一個 oplog 條目是 2022 年 8 月 1 日星期一 02:13:49。記錄有超過 1 個半小時的間隔,所以 mongo 無法可靠地重放 oplog。
儘管您可以通過增加配置中 oplog 的大小來解決此問題,但解決連接問題是有意義的。Mongo 旨在覆蓋較短的網路分區,但在停機時間較長時效率不高。