Replication
Mongo 初始同步失敗並出現 InvalidSyncSource
我正在嘗試將一個新的 3.4(RocksDB 引擎)成員添加到目前由 3.2(WiredTiger 引擎)成員組成的 ~2 TB 副本集中,並且在初始同步時遇到問題。由於儲存引擎不同,使用文件系統快照引導新成員的常見建議將不起作用。
複製開始正常,但最終會遇到 InvalidSyncSource 錯誤。奇怪的是,日誌條目似乎聲稱主伺服器的 OpTime 比輔助伺服器的 OpTime 落後 30 多秒,這對我來說聽起來是不可能的。我已經確認主伺服器在整個操作過程中保持在 PRIMARY 狀態,並且所有主機上的時鐘都是同步的。
第一個跡象表明有問題(初始同步源是 db-primary.xxxxxxxxxxxxxxx:27017):
2017-04-28T10:58:52.183+0200 I REPL [replication-5] re-evaluating sync source because our current sync source's most recent OpTime is { ts: Timestamp 1493369879000|2, t: -1 } which is more than 30s behind member db-secondary.xxxxxxxxxxxxxxx:27017 whose most recent OpTime is { ts: Timestamp 1493369931000|2, t: -1 } 2017-04-28T10:58:52.183+0200 I REPL [replication-5] Finished fetching oplog during initial sync: InvalidSyncSource: sync source db-primary.xxxxxxxxxxxxxxx:27017 (last optime: { ts: Timestamp 0|0, t: -1 }; sync source index: -1; primary index: -1) is no longer valid. Last fetched optime and hash: { ts: Timestamp 1493369932000|1, t: -1 }[3606797002863800866] 2017-04-28T10:58:52.183+0200 E REPL [replication-5] Error fetching oplog during initial sync: InvalidSyncSource: sync source db-primary.xxxxxxxxxxxxxxx:27017 (last optime: { ts: Timestamp 0|0, t: -1 }; sync source index: -1; primary index: -1) is no longer valid
我不確定這裡第 2 行和第 3 行中的“時間戳 0|0”是否有意義,但它們對我來說也很奇怪。Mongo 愉快地繼續同步,直到它複製了所有數據庫,之後會發生這種情況:
2017-04-29T01:16:52.317+0200 E REPL [initial sync-0] Initial sync attempt failed -- attempts left: 9 cause: InvalidSyncSource: sync source db-primary.xxxxxxxxxxxxxxx:27017 (last optime: { ts: Timestamp 0|0, t: -1 }; sync source index: -1; primary index: -1) is no longer valid 2017-04-29T01:16:53.379+0200 I REPL [initial sync-0] sync source candidate: db-primary.xxxxxxxxxxxxxxx:27017
什麼可能導致初始同步以這種方式失敗?我唯一能想到的是,嘗試從主要讀取 OpTime 掛起很長一段時間,並且返回的時間足夠晚,可以與從次要讀取的更近的讀數進行比較,但我認為/希望 Mongo 會考慮到這一點。此外,所有相關主機之間都有可靠的 1 Gbit 網路連結,沒有跡象表明網路級別出現任何問題。
無論可能的解釋如何,任何人都可以提出一種可能防止此問題發生的方法嗎?
請注意,我已經在一個小得多(~300 GB)的副本集上成功地執行了這個操作,但如果問題是隨機發生的,那可能只是幸運的。
這看起來像是已知的錯誤,將在 3.4.5 版中修復,希望在本月底之前發布。