这里主要是说inotify的实时同步和sersync的实时同步数据。两者都是实时同步的软件,大家可以比较一下他们有什么不一样。
貌似inotify的缺点就是一个进程最多200个并发。然后对于中小公司要求不高的服务器已经足够了,至于watch events参数可调整为1000000。
inotify的安装 。这个软件一般安装在客户端,而不是安装在rsync上。
首先要测试rsync同步是否有问题?
先下载inotify-tools-3.14.tar.gz 这个软件
移动到指定的目录 mv inotify-tools-3.14.tar.gz /tools
解压 tar zxf inotify-tools-3.14.tar.gz
进入目录 cd inotify-tools-3.14
配置安装 ./configure --prefix=/usr/local/inotify-tools-3.14
编译和安装 make && make install
检查安装结果 echo $?
建立一个软链接,方便使用 ln -s /usr/local/inotify-tools-3.14/ /usr/local/inotify-tools
测试效果 /usr/local/inotify-tools/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e create,close_write,delete /data
这里我们监测 创建,修改,删除
然后我们测试一下rsync服务,rsync服务前面有讲,这里就一带而过了。
rsync -avz /data rsync_backup@192.168.3.107::backup --password-file=/etc/rsync.password
这是把NFS /data 的数据推送到rsync的backup目录里
然后就是写一个shell脚本,这个脚本就可以实现监测,并且实时同步。
#!/bin/bash inotify=/usr/local/inotify-tools/bin/inotifywait
##通过管道符把监测到数据不停的循环读取,并同步 $inotify -mrq --format '%w%f' -e create,close_write,delete /data |while read file do cd /data && rsync -avz /data --delete rsync_backup@192.168.3.107::backup --password-file=/etc/rsy nc.password >/dev/null 2>&1 done
把这个脚本添加到rc.local开机启动。
这里加了&是为了在后台运行,可以通过jobs -l 查看是否运行。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
然后sersync这个软件好像更简单,不需要写脚本
首先是下载和安装。
sersync2.5.4_64bit_binary _stable_final.tar.gz 下载这个软件
然后解压到相应的目录下。
然后就是去调整confxml.xml的参数啦
我目前只调整了这几个参数,测试是成功的。
这里有关于这个配置文件的详细注释。
<?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>
然后就是测试了。
/usr/local/sersync/bin/sersync2 -r -n 8 -o /usr/local/sersync/conf/confxml.xml
没有加-d代表前台运行,可以直观的看见效果。
因为要推送到rsync的backup1的目录了。
所以要在rsync的服务器添加多一个模块。
并赋予用户权限。
参照这个。
最后把sersync这个服务加入开机启动rc.local里。就可以了。
这里面加入-d是为了后台运行,方便使用。
看来sersync的功能还是优于inotify