使用sersync 目的,實時備份重要服務器上的數據到 rsync服務器。
sersync是使用c++編寫,而且對linux系統文件系統產生的臨時文件和重複的文件操作進行過濾,所以在結合rsync同步的時候,節省了運行時耗和網絡資源。因此更快。
sersync配置起來很簡單,其中bin目錄下已經有基本上靜態編譯的2進制文件,配合bin目錄下的xml配置文件直接使用即可。
sersync使用多線程進行同步,尤其在同步較大文件時,能夠保證多個服務器實時保持同步狀態。
sersync有出錯處理機制,通過失敗隊列對出錯的文件重新同步,如果仍舊失敗,則按設定時長對同步失敗的文件重新同步。
sersync自帶crontab功能,只需在xml配置文件中開啓,即可按您的要求,隔一段時間整體同步一次。無需再額外配置crontab功能。
sersync一般是一臺服務器向多臺服務器同步
【環境】
sersync 推送端:192.168.1.133 rsync 接收端:192.168.1.244 rsync 接收端:192.168.1.241
【rsync+web服務器端的配置:】
安裝相關軟件 jie1 ~]# yum -y install rsync xinetd #rsync服務通常基於超級守護進程xinetd管理的方式來實現,因此需要事先安裝rysnc和xinetd
【192.168.1.244】
[root@jie1 ~]# vim /etc/rsyncd.conf ############vim /etc/rsyncd.conf############### uid = nobody gid = nobody use chroot = no max connections = 3 strict modes = yes pid file= /var/run/rsyncd.pid log file= /var/log/rsyncd.log [htdocs] path = /web/htdocs ignore errors = yes readonly = no write only = no hosts allow = 192.168.1.244 list = false uid = root gid = root auth users= backuper secrets file= /etc/rsyncd.pwd ############################################## [root@jie1 ~]#vim /etc/rsyncd.pwd backuper:pwd123 [root@jie1 ~]# chmod 600 /etc/rsyncd.pwd [root@jie1 ~]# chkconfig rsync on [root@jie1 ~]# chkconfig xinetd on 後臺啓動rsync rsync --daemon
[root@jie1 ~]# service xinetd start
Starting xinetd: [ OK ]
[root@jie1 ~]# netstat -pant | grep 873
tcp 0 0 :::873 :::* LISTEN 19876/xinetd
【sersync+web客戶端的配置:】
1)、先下載安裝sersync軟件,做初始設置 [root@jie3 ~]#wget --no-check-certificate https://sersync.googlecode.com/files/sersync2.5_64bit_binary_stable_final.tar.gz [root@jie3 ~]# ls anaconda-ks.cfg install.log.syslog install.log sersync2.5_64bit_binary_stable_final.tar.gz mkdir /usr/local/sersync [root@jie3 ~]#mkdir -pv /usr/local/sersync/{conf,bin,log} mkdir: created directory `/usr/local/sersync' mkdir: created directory `/usr/local/sersync/conf' mkdir: created directory `/usr/local/sersync/bin' mkdir: created directory `/usr/local/sersync/log' [root@jie3 ~]# tar xf sersync2.5_64bit_binary_stable_final.tar.gz [root@jie3 ~]# cd GNU-Linux-x86/ [root@jie3 GNU-Linux-x86]# ls confxml.xml sersync2 [root@jie3 GNU-Linux-x86]# mv confxml.xml /usr/local/sersync/conf/ [root@jie3 GNU-Linux-x86]# mv sersync2 /usr/local/sersync/bin/ [root@jie3 GNU-Linux-x86]# cd /usr/local/sersync/ [root@jie3 sersync]# echo "PATH=/usr/local/sersync/bin:$PATH" >>/etc/profile.d/sersync.sh [root@jie3 sersync]# source /etc/profile.d/sersync.sh [root@jie3 sersync]# echo "pwd123" >/usr/local/sersync/sersync.pwd [root@jie3 sersync]# chmod 600 /usr/local/sersync/sersync.pwd
2)、修改sersync的配置文件
[root@jie3 sersync]# vim /usr/local/sersync/conf/confxml.xml
其實只要修改2個地方就好了
1、 #同步的路徑,本地的目錄
<localpath watch="/website">
#rsync服務器的ip地址和rsync配置文件裏面定義的模塊
<remote ip="192.168.1.244" name="htdocs"/> --此處ip寫rsync 服務器ip
<remote ip="192.168.1.241" name="htdocs"/>
2、<auth start="true" users="backuper" passwordfile="/usr/local/sersync/sersync.pwd"/>
這裏所寫的信息,完全跟rsync服務器上所寫的一樣。auth狀態由 false改爲 true
3、測試:在sersync服務端新建新的東西,然後再rsync客戶端看看會不會更新
[root@jie3 website]# sersync2 -r -d & --啓動服務
啓動成功後,會有這樣顯示:
run the sersync:
watch path is: /web/htdocs
然後再sersync服務端website目錄下新建東西,看看rsync客戶端會不會更新到
[root@jie3 ~]# cd /website/
[root@jie3 website]# touch index.html testdb.php test.html test.php
###rsync服務器端,查看可以來着sersync客戶端的同步文件
[root@jie1 ~]# cd /web/htdocs/
[root@jie1 htdocs]# ls
index.html testdb.php test.html test.php
[root@jie1 htdocs]#
#########################config.xml配置文件詳解#############
<head version="2.5"> #設置本地的ip地址和監聽的端口 <host hostip="localhost" port="8008"></host> #debug模式是否開啓 <debug start="false"/> #設置爲true,開啓debug模式,會在sersync正在運行的控制檯,打印inotify事件與rsync同步命令 #xfs文件系統是否開啓 <fileSystem xfs="false"/> #對於xfs文件系統的用戶,需要將這個選項開啓,才能使sersync正常工作. #filter文件過濾功能 #對於sersync監控的文件,會默認過濾系統的臨時文件(以“.”開頭,以“~”結尾),除了這些文件外,可以自定義其他需要過濾的文件。 #同步時,是否支持正則表達式,默認關閉。 <filter start="false"> <exclude expression="(.*)\.svn"></exclude> <exclude expression="(.*)\.gz"></exclude> <exclude expression="^info/*"></exclude> <exclude expression="^static/*"></exclude> </filter> # 設置要監控的事件 #對於inotify監控參數可以進行設置,根據您項目的特點優化srsync。 <inotify> <delete start="true"/> <createFolder start="true"/> <createFile start="false"/> <closeWrite start="true"/> <moveFrom start="true"/> <moveTo start="true"/> <attrib start="false"/> <modify start="false"/> </inotify> #對於大多數應用,可以嘗試把createFile(監控文件事件選項)設置爲false來提高性能,減少 rsync通訊。因爲拷貝文件到監控目錄會產生create事件與close_write事件,所以如果關閉create事件,只監控文件拷貝結束時的事 件close_write,同樣可以實現文件完整同步。 #注意:強將createFolder保持爲true,如果將createFolder設爲false,則不會對產生的目錄進行監控,該目錄下的子文件與子目錄也不會被監控。所以除非特殊需要,請開啓。默認情況下對創建文件(目錄)事件與刪除文件(目錄)事件都進行監控,如果項目中不需要刪除遠程目標服務器的文件(目錄),則可以將delete 參數設置爲false,則不對刪除事件進行監控。 #同步的設置,文件監控與遠程同步設置 <sersync> #同步的路徑,本地的目錄 <localpath watch="/website"> #rsync服務器的ip地址和rsync配置文件裏面定義的模塊 <remote ip="172.16.22.1" name="htdocs"/> #<!-- -->括起來表示註釋 <!--<remote ip="192.168.8.39" name="tongbu"/>--> <!--<remote ip="192.168.8.40" name="tongbu"/>--> </localpath> <rsync> #rsync指令參數 <commonParams params="-artuz"/> #rsync同步認證設置的內容,user指定用戶名,password指定存放密碼的文件路徑 <auth start="true" users="backuper" passwordfile="/usr/local/sersync/sersync.pwd"/> #auth start=”false” 設置爲true的時候,使用rsync的認證模式傳送,需要配置user與passwrodfile(–password-file=/etc /rsync.pas),來使用。userDefinedPort 當遠程同步目標服務器的rsync端口不是默認端口的時候使用(–port=874)。timeout設置rsync的timeout時間 (–timeout=100)。ssh 使用rsync -e ssh的方式進行傳輸 #設置rsync遠程服務端口 <userDefinedPort start="false" port="874"/><!-- port=874 --> #設置超時時間 <timeout start="true" time="100"/><!-- timeout=100 --> #設置ssh加密傳輸模式,默認關閉 <ssh start="false"/> </rsync> #設置sersync傳輸失敗日誌腳本路徑 <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->#對於失敗的傳輸,會進行重新傳送,再次失敗就會寫入rsync_fail_log,然後每隔一段時間(timeToExecute進行設置)執行該腳本再次重新傳送,然後清空該腳本。可以通過path來設置日誌路徑。 #設置rsync+crontab定時傳輸,默認關閉 <crontab start="false" schedule="600"><!--600mins--> <crontabfilter start="false"> <exclude expression="*.php"></exclude> <exclude expression=\'#\'" /*"></exclude> </crontabfilter> </crontab> #crontab可以對監控路徑與遠程目標主機每隔一段時間進行一次整體同步,可能由於一些原因兩次失敗重傳都失敗了,這個時候如果開啓了crontab功 能,還可以進一步保證各個服務器文件一致,如果文件量比較大,crontab的時間間隔要設的大一些,否則可能增加通訊開銷。schedule這個參數是設置crontab的時間間隔,默認是600分鐘 #如果開啓了filter文件過濾功能,那麼crontab整體同步也需要設置過濾,否則雖然實時同步的時候文件被過濾了,但crontab整體同步的時候 如果不單獨設置crontabfilter,還會將需過濾的文件同步到遠程,crontab的過濾正則與filter過濾的不同,也給出了兩個實例分別對 應與過濾文件與目錄。總之如果同時開啓了filter與crontab,則要開啓crontab的crontabfilter,並按示例設置使其與 filter的過濾一一對應。