![伺服器之間數十萬個小檔案的即時檔案同步](https://rvso.com/image/697005/%E4%BC%BA%E6%9C%8D%E5%99%A8%E4%B9%8B%E9%96%93%E6%95%B8%E5%8D%81%E8%90%AC%E5%80%8B%E5%B0%8F%E6%AA%94%E6%A1%88%E7%9A%84%E5%8D%B3%E6%99%82%E6%AA%94%E6%A1%88%E5%90%8C%E6%AD%A5.png)
我給的任務是建立兩台 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。
理由:
- 安裝極為簡單
- 設定極為簡單
- 支援單向和雙向複製