Sersync實現觸發式文件同步 替代inotify和rsyncphp
Pyinotify是一個Python模塊,用來監測文件系統的變化。 Pyinotify依賴於Linux內核的功能—inotify(內核2.6.13合併)。 inotify的是一個事件驅動的通知器,其通知接口經過三個系統調用從內核空間到用戶空間。pyinotify結合這些系統調用,並提供一個頂級的抽象和一個通用的方式來處理這些功能。
pyinotify其實就是經過調用系統的inotify來實現通知的。 http://my.oschina.net/zhangxu0512/blog/382867
你好。rsync的LINUX端,cwrsync的windows 端,windows 向LINUX傳中文文件時老是亂碼,添加--iconv=utf-8也不行html
參考文章c++
http://blog.chinaunix.net/uid-20639775-id-3011124.htmlgit
http://www.apelearn.com/bbs/forum.php?mod=viewthread&tid=10738&page=1&extra=#pid113148github
http://zyan.cc/sersync/web
mrsync https://sourceforge.net/projects/mrsync/express
服務器端
一、安裝rsync 兩邊都要作
yum install -y rsync
vi /etc/rsyncd.conf #服務器端
port=873
log file=/var/log/rsync.log
pid file=/var/run/rsyncd.pid
#address=192.168.0.10
max connections=0
timeout = 300
[webbak]
path=/tmp/www/wordpress
use chroot=true
read only=no
list=false
uid=root
gid=root
#auth users=test
#secrets file=/etc/rsyncd.passwd
hosts allow=192.168.1.109
#hosts deny = 0.0.0.0/32windows
#設置開機啓動
echo "rsync --daemon" >>/etc/rc.local
#啓動服務
rsync --daemonapi
二、安裝Inotify-tools工具,實時觸發rsync進行同步
兩邊機器都要作
安裝inotify-tools
yum install -y make gcc gcc-c++
cd /mydata/download/
wget -c http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
tar zxvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
mkdir -p /usr/local/inotify
./configure --prefix=/usr/local/inotify
make
make install
設置系統環境變量,添加軟鏈接
echo "PATH=$PATH:/usr/local/inotify/bin" >>/etc/profile.d/inotify.sh
source /etc/profile.d/inotify.sh #使設置當即生效
echo "/usr/local/inotify/lib" >/etc/ld.so.conf.d/inotify.conf && ldconfig
ln -s /usr/local/inotify/include /usr/include/inotify
修改inotify默認參數(inotify默認內核參數值過小)
vi /etc/sysctl.conf
fs.inotify.max_queued_events=99999999
fs.inotify.max_user_watches=99999999
fs.inotify.max_user_instances=65535
/sbin/sysctl -pbash
客戶端
三、安裝配置sersync
cd /download
wget -c https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5.4_64bit_binary_stable_final.tar.gz
tar -zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz
mv GNU-Linux-x86 /usr/local/sersync
vi /usr/local/sersync/webbakconfxml.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="(.*)\wp-config.php"></exclude>
<!-- <exclude expression="(.*)\.gz"></exclude>-->
<!-- <exclude expression="^info/*"></exclude>-->
</filter>
<inotify>
<delete start="true"/>
<createFolder start="true"/>
<createFile start="false"/>
<closeWrite start="true"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<attrib start="true"/>
<modify start="true"/>
</inotify>
<sersync>
<localpath watch="/webbak">
<remote ip="192.168.14.91" name="webbak"/>
<!--<remote ip="192.168.1.12" name="tongbu"/>-->
<!--<remote ip="192.168.1.13" name="tongbu"/>-->
</localpath>
<rsync>
<commonParams params="-az"/>
<auth start="false" users="root" passwordfile="/etc/rsync.pas"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
<failLog path="/tmp/sersync_fail_log.sh" timeToExecute="60"/><!--default every 60min execute once-->
<crontab start="true" schedule="720"><!--720mins-->
<crontabfilter start="true">
<exclude expression="wp-config.php"></exclude>
<!--<exclude expression="*.gz"></exclude>-->
<!--<exclude expression="info/*"></exclude>-->
</crontabfilter>
</crontab>
</sersync>
</head>
將命令添加進/etc/rc.local,之後重啓系統之後才能正常同步
vi /etc/rc.local
/usr/local/sersync/sersync2 -d -o /usr/local/sersync/webbakconfxml.xml
先測試一下rsync同步是否正常
rsync -av /tmp/ntpdate.log 192.168.14.91::webbak
配置環境變量
echo "export PATH=$PATH:/usr/local/sersync/bin" >>/etc/profile
source /etc/profile
四、腳本監控sersync
由於有的時候sersync腳本會自動關掉,所以須要寫一個腳本自動的去檢測該進程是否存在,不存在就啓動,腳本內容以下:
vi /root/check_sersync.sh
#!/bin/bash
#Purpose: Check sersync whether it is alive
#Author: steven
SERSYNC="/usr/local/sersync/sersync2"
CONF_FILE="/usr/local/sersync/confxml.xml"
STATUS=$(ps aux |grep 'sersync2'|grep -v 'grep'|wc -l)
if [ $STATUS -eq 0 ];
then
$SERSYNC -d -r -o $CONF_FILE &
else
exit 0;
fi
腳本寫好之後,添加到計劃任務中去
crontab -e
*/1 * * * * /bin/sh /root/check_sersync.sh > /dev/null 2>&1
參數
-d 後臺運行
-r 本地和目標進行一次總體同步,若是設置了<filter start="false">,那麼暫時不能使用-r參數進行總體同步
-o xml配置文件位置
-n 線程數,機器配置高能夠設置大一點
-m 插件
--help 查看幫助
rsyncd.conf裏max connections=0 最好設置爲0
其餘實時同步解決方案一覽
lsyncd1.4.2+rsync 同步數據
csync2+inotify 同步數據
csync2+lsyncd 同步數據
inotify+rsync 同步數據
DRBD 同步數據 缺點是備節點不能用
http://blog.johntechinfo.com/sersyncguild
http://blog.johntechinfo.com/technology/155
老男孩
f