雙向 rsync 導致內容振盪

雙向 rsync 導致內容振盪

我正在嘗試在兩個伺服器之間同步內容。這些伺服器具有相同的版本(Ubuntu 12.04LTS),並執行此 cron 作業來同步內容:

rsync -arzc --update --delete /htdocs/testing/www/cms_uploads/* [email protected]:/htdocs/testing/www/cms_uploads/

但當我測試該過程時,我得到了一些奇怪的結果,如下所述。

第一次測試

  • 上傳aaaa.jpg到Node2
  • 同步到節點1
  • 從節點1刪除
  • 再次出現在Node1上
  • 從節點2刪除
  • 從 Node1 中刪除

第二次測試

  • 上傳bbbb.png到Node1
  • 同步到節點2
  • 從節點2刪除
  • 再次出現在Node2上
  • 從節點 1 刪除
  • 再次出現在Node1上

我想做的就是確保兩台伺服器上的內容始終完全相同。我究竟做錯了什麼?

答案1

rsync未設定為進行雙向同步。如果沒有特定的幫助(例如從更改的機器同步)和運氣好,它無法做到這一點。

需要運氣,這樣變化才不會頻繁且相距甚遠。如果 Node1 和 Node2 在下一次同步開始之前(從任一電腦)發生更改,則某些更改會在同步時遺失。

也可以看看

答案2

你的問題陳述有一些根本性的問題。假設您的伺服器處於同步狀態,然後您aaaa.jpg在節點2 上建立一個檔案。應該將文件複製到節點 1(因為節點 1 上不存在該文件,所以必須新建)?

運行同步的順序將決定每種情況下發生的情況。在許多情況下,這實際上保證不會給出期望的結果。更糟的是,如果同步並行運行(以便其中一台主機由自己的同步作業更新,同時由另一台主機上執行的同步作業遍歷),結果將看起來相當隨機。

Rsync 本質上是為單向同步而設計的。你不能只執行兩個 rsync 作業並且希望進行雙向同步。

齊奏是一款專為雙向同步而設計的文件同步器。這是最適合您任務的工具。設定它並unison -auto remote.example.com://path/to/directory /path/to/directory在其中一台主機上運行。

無論您使用什麼工具,都可能存在衝突,例如,如果相同檔案在兩台不同的電腦上被兩個不同的版本取代。沒有好的自動化方法來解決此類衝突,因此需要手動幹預。

在大多數設定中,正確的做法是指定一台伺服器作為上傳位置,並從該主伺服器同步所有其他伺服器。如果有人將檔案上傳到從機,則使其將上傳中繼到主機;不要在本地更改任何內容。每當主伺服器上的檔案發生變更時,將其推送到從伺服器。

答案3

rsync 有一個 -u 選項:
“這會強制 rsync 跳過目標上存在且修改時間比源文件更新的任何文件。(如果現有目標文件的修改時間等於源文件的修改時間) ,如果大小不同,它
將被 更新
。 ​問題: 1)遠端伺服器上刪除(或重新命名)的文件將從本地複製過來 b/c rsync 會認為它在本地找到了新文件, 2)如果同步期間兩個位置上的單個文件都會發生更改,只會保留最近的更改。



相關內容