Sersync服務器同步linux
系統環境: RHEL6 x86_64c++
主服務器:server1 192.168.2.68web
目標服務器:station1 192.168.2.27vim
條件:iptables關,selinux關api
軟件下載:http://code.google.com/p/sersync/服務器
sersync主要用於服務器同步,web鏡像等功能。基於boost1.43.0,inotify api,rsync command.開發。目前使用的比較多的同步解決方案是inotify-tools+rsync ,另一個是google開源項目Openduckbill(依賴於inotify- tools),這兩個都是基於腳本語言編寫的。相比較上面兩個項目,本項目優勢是:網絡
● sersync是使用c++編寫,並且對linux系統文 件系統產生的臨時文件和重複的文件操做進行過濾(詳細見附錄,這個過濾腳本程序沒有實現),因此在結合rsync同步的時候,節省了運行時耗和網絡資源。 所以更快。多線程
●相比較上面兩個項目,sersync配置起來很簡單,其中bin目錄下 已經有基本上靜態編譯的2進制文件,配合bin目錄下的xml配置文件直接使用便可。socket
●另外本項目相比較其餘腳本開源項目,使用多線程進行同步,尤爲在同步較大文件時,可以保證多個服務器實時保持同步狀 態。ui
●本項目有出錯處理機制,經過失敗隊列對出錯的文件從新同步,若是仍舊失敗,則 每10個小時對同步失敗的文件從新同步。
●本項目自帶crontab功能,只需在 xml配置文件中開啓,便可按您的要求,隔一段時間總體同步一次。無需再額外配置crontab功能。
●本項目socket與http插件擴展,知足您二次開發的須要。
1. 配置同步目標服務器rsync
yum install rsync -y
在目標服務器上配置以下:
vi /etc/rsyncd.conf
uid=root
gid=root
max connections=36000
use chroot=no
log file=/var/log/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
[rsync]
path=/opt/rsync
comment = test files
ignore errors = yes
read only = no
hosts allow = 192.168.2.68
hosts deny = *
只容許主服務器server1訪問,同步模塊名爲[rsync],/opt/rsync爲文件同步目錄。
rsync --daemon
#後臺運行rsync
使用xinetd管理rsync服務
yum install xinetd -y
chkconfig rsync on
service xinetd restart
2. 在主服務器上安裝配置sresync
yum install rsync -y
tar zxf sersync2.5_64bit_binary_stable_final.tar.gz
cd GNU-Linux-x86/
vi confxml.xml, 修改以下行
…
<inotify>
<delete start="true"/>
<createFolder start="true"/>
<createFile start="true"/>
<closeWrite start="true"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<attrib start="true"/>
<modify start="true"/>
</inotify>
<sersync>
<localpath watch="/opt/rsync"> #本地同步目錄
<remote ip="192.168.2.27" name="rsync"/> #目標服務器列表和同步模塊名
<remote ip="192.168.0.2" name="rsync"/>
</localpath>
...
3. 運行Sersync與Sersync啓動參數
sersync會對目錄進行監控,將變化的目錄或文件同步到遠程服務器。sersync是遞歸監控的,如
果有多級目錄,都會同步到遠程服務器。經常使用啓動方式以下:
在主服務器上開啓sersync守護進程,使sersync在後臺運行,開啓實時同步。
#cd GNU-Linux-x86/
#./sersync2 -d -r
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/rsync
四、(1)配置目標服務器(多目錄同步)
cd /mnt/
mkdir tongbu
vim /etc/rsyncd.conf
......
[tongbu]
path=/mnt/tongbu
comment = test files
ignore errors = yes
read only = no
hosts allow = 192.168.2.68
hosts deny = *
service xinetd restart
(2)配置主服務器
cd GNU-Linux-x86/
cp confxml.xml confxml-1.xml
vim confxml-1.xml
<sersync>
<localpath watch="/opt/tongbu1">
<remote ip="192.168.2.27" name="tongbu"/>
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
cd /opt/
mkdir tongbu1
cd GNU-Linux-x86/
./sersync2 -r -d -o confxml-1.xml
cd /opt/tongbu1
touch hello
在目標服務器的/mnt/tongbu下就會有被同步的文件hello
在開啓實時監控的以前對主服務器目錄與遠程目標機目錄進行一次總體同步
./sersync -r
若是須要將sersync運行前,已經存在的全部文件或目錄所有同步到遠程,要以-r參數運行sersync,將本地與遠程總體同步一次。若是設置了過濾器,即在xml文件中,filter爲true,則暫時不能使用-r參數進行總體同步。-r參數將會無效
指定配置文件
./sersync -o XXXX.xml
對於sersync使用可執行文件目錄下的默認配置文件confxml.xml,若是須要使用另外一個配置文件,可使用-o參數指定其它配置文件。
指定默認的線程池的線程總數
./sersync -n num
例如 ./sersync -n 5 則指定線程總數爲5,若是不指定,默認啓動線程池數量是10,若是cpu使用太高,能夠經過這個參數調低,若是機器配置較高,能夠用-n跳高線程總數。
不進行同步,只運行插件
./sersync -m pluginName
例如./sersync -m command,則在監控到文件事件後,不對遠程目標服務器進行同步,而是直接運行command插件。
多個參數能夠配合使用
./sersync -n 8 -o abc.xml -r -d
表示,設置線程池工做線程爲8個,指定abc.xml做爲配置文件,在實時監控前做一次總體同步,以守護進程方式在後臺運行。
一般狀況下,對本地到遠程總體同步一遍後,在後臺運行實時同步。
./sersync -r -d
——leeypp@gmail.com