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