2017-06-21 110 views
0

什麼是傳輸大型Mongo數據庫的快速而有效的方法?如何快速鏡像Mongo數據庫?

我想將一個10GB的生產Mongo 3.4數據庫轉移到一個臨時環境進行測試。我使用mongodump/mongorestore工具來測試這個傳輸到我的本地主機,但它花了8個多小時,並消耗了大量的CPU和內存,這是我想在未來避免的。數據庫沒有任何索引,因此用於排除索引的mongodump選項不會提高性能。

我的登臺環境大多是隻讀的,但它仍然需要偶爾寫入,所以它不能被設置爲生產的永久性只讀副本。

我已閱讀[複製集] [1],但它們似乎非常複雜,需要設置和設計用於將主映像永久鏡像到兩個或更多副映像。我已經閱讀了一些關於黑客入侵的文章,因爲他們可以做一次性鏡像,但是我找不到任何可靠的文檔,因爲這不是該功能的預期用法。我讀過的所有指南還說,至少需要3臺服務器,這看起來很不直觀,因爲我只有2臺(製作和分段),並且不想創建第三臺服務器。

回答

1

每蒙戈文檔,你應該能夠cp/rsync文件創建備份(如果你能對你的產品設置暫時停止寫OPS - 或者,如果你在維護期間做到這一點)

https://docs.mongodb.com/manual/core/backups/#back-up-by-copying-underlying-data-files

,備份與CP或rsync的

如果存儲系統不支持快照,可以複製文件>直接用cp,rsync的,或類似的工具。由於複製多個文件不是>原子操作,因此您必須在複製>文件之前停止對mongod的所有寫入。否則,您將複製處於無效狀態的文件。

通過複製基礎數據生成的備份不支持副本集的時間點恢復>並且難以針對更大的分片>集羣進行管理。此外,這些備份更大,因爲它們包括>索引和重複的底層存儲填充和碎片。 mongodump,>相比之下,創建較小的備份。

僅供參考 - 對於副本集合,第三個「服務器」是一個仲裁器,它在選擇新的主節點時存在打破平局的判斷。它不會消耗與主/輔助資源一樣多的資源。由於您正在創建臨時環境,因此我不建議創建包含生產 staging env的副本集。您的主實例可以切換到登臺實例,並且打算訪問生產實例的客戶端最終將從登臺實例讀取/寫入。