zoukankan      html  css  js  c++  java
  • Sersync

    提到数据同步就必然会谈到rsync,一般简单的服务器数据传输会使用ftp/sftp等方式,但是这样的方式效率不高,不支持差异化增量同步也不支持实时传输。针对数据实时同步需求大多数人会选择rsync+inotify-tools的解决方案,sersync是国人基于前两者开发的工具,不仅保留了优点同时还强化了实时监控,文件过滤,简化配置等功能,帮助用户提高运行效率,节省时间和网络资源。

    Sersync项目利用Inotify和Rsync工具技术实现对服务器数据实时复制。

    当事件发生变化后,利用rsync命令把变化的数据复制到远端服务器上。

     

    Sersync特点

      1. 使用C++编写,支持对监控事件的过滤。

      2. Sersync采用xml配置文件,由守护进程启动,配置起来比起简易的Inotify+rsync更简单。

      3. 使用多线程复制,可以并发复制多个不同文件,效率更高。

      4. Sersync自带异常检测机制,可以通过失败队列对出错的文件重新复制。

      5. 自带crontab功能,实现对失败队列中的文件定时整体复制。

      6. 自带socket和HTTP协议扩展,定制特殊需求,二次开发。

    Sersync软件架构原理

     上图执行原理解释

      1. Inotify监控指定目录对应事件的变化,当有事件变化时进入事件过滤队列。

      2. 过滤队列负责过滤掉不需要触发复制的数据,也可以过滤短事件内产生的重复inotify事件信息,过滤后

        的事件触发Rsync对应变化数据进行复制。

      3. 图中线程组(线程是等待线程队列的守护线程),当事件队列中有事件发生后,线程组守护线程会逐个

           唤醒复制线程,当队列Inotify事件较多的时候,复制线程就会全部唤醒一起工作,提升复制效率。

      4. 除了线程组以外,还有Sersync服务线程负责处理复制失败的文件,它们再次复制,对于再次复制失败的

          文件,会记录到rsync_fail_log.sh脚本中,然后再定期执行脚本,同时利用自带的cron功能,实现每隔一段

                时间将所有未复制的数据整体复制。

    Sersync部署

    确保rsync服务正确,c/s端

    1.大前提Rsync Daemon服务正确
    [root@nfs01 scripts]# rsync -avz --delete /data/ rsync_backup@192.168.178.110::backup
    

    确保当前客户端机器,是否支持Inotify

    [root@nfs01 scripts]# ls /proc/sys/fs/inotify/
    max_queued_events  max_user_instances  max_user_watches
    

      

    Sersync安装

    1.资料参考地址
    https://github.com/wsgzao/sersync
    
    2.下载获取sersync软件包,上传至linux
    [root@nfs01 ~]# ls /MyInotify/tools/
    sersync_installdir_64bit.zip
    
    [root@nfs01 bin]# pwd
    /MyInotify/tools/sersync_installdir_64bit/sersync/bin
    # 给与命令可执行权限
    [root@nfs01 bin]# chmod +x sersync
    [root@nfs01 bin]# ll
    总用量 1768
    -rwxr-xr-x 1 root root 1810128 10月 26 2011 sersync
    

      

    Sersync配置文件

    1.修改配置文件,修改如下部分
    [root@nfs01 conf]# vim /MyInotify/tools/sersync_installdir_64bit/sersync/conf/confxml.xml
    
    # 配置文件解释
    # sersync的过滤功能,排除指定的文件不复制
      6     <filter start="false">
      7         <exclude expression="(.*).svn"></exclude>
      8         <exclude expression="(.*).gz"></exclude>
      9         <exclude expression="^info/*"></exclude>
     10         <exclude expression="^static/*"></exclude>
     11     </filter>
    
    # 指定监控事件,也就是触发监控管理的事件,true开启,false关闭
     12     <inotify>
     13         <delete start="true"/>
     14         <createFolder start="true"/>
     15         <createFile start="false"/>
     16         <closeWrite start="true"/>
     17         <moveFrom start="true"/>
     18         <moveTo start="true"/>
     19         <attrib start="false"/>
     20         <modify start="false"/>
     21     </inotify>
    
     # sersync主要功能点
     23     <sersync>
     24         <localpath watch="/data">
     # 填写rsync同步服务端ip地址,以及同步的模块名,支持复制到多台服务器
     25             <remote ip="192.168.178.110" name="bakcup"/>
     26             <!--<remote ip="192.168.8.39" name="tongbu"/>-->
     27             <!--<remote ip="192.168.8.40" name="tongbu"/>-->
     28         </localpath>
    
     # 配置rsync的信息
     29         <rsync>
     # 命令的参数
     30             <commonParams params="-artuz"/>
     # 填写rsync服务端验证的账号,密码文件
     31             <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.password"/>
     32             <userDefinedPort start="false" port="874"/><!-- port=874 -->
     33             <timeout start="false" time="100"/><!-- timeout=100 -->
     34             <ssh start="false"/>
     35         </rsync>
    

      

    Sersync部署应用

    1.生成sersync命令快捷键
    [root@nfs01 conf]# ln -s /MyInotify/tools/sersync_installdir_64bit/sersync/bin/sersync /usr/local/bin/
    
    2.查看命令帮助
    [root@nfs01 conf]# sersync -h
    set the system param
    execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
    execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
    parse the command param
    _______________________________________________________ 
    参数-d:启用守护进程模式
    参数-r:在监控前,将监控目录与远程主机用rsync命令推送一遍
    参数-n: 指定开启守护线程的数量,默认为10个
    参数-o:指定配置文件,默认使用confxml.xml文件
    参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块
    参数-m:单独启用其他模块,使用 -m socket 开启socket模块
    参数-m:单独启用其他模块,使用 -m http 开启http模块
    不加-m参数,则默认执行同步程序
    ________________________________________________________________
    

      

    Sersync软件服务开启

    [root@nfs01 conf]# sersync -r -d -o /MyInotify/tools/sersync_installdir_64bit/sersync/conf/confxml.xml
    set the system param
    execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
    execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
    parse the command param
    option: -r     rsync all the local files to the remote servers before the sersync work
    option: -d     run as a daemon
    option: -o     config xml name:  /MyInotify/tools/sersync_installdir_64bit/sersync/conf/confxml.xml
    daemon thread num: 10
    parse xml config file
    host ip : localhost    host port: 8008
    daemon start,sersync run behind the console
    config xml parse success
    please set /etc/rsyncd.conf max connections=0 Manually
    sersync working thread 12  = 1(primary thread) + 1(fail retry thread) + 10(daemon sub threads)
    Max threads numbers is: 22 = 12(Thread pool nums) + 10(Sub threads)
    please according your cpu ,use -n param to adjust the cpu rate
    ------------------------------------------
    rsync the directory recursivly to the remote servers once
    working please wait...
    execute command: cd /data && rsync -artuz -R --delete ./ 192.168.178.110::bakcup >/dev/null 2>&1
    run the sersync:
    watch path is: /data
    

      

    添加sersync命令至开机启动

    [root@nfs01 data]# echo "/MyInotify/tools/sersync_installdir_64bit/sersync/bin/sersync -d" >> /etc/rc.local
    [root@nfs01 data]#
    [root@nfs01 data]# tail -1 /etc/rc.local
    /MyInotify/tools/sersync_installdir_64bit/sersync/bin/sersync -d
    

      命令测试

  • 相关阅读:
    音频播放
    控制器的创建和控制器View的创建
    UIWebView之获取所点位置的图片(放大webView中的图片)
    SQLite的应用
    数据库操作(SQLite)
    计算文件(文件夹)大小
    本人专访微信魔法表情“米悠”作者流星剑
    Swift给每个开发者赢取500万的机会!不看一生后悔。
    疯狂猜图产品和盈利模式分析
    开发者改变世界的初心!
  • 原文地址:https://www.cnblogs.com/abc1234567/p/14195017.html
Copyright © 2011-2022 走看看