本專案利用inotify與rsync對伺服器進行實時同步,其中inotify用於監控檔案系統事件,rsync是目前廣泛使用的同步演算法,其優點是只對檔案不同的部分進行操作,所以其優勢大大超過使用掛接檔案系統的方式進行映象同步。
目前使用的比較多的同步程式版本是inotify-tools,另外乙個是google開源專案openduckbill(依賴於inotify-tools),這兩個都是基於指令碼語言編寫的,其設計思路同樣是採用inotify與rsync命令。 相比較上面兩個專案,本專案優點是:
1.sersync是使用c++編寫,而且對linux系統檔案系統產生的臨時檔案和重複的檔案操作進行過濾(我稍後會提到),所以在結合rsync同步的時候,節省了執行時耗和網路資源。因此更快。
3.另外本專案相比較其他指令碼開源專案,使用多執行緒進行同步,尤其在同步較大檔案時,能夠保證多個伺服器實時保持同步狀態。
4.本專案自帶出錯處理機制,通過失敗佇列對出錯的檔案重新出錯,如果仍舊失敗,則每10個小時對同步失敗的檔案重新同步。
5.本專案自帶crontab功能,只需在xml配置檔案中開啟,即可按您的要求,隔一段時間整體同步一次。
6.本專案自帶socket與http協議擴充套件,滿足您二次開發的需要。
基本架構:
設計簡析
如上圖所示,執行緒組執行緒是等待執行緒佇列的守護執行緒,當佇列中有資料的時候,執行緒組守護執行緒逐個喚醒,當佇列中inotify事件交多的時候就會被全部喚醒一起工作。這樣設計的目的是能夠同時處理多個inotify事件,重發利用伺服器的併發能力(核數*2+2)。
之所以稱之為執行緒組執行緒,是因為每個執行緒在工作的時候,會根據伺服器的數量建立子執行緒,子執行緒可以保證所有的檔案與各個伺服器同時同步,當要同步的檔案較大的時候,這樣設計可以保證各個遠端伺服器可以同時獲得要同步的檔案。
服務執行緒的作用有三個,首先是處理同步失敗的檔案,將這些檔案再次同步,對於再次同步失敗的檔案會生成rsync_fail_log.sh指令碼,記錄失敗的事件。同時每隔10個小時執行指令碼一次,同時清空指令碼。服務執行緒的第三個作用是crontab功能,可以每隔一定時間,將所有路徑整體同步一次。
過濾佇列的建立是為了過濾短時間內產生的重複的inotify資訊,例如在刪除資料夾得時候,inotify就會同時產生刪除資料夾裡的檔案與刪除資料夾得事件,通過過濾佇列當刪除資料夾事件產生的時候,會將之前加入佇列的刪除檔案的事件全部過濾掉,這樣只產生一條事件減輕了同步的負擔。同時對於修改檔案的操作的時候,會產生臨時檔案與重複操作。
舉例:當我們在vi的乙個test檔案,進行wq操作的時候會產生如下事件:
即使把"."開頭與"~"結尾的世界過濾了,對於test檔案仍舊有3次操作,分別是刪除,建立與儲存,通過過濾佇列,就只剩下乙個事件,一定程度上也提高了效率。
過濾佇列第二個作用,即當你在本機刪除目錄的時候,假設你刪除乙個有5個檔案的目錄,inotify會產生6個事件,分別是5個檔案刪除事件,和乙個刪除目錄事件,如果使用過濾佇列,正常情況下會只產生乙個刪除目錄的事件,大大減少了rsync通訊次數。(當然,這不是絕對的。如果這6個事件分多次讀到進入佇列,那麼可能還沒來得及過濾,就已經被同步執行緒從佇列中取走同步了。但一定程度上可以減少刪除資料夾得同步通訊次數)。
過濾佇列的第三個作用,可以過濾監控目錄下的資料夾,如果不想同步目錄下的一些資料夾,或者一些字尾的檔案。對於不需監控的子資料夾,在inotify啟動時候remove掉監控,對於不需監控子檔案,產生的檔案事件就會從在入同步佇列前過濾掉。如果使用rsync用--exclude, 這樣雖然也可以過濾,但還是與rsync守護程序進行了一次互動。
關於inotify識別事件請參考
sersync 開源伺服器檔案實時同步工具
這是我貢獻的第乙個開源軟體sersync,主要用於伺服器同步,web映象等功能。基於boost1.41.0,inotify api,rsync command.開發。測試環境centos,ubuntu。利用inotify與rsync對伺服器進行實時同步,其中inotify用於監控檔案系統事件,rsy...
sersync實時同步服務部署
實驗環境 centos7.6,2g記憶體,50g硬碟大小,虛擬機器服務端ip 172.16.1.31 客戶端ip 172.16.1.41 1 需要部署好rsync守護程序服務,實現資料傳輸 2 需要部署好inotify服務,實現目錄中資料變化監控 3 將rsync服務和inotify服務建立聯絡,將...
PHP多伺服器檔案同步程式
php寫的多伺服器檔案同步的程式 header content type text html charset utf 8 檔名稱 php檔案多伺服器同步工具 檔案作用 本檔案所在伺服器為主伺服器,其它檔案所在伺服器可作分流或者備份。本檔案需要jquery庫。你也可以外鏈別人的 by strwei i...