MongoDB 重新同步複製整合員

資料庫工作筆記發表於2024-02-21

來源:myabc


測試的複製集因為磁碟空間的問題,落後主節點太多,資料不同步:







{"t":{"$date":"2024-02-19T16:13:06.387+08:00"},"s":"I",  "c":"REPL",     "id":21799,   "ctx":"ReplCoordExtern-0","msg":"Sync source candidate chosen","attr":{"syncSource":"x.x.x.82:27017"}}{"t":{"$date":"2024-02-19T16:13:06.388+08:00"},"s":"I",  "c":"REPL",     "id":5579708, "ctx":"ReplCoordExtern-0","msg":"We are too stale to use candidate as a sync source. Denylisting this sync source because our last fetched timestamp is before their earliest timestamp","attr":{"candidate":"x.x.x.82:27017","lastOpTimeFetchedTimestamp":{"$timestamp":{"t":1702315041,"i":1249}},"remoteEarliestOpTimeTimestamp":{"$timestamp":{"t":1707324692,"i":393}},"denylistDurationMinutes":1,"denylistUntil":{"$date":"2024-02-19T08:14:06.388Z"}}}{"t":{"$date":"2024-02-19T16:13:06.388+08:00"},"s":"I",  "c":"REPL",     "id":21799,   "ctx":"ReplCoordExtern-0","msg":"Sync source candidate chosen","attr":{"syncSource":"x.x.x.81:27017"}}{"t":{"$date":"2024-02-19T16:13:06.389+08:00"},"s":"I",  "c":"REPL",     "id":5579708, "ctx":"ReplCoordExtern-0","msg":"We are too stale to use candidate as a sync source. Denylisting this sync source because our last fetched timestamp is before their earliest timestamp","attr":{"candidate":"x.x.x.81:27017","lastOpTimeFetchedTimestamp":{"$timestamp":{"t":1702315041,"i":1249}},"remoteEarliestOpTimeTimestamp":{"$timestamp":{"t":1707324526,"i":1115}},"denylistDurationMinutes":1,"denylistUntil":{"$date":"2024-02-19T08:14:06.389Z"}}}{"t":{"$date":"2024-02-19T16:13:06.389+08:00"},"s":"I",  "c":"REPL",     "id":21798,   "ctx":"ReplCoordExtern-0","msg":"Could not find member to sync from"}{"t":{"$date":"2024-02-19T16:13:20.998+08:00"},"s":"I",  "c":"STORAGE",  "id":22430,   "ctx":"Checkpointer","msg":"WiredTiger message","attr":{"message":"[1708330400:998702][596:0x7ff714c47700], WT_SESSION.checkpoint: [WT_VERB_CHECKPOINT_PROGRESS] saving checkpoint snapshot min: 15, snapshot max: 15 snapshot count: 0, oldest timestamp: (1702314741, 1249) , meta checkpoint timestamp: (1702315041, 1249) base write gen: 33406434"}}


當複製整合員的複製程式落後太多,以至於主節點覆蓋了該成員尚未複製的 oplog 條目時,複製整合員就會變得 "stale"。出現這種情況時,必須刪除成員的資料並執行初始同步,從而完全重新同步成員。

 

MongoDB 提供了兩種執行初始同步的選項:

1.以空資料目錄重啟 mongod,讓 MongoDB 的正常初始同步功能恢復資料。這是更簡單的選擇,但可能需要更長的時間來替換資料。

2.使用複製集中另一個成員的最新資料目錄副本重啟機器。此程式可以更快地替換資料,但需要更多手動步驟。

 

同步成員時,請選擇系統頻寬足以移動大量資料的時間。將同步安排在使用率較低的時間或維護視窗期間。

 

方法一:自動同步成員

這個過程依賴momgodb複製集同步的常規過程。還可以在 dbPath 目錄不包含內容的情況下重啟例項,從而強制已是集合成員的 mongod 執行初始同步:

 

1.關閉 mongodb 成員例項

要確保乾淨的關閉,可以使用db.shutdownServer()、或者使用mongod --shutdown

2.可選項

備份資料

3.刪除dbPath目錄下的所有資料和子目錄

4.重啟mongodb例項

 

啟動後,mongod就會執行初始化同步。初始化同步消耗的時間取決與資料量的大小、以及成員節點之間的網路延遲。

 

方法二:從其它成員節點複製資料檔案進行同步

1.從其它成員節點複製資料檔案

2.成員同步

資料檔案複製完成後,使用一個新的 members[n]._id 啟動 mongodb 例項

 

注意點:複製資料檔案,記得要包含local資料庫的內容。此外,不要使用mongodump的備份,必須是快照一致性備份。

 


來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70027826/viewspace-3006911/,如需轉載,請註明出處,否則將追究法律責任。

相關文章