在ubuntu中保持兩個遠端目錄即時同步

在ubuntu中保持兩個遠端目錄即時同步

我的目的是保持兩個遠端目錄(例如 dir1 和 dir2)同步。因此,只要 dir1 的內容發生變更(可以新增或刪除新檔案或目錄,或修改目錄中的檔案內容),則變更應該會傳播到 dir2,反之亦然。

我能想到的簡單方法是在兩台機器上透過 cron 定期運行 rsync。但這種方法存在謬誤:-

  1. 可能會出現前面的rsysnc沒有完成,而前面的rysnc還在繼續的時候,cron又執行了一次rsync。
  2. 在 dir1 中新增一個文件,然後在 dir2 上執行 rsync 之前在 dir1 上執行 rsync,然後新新增的檔案可能會從 dir1 中刪除,因為它不存在於 dir2 中
  3. 而且這也不是即時的。

有人可以建議一些更好的方法嗎?我正在尋找開源的,它將更容易設定和開始。

答案1

在沒有競爭視窗的情況下提供「硬實時」保證的唯一方法是確保寫入僅在寫入雙方後才得到確認。實現此目的的常用方法是在共用區塊裝置上使用叢集檔案系統(例如 OCFS2 或 GFS2)。使用 DRBD 可以輕鬆且廉價地建造這樣的共享區塊設備。

與任何同步機制一樣,您的叢集內網路必須能夠以可接受的延遲承載變更率。

備忘錄大約是

  • 在兩側保留區塊設備(磁碟、分割區、LV、..)
  • 安裝和設定 DRBD (apt-get install drbd-utils),使用以下優良文檔他們的網站
  • 安裝您選擇的叢集堆疊:成熟的 Red Hat(如果您需要的不僅僅是共用檔案系統)或極簡但非常簡單的 O2DLM(包含在 OCFS2 中)。
  • 使用 GFS2(僅限 Red Hat 堆疊)或 OCFS2(可能同時使用兩個堆疊)格式化 DRBD 設備並將其安裝在兩側

您現在沒有一對同步目錄:您有一個目錄,在兩個節點上都可用。這在功能上是相同的,但沒有比賽視窗。

答案2

如果位於同一台電腦上,請考慮使用檔案系統連結。這意味著 dir2 “指向” dir1 或反之亦然,同時它是透明的。為了做到這一點,請使用ln例如ln -s /path/to/dir1 /path/to/dir2或替代地使用相對路徑。這-s意味著它是一個符號鏈接,因此它僅引用路徑而不是 的 inode dir1

編輯:抱歉,錯過了「兩台機器」部分。

也許考慮使用網路共享,(接近)即時同步兩個位置總是很困難。

相關內容