注意:***开启过滤规则后,整体-r同步和整体同步机制无效,最好启动前先命令整体同步一次***
 
# 先安装扩展包源,否则inotify-tools找不到
yum install epel-release
yum install inotify-tools
 
服务器:2台,分别标识为A,B,其中A为客户端,B为服务端,sersync安装在A机,监视文件变化,实时推送到B服务器上。
  A机地址:192.168.1.37
  B机地址:192.168.1.34
  同步目录:/opt/software
 
二、配置说明:
  1、A、B分别更新rsync至3.0.7版本,B机以守护进程的方式。
  2、B机安装并开启rsync服务,端口默认为TCP 873。
  3、A机上安装sersync,但也是以rsync能正常工作为前提
rsync的升级与安装配置,详见:rsync的部署文档。
 
三、安装步骤:
  1、分别为A,B两机安装 rsync
  2、安装sersync
    如果使用linux 系统,一般情况下,不需要编译,直接使用bin目录下的可执行文件和xml配置文件即可。当然已可以编译安装,src目录下放的是源码,lib目录下是需要的静态库,bin目录是最后生成的二进制文件,在sersync 目录下执行make命令,就会将生成的2进制文件放入bin目录下。
   只要配置文件和sersync命令属于同一目录下,那么直接执行./sersync 即可,如果不在同一目录下,那么要用-o参数指定xml配置文件所在位置。
 

要注意的有这么几个地方:               
     1,本地IP和端口               
     2,本地同步路径             
     3,远程主机的IP             
     4,是否开启密码认证
  5,重试间隔
  6,如果有多个目录需要监视和同步,则建立多个xml配置文件,用sersync -o file.xml分别执行。
 
五、运行
  1、执行命令:./sersync2  -r -d 启动sersync
 r是先执行一遍完整同步,d是后台运行,稍后介绍所有启动参数。
  2、加入sersync开机自动启动,老办法: /etc/rc.local,或者写一个service脚本加入chkconfig
    要注意的是:sersync调用rsync执行任务,所以他依赖系统的PATH变量来找到rsync命令,而在linux中,初始化的PATH变量是不含有/usr/local/bin目录的(很不幸,如果你升级了rsync的话,他会默认装到这个目录),所以,你需要在/usr/bin/中给rsync创建一个link,符号的就可以:
         cd /usr/bin
         ln -s /usr/local/bin/rsync rsync
     还有一个要注意的地方是:如果你的服务器网卡需要与交换机进行端口协商,不是立即接通,那么,最好在sersync启动以前,sleep一会儿,比如十秒,否则,rsync会因为找不到同步目的方而不工作。
六、附录:启动参数举例
  1、/usr/local/sersync/sersync2 -r -d -o /usr/local/sersync/config.xml
#通常情况下使用这种方式,对本地到远程整体同步一遍后,在后台运行实时同步。
  2、/usr/local/sersync/sersync2 -d -o  /usr/local/sersync/config.xml
#在主服务器上开启sersync守护进程,使sersync在后台运行,开启实时同步。
  3、/usr/local/sersync/sersync2 -r -o  /usr/local/sersync/config.xml
#在开启实时监控的之前对主服务器目录与远程目标机目录进行一次整体同步
  (如果设置了过滤器,即在xml文件中,filter为true,则暂时不能使用-r参数进行整体同步。-r参数将会无效)
  4、/usr/local/sersync/sersync2  -n 5 -d -o /usr/local/sersync/config.xml
#指定默认的线程池的线程总数,如果不指定,默认启动线程池数量是10(适用于四核服务器)
#如果cpu使用过高,可以通过这个参数调低,如果机器配置较高,可以用-n跳高线程总数。
 
  也可以不进行同步,只运行插件:./sersync -m pluginName
例如./sersync -m command,则在监控到文件事件后,不对远程目标服务器进行同步,而是直接运行command插件。
 
  多个参数可以配合使用
./sersync -n 8 -o abc.xml -r -d
表示,设置线程池工作线程为8个,指定abc.xml作为配置文件,在实时监控前作一次整体同步,以守护进程方式在后台运行。
 
  修改可监控的最大目录数量:
echo 50000000 > /proc/sys/fs/inotify/max_user_watches
 
参数-d:启用守护进程模式
参数-r:在监控前,将监控目录与远程主机用rsync命令推送一遍
c参数-n: 指定开启守护线程的数量,默认为10个
参数-o:指定配置文件,默认使用confxml.xml文件
参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块
参数-m:单独启用其他模块,使用 -m socket 开启socket模块
参数-m:单独启用其他模块,使用 -m http 开启http模块
不加-m参数,则默认执行同步程序
 

<?xml version=”1.0″ encoding=”ISO-8859-1″?>

<head version=”2.5″>

    <!–本地主机地址–>

    <host hostip=”10.2.22.27″ port=”8008″></host>

    <!–是否打开调试信息–>

    <debug start=”false”/>

    <!–是否支持xfs文件系统–>

    <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=”true”/>

        <modify start=”true”/>

    </inotify>

    <sersync>

        <!–本地需要监视的目录–>

        <localpath watch=”/data/sersync/”>

            <!–目的段IP地址和rsync同步子项的服务名–>

            <remote ip=”10.2.22.27″ name=”sersync_test”/>

            <!–理论上如果有多个目的端,可在此逐个列出,最好启用新实例,每个实例配置一个地址和服务名–>

            <!–<remote ip=”192.168.8.39″ name=”tongbu”/>–>

            <!–<remote ip=”192.168.8.40″ name=”tongbu”/>–>

        </localpath>

        <rsync>

            <!–sersync调用rsync时的参数配置段–>

            <commonParams params=”-artuz”/>

            <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>

        <!–指定如果同步失败,记录到哪个文件,以便在60分钟后尝试重传–>

        <failLog path=”/tmp/rsync_fail_log.sh” timeToExecute=”60″/><!–default every 60mins execute once–>

        <!–指定多长时间间隔执行一次完整同步–>

        <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>

    <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>