• NFS上的数据通过inotify或者sersync软件实时同步数据到rsync服务器上


    这里主要是说inotify的实时同步和sersync的实时同步数据。两者都是实时同步的软件,大家可以比较一下他们有什么不一样。

    貌似inotify的缺点就是一个进程最多200个并发。然后对于中小公司要求不高的服务器已经足够了,至于watch  events参数可调整为1000000。

    inotify的安装 。这个软件一般安装在客户端,而不是安装在rsync上。

    首先要测试rsync同步是否有问题?

    先下载inotify-tools-3.14.tar.gz  这个软件

    移动到指定的目录  mv inotify-tools-3.14.tar.gz  /tools

    解压  tar zxf inotify-tools-3.14.tar.gz

    进入目录  cd inotify-tools-3.14

    配置安装 ./configure --prefix=/usr/local/inotify-tools-3.14

    编译和安装   make && make install

    检查安装结果  echo $?

    建立一个软链接,方便使用  ln -s /usr/local/inotify-tools-3.14/   /usr/local/inotify-tools

     测试效果  /usr/local/inotify-tools/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e create,close_write,delete /data

    这里我们监测 创建,修改,删除

    然后我们测试一下rsync服务,rsync服务前面有讲,这里就一带而过了。

    rsync -avz /data rsync_backup@192.168.3.107::backup --password-file=/etc/rsync.password

    这是把NFS  /data 的数据推送到rsync的backup目录里

    然后就是写一个shell脚本,这个脚本就可以实现监测,并且实时同步。

    #!/bin/bash
    inotify=/usr/local/inotify-tools/bin/inotifywait
    ##通过管道符把监测到数据不停的循环读取,并同步 $inotify
    -mrq --format '%w%f' -e create,close_write,delete /data |while read file do cd /data && rsync -avz /data --delete rsync_backup@192.168.3.107::backup --password-file=/etc/rsy nc.password >/dev/null 2>&1 done

    把这个脚本添加到rc.local开机启动。

    这里加了&是为了在后台运行,可以通过jobs -l 查看是否运行。

     -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    然后sersync这个软件好像更简单,不需要写脚本

    首先是下载和安装。

    sersync2.5.4_64bit_binary _stable_final.tar.gz 下载这个软件

    然后解压到相应的目录下。

     

     然后就是去调整confxml.xml的参数啦

    我目前只调整了这几个参数,测试是成功的。

     这里有关于这个配置文件的详细注释。

    <?xml version="1.0" encoding="ISO-8859-1"?>
    
    <head version="2.5">
    
        <!--本地主机地址-->
    
        <host hostip="10.2.22.27" port="8008"></host>
    
        <!--是否打开调试信息-->
    
        <debug start="false"/>
    
        <!--是否支持xfs文件系统-->
    
        <fileSystem xfs="false"/>
    
        <!--是否过滤,是否排除名称中含有制定字符串的文件的同步-->
    
        <filter start="false">
    
            <exclude expression="(.*).svn"></exclude>
    
            <exclude expression="(.*).gz"></exclude>
    
            <exclude expression="^info/*"></exclude>
    
            <exclude expression="^static/*"></exclude>
    
        </filter>
    
        <inotify>
    
            <delete start="true"/>
    
            <createFolder start="true"/>
    
            <createFile start="false"/>
    
            <closeWrite start="true"/>
    
            <moveFrom start="true"/>
    
            <moveTo start="true"/>
    
            <attrib start="true"/>
    
            <modify start="true"/>
    
        </inotify>
    
     
    
        <sersync>
    
            <!--本地需要监视的目录-->
    
            <localpath watch="/data/sersync/">
    
                <!--目的段IP地址和rsync同步子项的服务名-->
    
                <remote ip="10.2.22.27" name="sersync_test"/>
    
                <!--理论上如果有多个目的端,可在此逐个列出,最好启用新实例,每个实例配置一个地址和服务名-->
    
                <!--<remote ip="192.168.8.39" name="tongbu"/>-->
    
                <!--<remote ip="192.168.8.40" name="tongbu"/>-->
    
            </localpath>
    
            <rsync>
    
                <!--sersync调用rsync时的参数配置段-->
    
                <commonParams params="-artuz"/>
    
                <auth start="false" users="root" passwordfile="/etc/rsync.pas"/>
    
                <userDefinedPort start="false" port="874"/><!-- port=874 -->
    
                <timeout start="false" time="100"/><!-- timeout=100 -->
    
                <ssh start="false"/>
    
            </rsync>
    
            <!--指定如果同步失败,记录到哪个文件,以便在60分钟后尝试重传-->
    
            <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/p_w_picpaths"/>
    
            </localpath>
    
        </plugin>
    
    </head>

    然后就是测试了。

    /usr/local/sersync/bin/sersync2  -r -n 8 -o /usr/local/sersync/conf/confxml.xml

    没有加-d代表前台运行,可以直观的看见效果。

    因为要推送到rsync的backup1的目录了。

    所以要在rsync的服务器添加多一个模块。

     并赋予用户权限。

    参照这个。

     最后把sersync这个服务加入开机启动rc.local里。就可以了。

     这里面加入-d是为了后台运行,方便使用。

     

    看来sersync的功能还是优于inotify

  • 相关阅读:
    自定义事件的触发dispatchEvent
    [转]ProxmoxVE 干掉 VMware
    【转】怎么去阅读Chromium的源码?
    Delphi内存专题
    Delphi 线程同步技术(转)
    【纸模】六角大王 Super 5.6 CHS 简体中文版 U20080725+[手册]窗口与工具的概要(PDF格式)
    ReSharper反编译C#类库
    CS DevExpress程序启动(主窗体初始化优化)
    【EasyNetQ】- 发布/订阅模式
    Intellij Idea调试java文件时 怎么跳过class文件?
  • 原文地址:https://www.cnblogs.com/davidz/p/14447512.html
Copyright © 2020-2023  润新知