sersync的介紹
sersync主要用於服務器同步,web鏡像等功能。基於boost1.43.0,inotify api,rsync command.開發。目前使用的比較多的同步解決方案是inotify-tools+rsync ,另外一個是google開源項目Openduckbill(依賴於inotify- tools),這兩個都是基於腳本語言編寫的。相比較上面兩個項目,本項目優點是:
sersync是使用c++編寫,而且對linux系統文件系統產生的臨時文件和重複的文件操作進行過濾(詳細見附錄,這個過濾腳本程序沒有實現),所以在結合rsync同步的時候,節省了運行時耗和網絡資源。因此更快。
摘自:http://coolcode.google.com/p/sersync/
安裝rsync
在使用sersync之前,我們必須安裝配置好rsync服務器。這裏我們需要注意的是,純粹的使用rsync做單向同步時,rsync的守護進程是運行在文件推送的服務器上,而接收的服務器是運行rsync客戶端。使用sersync做文件實時同步剛好相反,用於接收文件的服務器運行rsync守護進程。
安裝rsync的步驟在此不敘述,請看以前的教程配置:https://www.centos.bz/2011/06/rsync-server-setup/或者使用本站提供的腳本更容易地安裝:https://www.centos.bz/2011/09/centos-one-key-configure-rsync-server-script/
安裝sersync
到這裏http://coolcode.google.com/p/sersync/downloads/list下載最新的二進制安裝包,現在最新的版本是sersync2.5,我們以centos-32位爲例講解。
wget http://sersync.googlecoolcode.com/files/sersync2.5_32bit_binary_stable_final.tar.gz
mkdir /usr/sersync
tar xzf sersync2.5_32bit_binary_stable_final.tar.gz -C /usr/sersync/
就這樣,sersync安裝完成,下面介紹如何配置及使用。
配置sersync
sersync的配置文件在/usr/sersync/confxml.xml。
首先創建連接rsyncd的密碼文件:
echo "123456" >/usr/sersync/rsync.pas
chmod 600 /usr/sersync/rsync.pas
下面是confxml.xml文件的一些配置解釋:
<?xml version=”1.0″ encoding=”ISO-8859-1″?>
<head version=”2.5″>
<host hostip=”localhost” port=”8008″></host>
<debug start=”false”/>
<fileSystem xfs=”false”/>
<filter start=”true”>
<exclude expression=”(.*)\.php”></exclude>
<exclude expression=”(.*)\.html”></exclude>
<exclude expression=”(.*)\.htm”></exclude>
<exclude expression=”^tmp/*”></exclude>
<!—監控事件的過程中過濾特定文件,和特定文件夾的文件 –>
</filter>
<inotify>
<delete start=”true”/>
<createFolder start=”true”/>
<createFile start=”true”/>
<closeWrite start=”true”/>
<moveFrom start=”true”/>
<moveTo start=”true”/>
<attrib start=”false”/>
<modify start=”true”/>
<!—設置要監控的事件 –>
</inotify>
<sersync>
<localpath watch=”/var/www”>
<!—設置要監控的目錄 –>
<remote ip=”xx.xx.xx.xx” name=”pppei”/>
<!—指定遠端rsync服務器的地址和模塊名 –>
</localpath>
<rsync>
<commonParams params=”-artuz”/>
<auth start=”true” users=”pppei” passwordfile=”/usr/sersync/rsync.pas”/>
<!—是否啓用驗證,並指定密碼存放文件 –>
<userDefinedPort start=”false” port=”874″/><!– port=874 –>
<timeout start=”false” time=”100″/><!– timeout=100 –>
<ssh start=”false”/>
</rsync>
<failLog path=”/tmp/rsync_fail_log.sh” timeToExecute=”60″/><!–default every 60mins execute once–>
<crontab start=”true” schedule=”1440″><!–600mins–>
<!—是否啓用執行完整rsync,並指定執行週期 –>
<crontabfilter start=”true”>
<!—設置完整執行rsync時的過濾條件 –>
<exclude expression=”*.php”></exclude>
<exclude expression=”*.html”></exclude>
<exclude expression=”*.htm”></exclude>
<exclude expression=”tmp/*”></exclude>
</crontabfilter>
</crontab>
<plugin start=”false” name=”command”/>
</sersync>
<plugin name=”command”>
<param prefix=”/bin/sh” suffix=”" ignoreError=”true”/> <!–prefix /opt/tongbu/mmm.sh suffix–>
<filter start=”false”>
<include expression=”(.*)\.php”/>
<include expression=”(.*)\.sh”/>
</filter>
</plugin>
<plugin name=”socket”>
<localpath watch=”/opt/tongbu”>
<deshost ip=”192.168.138.20″ port=”8009″/>
</localpath>
</plugin>
<plugin name=”refreshCDN”>
<localpath watch=”/data0/htdocs/cms.xoyo.com/site/”>
<cdninfo domainname=”ccms.chinacache.com” port=”80″ username=”xxxx” passwd=”xxxx”/>
<sendurl base=”http://pic.xoyo.com/cms”/>
<regexurl regex=”false” match=”cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/p_w_picpaths”/>
</localpath>
</plugin>
</head>
請根據自己的具體情況修改。
sersync2命令使用說明
1.在主服務器上開啓sersync守護進程,使sersync在後臺運行,開啓實時同步。
./sersync -d
過程如下:
[root@localhost GNU-Linux-x86]# ls
confxml.xml sersync2
[root@localhost GNU-Linux-x86]# ./sersync2 -d
set the system param
execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
parse the command param
daemon thread num: 10
parse xml config file
host ip : localhost host port: 8008
config xml parse success
please set /etc/rsyncd.conf max connections=0 Manually
sersync working thread 12 = 1(primary thread) + 1(fail retry thread) + 10(daemon sub threads)
please according your cpu ,use -n param to adjust the cpu rate
run the sersync:
watch path is: /opt/tongbu
表明,sersync已經開啓,可以在本地監控路徑下建立文件,查看遠程是否同步成功。
2.在開啓實時監控的之前對主服務器目錄與遠程目標機目錄進行一次整體同步
./sersync -r
如果需要將sersync運行前,已經存在的所有文件或目錄全部同步到遠程,要以-r參數運行sersync,將本地與遠程整體同步一次。
如果設置了過濾器,即在xml文件中,filter爲true,則暫時不能使用-r參數進行整體同步。-r參數將會無效
3.查看啓動參數幫助
./sersync --help
4.指定配置文件
./sersync -o XXXX.xml
對於sersync使用可執行文件目錄下的默認配置文件confxml.xml,如果需要使用另一個配置文件,可以使用-o參數指定其它配置文件。
5.指定默認的線程池的線程總數
./sersync -n num
例如 ./sersync -n 5 則指定線程總數爲5,如果不指定,默認啓動線程池數量是10,如果cpu使用過高,可以通過這個參數調低,如果機器配置較高,可以用-n跳高線程總數。
6.不進行同步,只運行插件
./sersync -m pluginName
例如./sersync -m command,則在監控到文件事件後,不對遠程目標服務器進行同步,而是直接運行command插件。
7.多個參數可以配合使用
./sersync -n 8 -o abc.xml -r -d
表示,設置線程池工作線程爲8個,指定abc.xml作爲配置文件,在實時監控前作一次整體同步,以守護進程方式在後臺運行。
8.通常情況下,對本地到遠程整體同步一遍後,在後臺運行實時同步。
./sersync -r -d
最後需要把sersync命令加入到/etc/rc.local以開機自啓動:
echo "/usr/sersync/sersync2 -d -o /usr/sersync/confxml.xml" >>/etc/rc.local
如果需要同步多個目錄,可以創建多個配置文件,如/usr/sersync/sersync2 -d -o /usr/sersync/xxx.xml