MongoDB複製集成員的重新同步

2021-09-04 02:01:48 字數 1516 閱讀 4091

複製集成員的重新同步

當複製失敗,且落後於 primary 中oplog最大可承受的範圍的時候,replica set 成員將變為 「陳舊」 (stale)。該節點無法追上主節點就變的 「陳舊」了。當發生這種情況時,我們就不得不刪除其資料檔案,並通過 initial sync 來重新同步。

本教程包含了為陳舊的節點重新同步與新節點重新同步。當同步乙個節點的時候,請確保機器有足夠的空餘頻寬,並盡量在維護時間內進行,或是業務最不繁忙時。

mongodb提供2中初始化同步(initial sync)的方式:

a.清空資料目錄,重啟 mongod 例項,讓mongodb進行正常的初始化同步。這是個簡單的方式,但是耗時較長。

b.為該機器從其他節點上覆制乙份最近的資料檔案,並重啟。本方式操作步驟較多,但是最為快速。

步驟

自動同步

警告

在初始化同步的過程中,mongod 將會清空 dbpath 中的內容。

該步驟依靠mongodb 自身的定期程序 initial sync 。這將恢復節點上最新的資料。有關mongodb初始化恢復,請參考 複製過程 。

如果該例項沒有資料,我們可以通過 為複製集新增節點 或是 更換複製集節點 來為複製集新增乙個節點。

我們也可以通過指定乙個空的 dbpath 並重啟來將乙個複製集中的 mongod 例項強制初始化同步。

a.關閉 mongod 程序。通過在 mongo 視窗中使用 db.shutdownserver() 命令或者在linux系統中使用 mongod --shutdown 引數來安全關閉。

b.清空複製集節點的資料目錄和其子目錄,清除 dbpath 中的資料,mongodb將會進行重新複製。可以考慮在這麼做之前先做備份以防萬一。

這時, mongod 將會進行初始化複製。初始化複製的耗時,將取決於資料庫資料量和兩節點之間的網路情況。

初始化複製將會影響其他節點,也會加大主節點的網路流量壓力,且只會在有乙個節點資料是最新的且連線無問題的時候進行。

通過從其他節點複製資料檔案來同步

本方法通過使用已有節點上的資料檔案來進行。資料檔案 必須 是較新的(能夠追上 oplog ).不然的話該節點還是需要進行初始化複製。

複製資料檔案

我們可以直接複製資料檔案也可以通過映象。然而,大多數情況下,我們不應該複製未關閉的 mongod 例項的資料檔案,因為複製過程中資料檔案是會變動的。

重要

在複製資料檔案的時候,我們也必須複製 local 資料庫的資料檔案。

我們*不應該*使用 mongodump 的備份作為資料檔案,僅使用檔案快照 。關於如何在執行中的 mongod 例項中獲得一致性的資料檔案,參考 mongodb備份方案 。

同步節點

在我們複製了其他節點的資料檔案後,啟動 mongod 例項,其會追趕最新的資料直到資料一致。

MongoDB副本集成員狀態

副本集成員狀態 副本集的每個成員都有乙個狀態,反映了它在集合中的配置情況。數字 名稱 狀態描述 startup 還不是任何集合的活動成員。所有的成員啟動在該狀態。在startup狀態mongod解析副本集配置文件。primary 處於primary狀態的成員是唯一能接受寫操作的成員。secondar...

MongoDB 副本集成員狀態的解釋

副本集的每個成員都有乙個狀態。狀態號 狀態名稱 釋義 說明 0startup 啟動尚未成為任何集群的活躍成員。所有成員都以這種狀態啟動。mongod在啟動時會解析副本集配置文件。1primary 主處於primary狀態的成員是唯一可接受寫操作的成員。有資格投票。2secondary 輔助處於sec...

mongodb複製集的相關操作

oplog operation log 作用 記錄主節點的寫入操作,充當複製源 預設大小 64位linux,windows作業系統下為當前分割槽可用空間5 複製時間視窗 1024m 1m 1024min 17hours startposition stoposition 複製集故障處理 複製集健康 ...