<服务>Sersync
目录:
Sersync
Sersync拥有着类似rsync和inotify的特点,但是优于inotify。
优点
- 通过c++编写,对临时文件和重复文件操作过滤,在结合rsync效率更高
- 使用多线程同步
- 有出错处理机制,通过失败队列对文件进行重新的同步
- 自带定时器功能
- 自带socker和http协议扩展,可以满足二次开发
原理
对目录文件的变更进行过滤,即过滤队列,过滤重复的信息后,进入不同的线程组,线程组通过rsync启动多个子线程的进行推送,推送失败的进入失败队列,通过设置进行失败重传。
过滤队列可以过滤掉的:
- 修改时产生的临时文件
- 删除目录导致的删除文件的重复信息
- 自定义过滤文件类型文件 这样就减少了rsync中无所谓的同步
线程组线程的作用有三点:
- 处理同步失败的文件,进行再次同步,再次同步会生成rsync_fail_log.sh脚本,记录失败日志
- 根据设置,每隔一段时间执行脚本文件
- 通过定时器功能进行一定时间间隔全路径同步
安装Sersync
解压
[root@nfs ~]# tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz -C /usr/local/
[root@nfs ~]# cd !$
cd /usr/local/
[root@nfs local]# mv GNU-Linux-x86/ sersync
[root@nfs local]# cd !$
cd sersync
[root@nfs sersync]# mkdir conf bin logs
[root@nfs sersync]# mv confxml.xml conf
[root@nfs sersync]# mv sersync2 bin/sersync
[root@nfs sersync]# tree .
.
├── bin
│ └── sersync
├── conf
│ └── confxml.xml
└── logs
3 directories, 2 files
配置详解
conf/confxml.xml
1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <head version="2.5">
3 <host hostip="localhost" port="8008"></host> #默认主机iplocalhost,后边端口为针对插件的保留内容
4 <debug start="false"/> #debug模式,开启可以在sersync控制台看到详细的监听事件和同步命令
5 <fileSystem xfs="false"/> #XFS文件系统开关
6 <filter start="false"> #文件过滤功能,默认过滤以.开头,以~结尾的临时文件
7 <exclude expression="(.*)\.svn"></exclude>
8 <exclude expression="(.*)\.gz"></exclude>
9 <exclude expression="^info/*"></exclude>
10 <exclude expression="^static/*"></exclude> #7~10为正则表达式过滤,start要为true,生产环境使用前最好开启debug模式进行一下测试
11 </filter> #监控项
12 <inotify>
13 <delete start="true"/>
14 <createFolder start="true"/> #监控创建的目录及目录下文件
15 <createFile start="false"/> #关闭createFile,开启closeWrite可以提高性能
16 <closeWrite start="true"/>
17 <moveFrom start="true"/>
18 <moveTo start="true"/>
19 <attrib start="false"/>
20 <modify start="false"/>
21 </inotify>
22
23 <sersync>
24 <localpath watch="/opt/tongbu"> # 本地需要同步的目录
25 <remote ip="127.0.0.1" name="tongbu1"/> #同步的目标ip和模块名
26 <!--<remote ip="192.168.8.39" name="tongbu"/>--> #<!--之间为注释内-->
27 <!--<remote ip="192.168.8.40" name="tongbu"/>-->
28 </localpath>
29 <rsync>
30 <commonParams params="-artuz"/> #执行参数
31 <auth start="false" users="root" passwordfile="/etc/rsync.pas"/> #开启推送到守护进程的模式,虚拟用户,密码文件
32 <userDefinedPort start="false" port="874"/><!-- port=874 -->
# 端口
33 <timeout start="false" time="100"/><!-- timeout=100 --> #超时时间
34 <ssh start="false"/> #不使用ssh方式推送
35 </rsync>
36 <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once--> # 60分钟同步一次失败的队列
37 <crontab start="false" schedule="600"><!--600mins-->
#定时同步失败队列,默认为600分钟
38 <crontabfilter start="false"> #定时器,如果开启需要同样添加过滤规则
39 <exclude expression="*.php"></exclude>
40 <exclude expression="info/*"></exclude>
41 </crontabfilter>
42 </crontab>
43 <plugin start="false" name="command"/> #插件是否开启
44 </sersync>
45
46 <plugin name="command">
47 <param prefix="/bin/sh" suffix="" ignoreError="true"/> <!--prefix /opt/tongbu/mmm.sh suffix-->
48 <filter start="false">
49 <include expression="(.*)\.php"/>
50 <include expression="(.*)\.sh"/>
51 </filter>
52 </plugin>
53
54 <plugin name="socket"> #向指定ip和端口发送inotify的文件路径信息
55 <localpath watch="/opt/tongbu">
56 <deshost ip="192.168.138.20" port="8009"/>
57 </localpath>
58 </plugin>
59 <plugin name="refreshCDN"> #刷新CDN
60 <localpath watch="/data0/htdocs/cms.xoyo.com/site/"> #监控目录
61 <cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/> #接口域名,端口号,以及用户名和密码
62 <sendurl base="http://pic.xoyo.com/cms"/>
63 <regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/> #目录通过正则转化成http路径
64 </localpath>
65 </plugin>
66 </head>
环境变量
/usr/local/sersync/bin
启动
sersync -r -d -o /usr/local/sersync/conf/confxml.xml
- r 先做一次同步,然后进行实时同步
- d 后台启动
- o 指定配置文件目录,默认是二进制包所在目录
- n 制定默认的线程池总数,默认为10个
- m 不同步只运行插件