Real Time Sync with Sersync

以前一直使用rsync半夜同步上海、武汉两地之间服务器上的模板文件,最近这个方式出现一个新的问题,原因是不够实时,白天更新的模板,武汉同事常常无法使用,提示模板文件未找到,报错新信发过来,我只好手动启动rsync程序同步一次,几次之后,不胜其烦了,得想办法解决。

网上搜了一圈,发现金山的技术部周洋共享了一个Sersync开源程序,项目地址 http://code.google.com/p/sersync/

Sersync工作原理:
使用 Linux 2.6 内核的新特性, inotify 监控 Linux 文件系统事件,被监听目录下如果有文件发生修改,sersync 将通过内核自动捕获到事件,并将该文件利用 rsync 同步到多台远程服务器。sersync 仅仅同步发生增、删、改事件的单个文件或目录,不像rsync镜像同步那样需要比对双方服务器整个目录下数千万的文件,并且支持多线程同步,因此效率非常高。

教程地址 http://blog.johntechinfo.com/sersyncguild

实战:

1,服务器端下载、安装最新版sersync2.5 http://sersync.googlecode.com/files/sersync2.5_32bit_binary_stable_final.tar.gz

cd /usr/src/
wget http://sersync.googlecode.com/files/sersync2.5_32bit_binary_stable_final.tar.gz
tar zxvf sersync2.5_32bit_binary_stable_final.tar.gz
cd GNU-Linux-x86
vi confxml.xml

confxml.xml文件配置比较简单,修改 false和true搞定,

 <host hostip="localhost" port="8081"></host>
    <debug start="false"/>
    <fileSystem xfs="false"/>
    <filter start="false">
        <exclude expression="(.*)\.svn"></exclude>
        <exclude expression="(.*)\.gz"></exclude>
        <exclude expression="^info/*"></exclude>
        <exclude expression="^static/*"></exclude>
    </filter>
    <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>

    <sersync>
        <localpath watch="/var/www/shanghai/template">
            <remote ip="192.168.1.2" name="template"/>
                  </localpath>
        <rsync>
            <commonParams params="-vurt"/>
            <auth start="true" users="abc" passwordfile="/etc/rsync.pas"/>
            <userDefinedPort start="true" port="8081"/><!-- port=874 -->
            <timeout start="false" time="100"/><!-- timeout=100 -->
            <ssh start="false"/>
        </rsync>
        <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/>
        <crontab start="false" schedule="600"><!--600mins-->
            <crontabfilter start="false">
                <exclude expression="*.php"></exclude>
                <exclude expression="info/*"></exclude>
            </crontabfilter>
        </crontab>
        <plugin start="false" name="command"/>
    </sersync>

启动 服务端 ./sersync2 -d
2,客户端启用rsync daemon进程

vi /etc/rsyncd.conf

uid=webopadmin
gid=webopadmin
use chroot=no
max connections = 100
log file = /var/log/rsync/rsyncd.log
lock file=/var/run/rsyncd.lock
pid file=/var/run/rsyncd.pid

[template]
path = /var/www/wuhan/template
comment = webdesign template
ignore errors = yes
read only=no
hosts allow = 192.168.1.1/24
hosts deny = *
启用 客户端 rsync daemon进程,开始监听,默认873端口
rsync –daemon
也可以增加端口参数 rsync –port=8081 –daemon ,启用了8081端口,以免防火墙被挡,对应的服务器端confxml.xml配置也要监听这个8081端口

搞定收工,另有一些插件可以增加测试,我这里就不试验了。

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注