1.    什么是Sersync

        Sersync是基于inotify实现实时文件备份。与inotify相比,sersync可以比较方便地精确到具体哪个文件或文件夹。

2.    安装sersync的前提

        sersync是使用基于inotify的,尽管可以不安装inotify-tools,但还是需要linux内核支持,需要至少2.6.13或以上。

        确定内核版本是否符合需求

        [root@Lab1 ~]# uname -r

        2.6.32-431.el6.x86_64

        [root@sv01 ~]# uname -r

        2.6.32-279.el6.i686

        可以看出,两台机器的均是2.6.32版本内核,满足了前提条件,而最后面接的是架构,前者x86_64代表64位系统,后者i686代表32位系统

3.    安装sersync

        sersync并不能yum安装,只能透过网上下载,可以到它官方网站下载32位和64位的程序

        https://code.google.com/archive/p/sersync/downloads

        https://github.com/wsgzao/sersync/blob/master/sersync2.5.4_64bit_binary_stable_final.tar.gz

        

        32位版本只有2.5版,应该是作者停止开发了,而64位版也很久没更新了,停留在2.5.4有一年时间了。

        这里以64位为例,建议用浏览器下载后上传到服务器上

        [root@Lab1 src]# cd /usr/local/src

        [root@Lab1 src]# rz -be

        rz waiting to receive.

        zmodem trl+C 

        100%     710 KB  710 KB/s 00:00:01       0 Errors  ary_stable_final.tar.gz...

        [root@Lab1 src]# tar zxf sersync2.5.4_64bit_binary_stable_final.tar.gz   #解压得到GNU-Linux-x86文件夹

        [root@Lab1 src]# mv GNU-Linux-x86 /usr/local/sersync  #把该文件夹挪到/usr/local下并改名为sersync

        [root@Lab1 src]# cd /usr/local/sersync/

        [root@Lab1 sersync]# ls    #可以看到sersync的结构非常简单,只有一个配置文件confxml.xml和执行文件sersync2

        confxml.xml  sersync2

4.    配置sersync

        配置文件就是confxml.xml,里面已经有一些演示的内容供参考,这需要修改一下即可

        <host hostip="localhost" port="8008"></host>

        #可以把hostip改成本地ip地址,port是源端口,这两个参数一定要有,否则会启动失败。

        

        <debug start="false"/>

        #是否开启排错模式,如果开启,则会输出很多有用的信息以便排错

        <fileSystem xfs="false"/>

        #文件系统是否xfs格式


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

        #定义inotify的触发事件。

        <sersync>

            <localpath watch="/opt/tongbu">

                <remote ip="127.0.0.1" name="tongbu1"/>

            </localpath>

            #要监视的本地文件夹,并设定远端备份服务器的ip地址和rsync daemon的模块名称

            <rsync>

                <commonParams params="-artuz"/>

                #执行rsync时的参数,默认是artuz,a相当于 -rlptgoD (no -H,-A,-X),r是递归,t保留修改时间,u是目标文件更新则略过,z是压缩。我会再加上b,用于备份一份旧文件,会以~结尾。

                <auth start="false" users="root" passwordfile="/etc/rsync.pas"/>

                #是否开启认证,并指定用户名和密码文件。

                <userDefinedPort start="false" port="874"/><!-- port=874 -->

                <timeout start="false" time="100"/><!-- timeout=100 -->

                #是否开启超时,如是,超时时间为100秒

                <ssh start="false"/>

                #是否开启ssh

            </rsync>

            <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->

            失败日志文件,每60分钟重新执行一次。

            <crontab start="false" schedule="600"><!--600mins-->

            是否开启计划任务,每60分钟一次

                <crontabfilter start="false">

                是否开启计划任务的过滤

                    <exclude expression="*.php"></exclude>

                    <exclude expression="info/*"></exclude>

                </crontabfilter>

            </crontab>

            <plugin start="false" name="command"/>

        </sersync>

        #

5.    运行

        /usr/local/sersync/sersync2 -o /usr/local/sersync/confxml.xml

        就是这么简单,如果开启了debug模式,则会输出很多信息。

6.    一些过滤规则

    <exclude expression="(.*)/~\$.*"></exclude>  #排除以~$开头的文件,常见于office文件

    <exclude expression="(.*)~"></exclude>        #排除以~结尾的文件,一般rsync的旧文件备份

    <exclude expression="(.*)\.tmp"></exclude>    #排除.tmp文件

    <exclude expression="(.*)\.TMP"></exclude>    #大小写

    <exclude expression="(.*)\.mp4"></exclude>    #排除mp4文件

    <exclude expression="(.*)\.MP4"></exclude>    #大小写

    <exclude expression=".*Thumbs\.db"></exclude>    #排除Thumbs.db文件