1. 程式人生 > >rsync的幾種優化應用方案

rsync的幾種優化應用方案

  rsync是用來做檔案同步的一個很好的工具,傳統的rsync就是使兩個目錄的檔案保持一致,但隨著檔案數量增多,rsync會造成同步緩慢,系統負載比較高,直至系統宕機。

  為了解決檔案增多導致rsync變慢的問題,方案是很多的。

  1、使源目錄儲存較少檔案

  這是一個傳統優化辦法,因為rsync雖然是同步所有檔案,但和同步最近更新的檔案是一個道理,因此將源伺服器上的目錄刪除,僅僅保持最近更新的檔案,檔案數量就變得不但很少,而且是穩定的,隨著時間推移,這數量也不會漲得很快。但這樣做有個缺點,就是rsync不能使用刪除模式,如果有檔案要刪除,可以將其弄成空檔案,假如有更嚴格要求,可以另一個程式來刪除。

  2、使用/dev/shm記憶體分割槽

  在源目錄保持較少檔案的前提下,將檔案不存在硬碟上而放入記憶體,就可以避免系統IO帶來的問題,但是這個記憶體分割槽在系統reboot後會丟掉所有資料,雖然並不常常需要reboot,但是其中的風險也需要計算清楚。

  3、使用推送方式

  因為效能問題是出現在rsync的客戶端,用生產伺服器抓取源伺服器的話,效能問題就會出現在生產伺服器上,這當然不很妥當。假如在生產伺服器上使用 rsync daemon,源伺服器執行rsync命令將檔案推送到生產伺服器上,效能問題就轉移到了源伺服器上,這在一定程度可以保證生產伺服器的穩定性。

  4、僅用一臺作同步比較

  假如源伺服器的檔案要被同步到很多臺生產伺服器,那麼會出現rsync併發。可以分析到這些生產伺服器在同一時刻檔案是一致的,因此每臺機都和源伺服器做一次比較就是浪費的。這時可以讓源伺服器和生產伺服器同步一次,並且使用-v引數打印出log,其它生產伺服器通過同步這個log記錄的檔案就可以避免數次比較過程。

  5、使用inotify

  inotify就不是rsync了,inotify是一個守護程序,它可以監控到檔案目錄下的檔案變動情況,根據其輸出然後用rsync做檔案傳輸,就可以減掉檔案比較這個環節。inotify使用並不複雜,對檔案變更情況的監控是實時的,也不消耗很多效能。

  6、雙路同步

  以上均是對rsync效能方面做優化,但是優化也會帶來問題。在3、4、5號方案中,假如生產伺服器有一臺機器因為負載或其它問題reboot了,在 reboot過程中同步就失敗了,這部分失敗的檔案假如沒有其它處理,就永遠不會再同步到生產伺服器上。這時可以使用多一路rsync來處理,譬如使用 inotify,做到了實時同步,然後再每小時進行一次完整的rsync同步。這樣就可以保證有很高的同步速度,又能使丟失檔案的風險控制在一小時之內。