<服务>Sersync

时间:Nov. 30, 2016 分类:

目录:

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 不同步只运行插件