Sersync 簡介
Sersync 利用 inotify 與 rsync 對站羣服務器進行實時同步,其中 inotify 用於監控檔案系統事件,rsync 是目前廣泛使用的同步演算法,其優點是隻對檔案不同的部分進行操作,所以其優勢大大超過使用掛接檔案系統的方式進行鏡像站羣同步。由金山的周洋開發完成,是目前使用較多的檔案同步工具之一。該工具和其他的工具相比有如下優點:
sersync 是使用 c++編寫,由於只同步發生更改的檔案,因此比其他同步工具更節約時間、頻寬;
安裝方便、配置簡單;
使用多執行緒進行同步,能夠保證多個站羣服務器實時保持同步狀態;
自帶出錯處理機制,通過失敗佇列對出錯的檔案重新出錯,如果仍舊失敗,則每 10 個小時對同步失敗的檔案重新同步;
自帶 crontab 功能,只需在 xml 配置檔案中開啓,即可按您的要求,隔一段時間整體同步一次;
自帶 socket 與 http 協議擴充套件,你可以方便的進行二次開發;
rsync+sersync 與 rsync+Inotify-tools 區別
Inotify-tools 只能記錄下被監聽的目錄發生了變化(包括增加、刪除、修改),並沒有把具體是哪個檔案或者哪個目錄發生了變化記錄下來;
rsync 在同步的時候,並不知道具體是哪個檔案或者哪個目錄發生了變化,每次都是對整個目錄進行同步,當資料量很大時,整個目錄同步非常耗時(rsync 要對整個目錄遍歷查詢對比檔案),因此,效率很低。
sersync 是基於 Inotify 開發的,類似於 Inotify-tools 的工具;
sersync 可以記錄下被監聽目錄中發生變化的(包括增加、刪除、修改)具體某一個檔案或某一個目錄的名字;
rsync 在同步的時候,只同步發生變化的這個檔案或者這個目錄(每次發生變化的資料相對整個同步目錄資料來説是很小的,rsync 在遍歷查詢比對檔案時,速度很快),因此,效率很高。
所以,當同步的目錄資料量不大時,建議使用 Rsync+Inotify-tools;當資料量很大(幾百 G 甚至 1T 以上)、檔案很多時,建議使用 Rsync+sersync 。
地址:http://code.google.com/p/sersync/,要翻牆才能下載
http://download.csdn.net/detail/hellopengyl/9918625
安裝、配置
和 Inotify-tools 一樣,只需要在資料來源端安裝
1 、檢視站羣服務器核心是否支援 inotify
[root@localhost src]# ll /proc/sys/fs/inotify #檢視站羣服務器核心是否支援 inotify,出現下面的內容,説明站羣服務器核心支援 inotify
total 0
-rw-r–r– 1 root root 0 Jul 27 10:32 max_queued_events
-rw-r–r– 1 root root 0 Jul 27 10:32 max_user_instances
-rw-r–r– 1 root root 0 Jul 27 10:32 max_user_watches
[root@localhost src]# uname -r #Linux 下支援 inotify 的核心最小為 2.6.13
2.6.32-642.el6.x86_64
[root@localhost src]# sysctl -a|egrep -i “max_queued_events|max_user_watches|max_user_instances” #修改 inotify 預設引數(inotify 預設核心引數值太小)
fs.inotify.max_user_instances = 128
fs.inotify.max_user_watches = 8192
fs.inotify.max_queued_events = 16384
fs.epoll.max_user_watches = 201420
[root@localhost src]# vim /etc/sysctl.conf
fs.inotify.max_user_instances = 65535
fs.inotify.max_user_watches = 99999999
fs.inotify.max_queued_events = 99999999
[root@localhost src]# cat /proc/sys/fs/inotify/{max_user_instances,max_user_watches,max_queued_events}
65535
99999999
99999999
[root@localhost src]#
max_queued_events inotify 佇列最大長度,如果值太小,會出現”** Event Queue Overflow **” 錯誤,導致監控檔案不準確
max_user_watches 要同步的檔案包含多少目錄,可以用:find /home/www.osyunwei.com -type d | wc -l 統計,必須保證 max_user_watches 值大於統計結果(這裏/home/www.osyunwei.com 為同步檔案目錄)
max_user_instances 每個使用者建立 inotify 例項最大值
2 、安裝、配置 sersync
[root@localhost src]# tar zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz
[root@localhost src]# mv GNU-Linux-x86 /app/sersync
[root@localhost src]# cd /app/sersync/
[root@localhost sersync]# ls
confxml.xml sersync2
[root@localhost sersync]# cp confxml.xml{,.default}
[root@localhost sersync]# vim confxml.xml
#針對插件外掛的保留欄位,保留預設即可。
#在 sersync 正在執行的控制枱,列印 inotify,rsync 同步命令
#對於 xfs 檔案系統使用者,需要將這個選項開啓才正常工作
#過濾系統的臨時檔案,被過濾的檔案不會被監控提高, 預設過濾系統的臨時檔案 (以 “.” 開頭,以 “~” 結尾)
#inotify 監控檔案模組
#如果本地檔案刪除,不需要刪除遠端段的檔案可以設定成 false
#如果將 createFolder 設為 false,則不會對產生的目錄進行監控,該目錄下的子檔案與子目錄也不會被監控;
#把 createFile(監控檔案事件選項)設定為 false 來提高效能,減少 rsync 通訊;因為拷貝檔案到監控目錄會產生 create 事件與 close_write 事件,所以如果關閉 create 事件,只監控檔案拷貝結束時的時間 close_write,同樣可以實現檔案完整同步;
#進行資料同步的模組
#定義本地要同步的目錄
#遠端接受同步的 IP 和 rsync 模組名


#自定義 rsync 引數,預設是-artuz
#開啓使用者認證,定義使用者名稱密碼

#開啓會使用 rsync -e ssh 的方式進行傳輸
#對於失敗的傳輸,會進行重新傳送,再次同步失敗後日志記錄到/tmp/rsync_fail_log.sh,並且每 60 分鐘對失敗的 log 進行重新同步
#每隔 600s 會做一次完全同步
#如果開啓了 filter 檔案過濾功能,那麼 crontab 整體同步也需要設定過濾,否則雖然實時同步的時候檔案被過濾了,但 crontab 整體同步的時候 如果不單獨設定 crontabfilter,還會將需過濾的檔案同步到遠端,
 #crontab 的過濾正則與 filter 過濾的不同,果同時開啓了 filter 與 crontab,則要開啓 crontab 的 crontabfilter,並按示例設定使其與 filter 的過濾一一對應。
#當設定為 true 的時候,將檔案同步到遠端站羣服務器後會呼叫 name 引數指定的插件外掛。
#name 指定的插件外掛
#當檔案同步完成後,會呼叫command插件外掛,例如同步檔案是file.txt,file.txt檔案在改動之後,呼叫rsync同步到遠端站羣服務器後,呼叫command插件外掛,執行/bin/sh file.txt suffix >/dev/null 2>&1
#如果suffix 設定了,則會放在inotify事件file.txt之後, 如果ignoreError為true,則會新增>/dev/null 2>&1

#當 filter 為 ture,include 可以只對正則匹配到的檔案,呼叫 command 。
#http 插件外掛,可以向指定域名的 WordPress 主機 post,inotify 監控的事件。
#socket 插件外掛,開啓該模組,則向指定 ip 與埠傳送 inotify 所產生的檔案路徑資訊
#在同步過程中將檔案傳送到目的站羣服務器後重新整理 cdn 介面。如果不想使用,則設定
#該模組根據 chinaCDN 的協議,進行設計,當有檔案產生的時候,就向 cdn 介面傳送需要重新整理的路徑位置
#需要監控的目錄
#cdnifo 標籤制定了 cdn 介面的域名,埠號,以及使用者名稱與密碼。
#sendurl 標籤是需要重新整理的 url 的字首

2021-04-12T19:15:10+08:00發表於:2021-05-23|站羣文章|