zoukankan      html  css  js  c++  java
  • 基于sersync实现实时同步

    sersync是国人二次开发的一块同步软件。整合了rsync和inotify模块,可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或某一个目录的名字;并使用rsync进行同步,在同步的时候,只同步发生变化的这个文件或者这个目录(每次发生变化的数据相对整个同步目录数据来说是很小的,rsync在遍历查找比对文件时,速度很快),因此,效率很高。

    #下载包
    git clone https://github.com/wsgzao/sersync.git
    

    配置rsync

    //安装nfs
    [root@nfs ~]# yum install nfs-utils -y
     
    //配置nfs
    [root@nfs ~]# cat /etc/exports
    /data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
     
    //创建目录
    [root@nfs ~]#  mkdir -p /data
     
    //创建用户
    [root@nfs ~]# groupadd -g 666 www
    [root@nfs ~]# useradd -u666 -g666 -M -s /sbin/nologin www
     
    //授权
    [root@nfs ~]# chown -R www.www /data
     
    //重启nfs(restart)    下次开机自启 (enable)
    [root@nfs ~]# systemctl restart nfs
    [root@nfs ~]# systemctl enable nfs
    
    

    配置sersync

    //将下载好的二进制包直接解压
     
    [root@clientb sersync]# ll
    总用量 1772
    -rwxr-xr-x 1 root root    2214 10月 26 2011 confxml.xml
    -rwxr-xr-x 1 root root 1810128 10月 26 2011 sersync2
    //编辑sersync配置文件
    [root@clientb sersync]# vim confxml.xml 
    [root@clientb data]# cat  /usr/local/sersync/confxml.xml 
     
    <head version="2.5">
        <host hostip="localhost" port="8008"></host>
        <debug start="false"/>
    //设置文件系统为xfs
        <fileSystem xfs="true"/>
        <filter start="false">
        <exclude expression="(.*).svn"></exclude>
        <exclude expression="(.*).gz"></exclude>
        <exclude expression="^info/*"></exclude>
        <exclude expression="^static/*"></exclude>
        </filter>
    //监视动作,全部选true,监控全部动作
        <inotify>
        <delete start="true"/>
        <createFolder start="true"/>
        <createFile start="true"/>
        <closeWrite start="true"/>
        <moveFrom start="true"/>
        <moveTo start="true"/>
        <attrib start="true"/>
        <modify start="true"/>
        </inotify>
     
        <sersync>
    //监控本地/data目录
        <localpath watch="/data">
    //同步至172.16.1.202的data模块
            <remote ip="172.16.1.202" name="data"/>
            <!--<remote ip="192.168.8.39" name="tongbu"/>-->
            <!--<remote ip="192.168.8.40" name="tongbu"/>-->
        </localpath>
        <rsync>
    //选择参数 avz
            <commonParams params="-avz"/>
    //认证开启,虚拟用户dhc,存放密码文件/etc/rsync.pass
            <auth start="true" users="dhc" passwordfile="/etc/rsync.pass"/>
            <userDefinedPort start="false" port="874"/><!-- port=874 -->
    //重传时间
            <timeout start="true" time="100"/><!-- timeout=100 -->
            <ssh start="false"/>
        </rsync>
        <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/images"/>
        </localpath>
        </plugin>
    </head>
    
    
    
    //根据上面配置创建密码文件
     
    [root@clientb data]# echo "123456" > /etc/rsync.pass
    [root@clientb data]# chmod 600 /etc/rsync.pass
    
    
    
    

    配置备份服务器

    //安装rsync服务,和sersync配置保持一致性
    [root@clientc ~]# yum install rsync -y
     
    //配置rsync服务,要和sersync上的要求同步
    [root@clientc ~]# vim /etc/rsyncd.conf
    uid = www
    gid = www
    port = 873
    fake super = yes
    use chroot = no
    max connections = 200
    timeout = 600
    ignore errors
    read only = false
    list = false
    auth users = dhc
    secrets file = /etc/rsync.passwd
    log file = /var/log/rsyncd.log
    #####################################
    [backup]
    comment = welcome to oldboyedu backup!
    path = /backup
     
    [data]
    path = /data
     
    //创建www用户--》
    [root@clientc ~]# id www
    uid=666(www) gid=666(www) groups=666(www)
     
    [root@clientc ~]# mkdir /data
     
    [root@clientc ~]# chown -R www.www /data
     
    [root@clientc ~]# echo "dhc:123456" > /etc/rsync.passwd
     
    [root@clientc ~]# chmod 600 /etc/rsync.passwd
    
    

    运行sersync

    [root@clientb data]# /usr/local/sersync/sersync2 -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命令推送一遍
    c参数-n: 指定开启守护线程的数量,默认为10个
    参数-o:指定配置文件,默认使用confxml.xml文件
    参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块
    参数-m:单独启用其他模块,使用 -m socket 开启socket模块
    参数-m:单独启用其他模块,使用 -m http 开启http模块
    不加-m参数,则默认执行同步程序
     
    选择使用sersync命令
    ## 运行sersync程序,指定配置文件/usr/local/sersync/confxml.xml
    [root@clientb data]# /usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml
    ##可以在下面的提示中选择实际运行的命令进行测试
    
    

    测试:在web服务器上挂载

    // 挂载nfs目录
    [root@servera ~]# mount.nfs 172.16.1.201:/data /var/www/html/
     
    [root@servera html]# df -h
    Filesystem               Size  Used Avail Use% Mounted on
    。
    。
    。
    172.16.1.201:/data        17G  2.5G   15G  15% /var/www/html
     
    //使用httpd上传文件,测试
    
    
  • 相关阅读:
    PHP计算两个绝对路径的相对路径
    mysql触发器的使用 想让b字段在更新的时候把旧数据保存到a字段中
    LHC大神问的矩阵转置问题
    母牛2年生小牛 5年后并死去的算法
    switch和continue的关系
    逐行读取文件示例
    安装Harbor管理镜像服务
    解决:ElasticSearch ClusterBlockException[blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];
    Jenkins教程(五)构建Java服务Docker镜像
    Nacos高可用集群解决方案-Docker版本
  • 原文地址:https://www.cnblogs.com/dinghc/p/12217275.html
Copyright © 2011-2022 走看看