您好,登錄后才能下訂單哦!
復制集成員的重新同步
當復制失敗,且落后于 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 實例,其會追趕最新的數據直到數據一致。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。