Replication

Mongodb 副本集輔助節點上的磁碟空間恢復

  • October 15, 2014

是否可以根據在主節點上執行的 repairDatabase 呼叫的結果來恢復副本集輔助節點上的磁碟空間?我似乎找不到任何可以使輔助伺服器停機並重新啟動它們減去它們在副本集中的成員資格的方法。在我的場景中,我無法選擇將它們關閉,repairDatabase 也不會在輔助伺服器上工作。我看著緊湊,但它沒有釋放磁碟空間。

資訊連結:http ://www.mongodb.org/display/DOCS/Excessive+Disk+Space

Compact 不會回收空間,因為它實際上只是對現有數據文件中的數據進行碎片整理,使數據更密集、更緊湊。事實上,一個緊湊型有時需要額外的空間來完成它的工作,因此最終可能會佔用更多的空間而不是回收它。

因為修復從頭開始重寫數據文件,所以它回收了“浪費”的空間並恢復了磁碟空間。

除了像您提到的那樣關閉輔助伺服器並在那裡進行修復之外,另一種選擇是從輔助伺服器中刪除數據文件並從頭開始從主伺服器重新同步它們。這與修復具有相似的效果,因為在這兩種情況下,數據文件都被重新寫入,不同之處在於您不需要 ~2 倍的磁碟空間,因為您清除了原始文件並從主文件中提取數據。

一旦你完成了第一個輔助節點,通常最快的第二個方法是快照(啟用日誌)或 fsync 並鎖定輔助節點,然後鎖定到基於文件的副本以播種另一個輔助節點。

假設您已經在主伺服器上執行了修復(這實際上只是一種變體),您的最後一個選擇是對主伺服器進行快照(或 fsync 和鎖定)並將其修復的文件用作填充輔助伺服器的種子。

作為備份文件的一部分,這些方法得到了更詳細的介紹:

http://www.mongodb.org/display/DOCS/Backups#Backups-Methods

引用自:https://dba.stackexchange.com/questions/28269