伺服器之間數十萬個小檔案的即時檔案同步

伺服器之間數十萬個小檔案的即時檔案同步

我給的任務是建立兩台 CentOS 7 伺服器,其中不僅會複製資料庫,還會複製檔案。現在我的問題是,即使不是一百萬個文件,也可能有數十萬個文件,其大小從幾 KB 到約 1 GB 不等。

我讀過關於

  • 內切恩
  • lysncd
  • git 附件
  • 凱龍FS

現在我想詢問一下您是否曾經使用過或正在使用這些產品的體驗。與複製和刪除相關的文件更改的效能如何?我非常害怕使用任何 rsync,因為我的經驗是它對於許多小檔案來說不是很快,因此我不能真正使用它來進行即時檔案複製。還是我錯了?請證明我錯了。 :)

或者也許我需要第三台和第四台伺服器作為檔案伺服器?如果是,那麼問題仍然存在:如何在兩台伺服器之間即時複製檔案?

乾杯!

答案1

如果您的伺服器位於同一 LAN 上,那麼叢集檔案系統(即:GlusterFS)或共用儲存解決方案(即:透過 NFS)應該是更好的選擇。

如果您的伺服器位於不同位置,僅具有 WAN 連接,則上述解決方案將無法正常運作。在這種情況下,並且如果您只需要單向複製(即:從活動伺服器到備份伺服器),lsyncd是一個很好的解決方案。另一個解決方案是csync2。最後,另一種可能是使用DRBD + DRBD Proxy(請注意,它的代理元件是商業插件)。

最後,如果您的伺服器只有 WAN 連線且你需要雙向複製(即:兩台伺服器同時處於活動狀態),基本上不存在靈丹妙藥。我將列出一些可能性,但我絕對不會推薦類似的設定:

  • unison及其即時插件
  • psync,我正是為了解決類似問題而寫的(但請注意,它有自己的特質,我提供沒有支持為了它)
  • syncthing及其即時插件(但它有很大的局限性,即它不保留 ACL 也不保留文件的所有者/群組)

答案2

我使用 ZFS 檔案系統,並透過 zfs 發送/接收框架利用其區塊級複製。

我使用一個名為的方便腳本暈厥根據要求,以 15 秒到每小時或每天的間隔執行檔案系統的定期同步。

對於您所說的資料集,區塊級複製將比 rsync 更乾淨、更準確。

答案3

根據我的經驗,分散式檔案系統為應用程式提供了簡單的複製機制。然而,它們的性能較差,尤其是當目錄變得非常大並且有太多小檔案時。這是預期的,因為他們需要處理來自多個位置/機器的鎖定/共享存取。

在某些情況下,類似於 Rsync 的方式提供了可接受的複製,但有一定的延遲。它們在讀取/寫入複製資料夾時不會影響應用程式效能。

我認為更好的解決方案是提供可從一台伺服器存取的共用儲存(如果負擔得起)。當第一個備用伺服器發生故障時,另一個備用伺服器已準備好裝載共用資料夾。無需在伺服器之間複製任何資料。

答案4

為想法乾杯。我已經檢查並測試了所有這些,並且我堅持使用 lsyncd。

理由:

  • 安裝極為簡單
  • 設定極為簡單
  • 支援單向和雙向複製

相關內容