Sersync 简介
Sersync 利用 inotify 与 rsync 对站群服务器进行实时同步,其中 inotify 用于监控档案系统事件,rsync 是目前广泛使用的同步演算法,其优点是只对档案不同的部分进行操作,所以其优势大大超过使用挂接档案系统的方式进行镜像站群同步。由金山的周洋开发完成,是目前使用较多的档案同步工具之一。该工具和其他的工具相比有如下优点:
sersync 是使用 c++编写,由于只同步发生更改的档案,因此比其他同步工具更节约时间、频宽;
安装方便、配置简单;
使用多执行绪进行同步,能够保证多个站群服务器实时保持同步状态;
自带出错处理机制,通过失败伫列对出错的档案重新出错,如果仍旧失败,则每 10 个小时对同步失败的档案重新同步;
自带 crontab 功能,只需在 xml 配置档案中开启,即可按您的要求,隔一段时间整体同步一次;
自带 socket 与 http 协议扩充套件,你可以方便的进行二次开发;
rsync+sersync 与 rsync+Inotify-tools 区别
Inotify-tools 只能记录下被监听的目录发生了变化(包括增加、删除、修改),并没有把具体是哪个档案或者哪个目录发生了变化记录下来;
rsync 在同步的时候,并不知道具体是哪个档案或者哪个目录发生了变化,每次都是对整个目录进行同步,当资料量很大时,整个目录同步非常耗时(rsync 要对整个目录遍历查询对比档案),因此,效率很低。
sersync 是基于 Inotify 开发的,类似于 Inotify-tools 的工具;
sersync 可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个档案或某一个目录的名字;
rsync 在同步的时候,只同步发生变化的这个档案或者这个目录(每次发生变化的资料相对整个同步目录资料来说是很小的,rsync 在遍历查询比对档案时,速度很快),因此,效率很高。
所以,当同步的目录资料量不大时,建议使用 Rsync+Inotify-tools;当资料量很大(几百 G 甚至 1T 以上)、档案很多时,建议使用 Rsync+sersync 。
地址:http://code.google.com/p/sersync/,要翻墙才能下载
http://download.csdn.net/detail/hellopengyl/9918625
安装、配置
和 Inotify-tools 一样,只需要在资料来源端安装
1 、检视站群服务器核心是否支援 inotify
[root@localhost src]# ll /proc/sys/fs/inotify #检视站群服务器核心是否支援 inotify,出现下面的内容,说明站群服务器核心支援 inotify
total 0
-rw-r–r– 1 root root 0 Jul 27 10:32 max_queued_events
-rw-r–r– 1 root root 0 Jul 27 10:32 max_user_instances
-rw-r–r– 1 root root 0 Jul 27 10:32 max_user_watches
[root@localhost src]# uname -r #Linux 下支援 inotify 的核心最小为 2.6.13
2.6.32-642.el6.x86_64
[root@localhost src]# sysctl -a|egrep -i “max_queued_events|max_user_watches|max_user_instances” #修改 inotify 预设引数(inotify 预设核心引数值太小)
fs.inotify.max_user_instances = 128
fs.inotify.max_user_watches = 8192
fs.inotify.max_queued_events = 16384
fs.epoll.max_user_watches = 201420
[root@localhost src]# vim /etc/sysctl.conf
fs.inotify.max_user_instances = 65535
fs.inotify.max_user_watches = 99999999
fs.inotify.max_queued_events = 99999999
[root@localhost src]# cat /proc/sys/fs/inotify/{max_user_instances,max_user_watches,max_queued_events}
65535
99999999
99999999
[root@localhost src]#
max_queued_events inotify 伫列最大长度,如果值太小,会出现”** Event Queue Overflow **” 错误,导致监控档案不准确
max_user_watches 要同步的档案包含多少目录,可以用:find /home/www.osyunwei.com -type d | wc -l 统计,必须保证 max_user_watches 值大于统计结果(这里/home/www.osyunwei.com 为同步档案目录)
max_user_instances 每个使用者建立 inotify 例项最大值
2 、安装、配置 sersync
[root@localhost src]# tar zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz
[root@localhost src]# mv GNU-Linux-x86 /app/sersync
[root@localhost src]# cd /app/sersync/
[root@localhost sersync]# ls
confxml.xml sersync2
[root@localhost sersync]# cp confxml.xml{,.default}
[root@localhost sersync]# vim confxml.xml
#针对插件外挂的保留栏位,保留预设即可。
#在 sersync 正在执行的控制台,列印 inotify,rsync 同步命令
#对于 xfs 档案系统使用者,需要将这个选项开启才正常工作
#过滤系统的临时档案,被过滤的档案不会被监控提高, 预设过滤系统的临时档案 (以 “.” 开头,以 “~” 结尾)
#inotify 监控档案模组
#如果本地档案删除,不需要删除远端段的档案可以设定成 false
#如果将 createFolder 设为 false,则不会对产生的目录进行监控,该目录下的子档案与子目录也不会被监控;
#把 createFile(监控档案事件选项)设定为 false 来提高效能,减少 rsync 通讯;因为拷贝档案到监控目录会产生 create 事件与 close_write 事件,所以如果关闭 create 事件,只监控档案拷贝结束时的时间 close_write,同样可以实现档案完整同步;
#进行资料同步的模组
#定义本地要同步的目录
#远端接受同步的 IP 和 rsync 模组名
#自定义 rsync 引数,预设是-artuz
#开启使用者认证,定义使用者名称密码
#开启会使用 rsync -e ssh 的方式进行传输
#对于失败的传输,会进行重新传送,再次同步失败后日志记录到/tmp/rsync_fail_log.sh,并且每 60 分钟对失败的 log 进行重新同步
#每隔 600s 会做一次完全同步
#如果开启了 filter 档案过滤功能,那么 crontab 整体同步也需要设定过滤,否则虽然实时同步的时候档案被过滤了,但 crontab 整体同步的时候 如果不单独设定 crontabfilter,还会将需过滤的档案同步到远端,
#crontab 的过滤正则与 filter 过滤的不同,果同时开启了 filter 与 crontab,则要开启 crontab 的 crontabfilter,并按示例设定使其与 filter 的过滤一一对应。
#当设定为 true 的时候,将档案同步到远端站群服务器后会呼叫 name 引数指定的插件外挂。
#name 指定的插件外挂
#当档案同步完成后,会呼叫command插件外挂,例如同步档案是file.txt,file.txt档案在改动之后,呼叫rsync同步到远端站群服务器后,呼叫command插件外挂,执行/bin/sh file.txt suffix >/dev/null 2>&1
#如果suffix 设定了,则会放在inotify事件file.txt之后, 如果ignoreError为true,则会新增>/dev/null 2>&1
#当 filter 为 ture,include 可以只对正则匹配到的档案,呼叫 command 。
#http 插件外挂,可以向指定域名的 WordPress 主机 post,inotify 监控的事件。
#socket 插件外挂,开启该模组,则向指定 ip 与埠传送 inotify 所产生的档案路径资讯
#在同步过程中将档案传送到目的站群服务器后重新整理 cdn 介面。如果不想使用,则设定
#该模组根据 chinaCDN 的协议,进行设计,当有档案产生的时候,就向 cdn 介面传送需要重新整理的路径位置
#需要监控的目录
#cdnifo 标签制定了 cdn 介面的域名,埠号,以及使用者名称与密码。
#sendurl 标签是需要重新整理的 url 的字首