zoukankan      html  css  js  c++  java
  • RSYNC04-配置rsync+inotify实现实时同步

    1,背景介绍

          Linux内核从2.6.13版本开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如文件存取、删除、移动等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。

          使用rsync工具与inotify机制相结合,可以实现触发式备份(实时同步),只要原始位置的文档发生变化,则立即启动增量备份操作,否则处于静态等侍状态,这样一来,就避免了按固定周期备份进存在的延迟性、周期过密等问题。

    inotify:下载地址:http://sourceforge.net/projects/inotify-tools/

    版本号:3.1.13

          SourceForge.net,又称SF.net,是开源软件开发者进行开发管理的集中式场所。SourceForge 是全球最大开源软件开发平台和仓库,网站建立的宗旨,就是为开源软件提供一个存储、协作和发布的平台。SourceForge 上拥有大量非常优秀的开源软件,事实上,这些软件完全可以代替一些商业软件。

    2,实战

     

    2.1 查看系统是否支持inotify,优化内核参数

    • 判断系统是否支持inotify,---内核是否高于2.6.13
    [root@cdncenter inotify-tools-3.13]# uname -r
    2.6.18-194.el5
    • 判断系统是否支持inotify,---查看内核参数,在proc下面存在下面三个文件
    [root@cdncenter inotify-tools-3.13]# ll /proc/sys/fs/inotify/
    总计 0
    -rw-r--r-- 1 root root 0 12-28 00:10 max_queued_events
    -rw-r--r-- 1 root root 0 12-28 00:10 max_user_instances
    -rw-r--r-- 1 root root 0 12-28 00:10 max_user_watches

    在linux内核中,默认的inotify机制提供了三个调控参数:

    1. max_queued_events #表示监控事件队列
    2. max_user_instances #表示最多监控实例数
    3. max_user_watches #表示每个实例最多监控文件数
    [root@cdncenter inotify]# cat max_queued_events 
    16384
    [root@cdncenter inotify]# cat max_user_instances 
    128
    [root@cdncenter inotify]# cat max_user_watches 
    8192

    注:当要监控的目录、文件数量较多或者变化较频繁时,要加大这三个参数的值。

    例如:可直接修改/etc/sysctl.conf配置文件,将管理队列设为32768,实例数设为1024,监控数设为9000000(建议大于监控目标的总文件数)。

    [root@cdncenter ~]# vim /etc/sysctl.conf #以文件最后,添加以下内容
    fs.inotify.max_queued_events = 32768
    fs.inotify.max_user_instances = 1024
    fs.inotify.max_user_watches = 90000000
    [root@cdncenter ~]# sysctl -p #使修改后的sysctl.conf文件生效

    查看是否修改成功:

    [root@cdncenter inotify]# cat max_user_watches 
    90000000
    [root@cdncenter inotify]# cat max_user_instances 
    1024
    [root@cdncenter inotify]# cat max_queued_events 
    32768

     

    2.2 安装inotify工具

    1,使用sftp将inotify-tools-3.13.tar.gz上传到/usr/local/src目录下

    2,解压软件 tar –zxvf inotify-tools-3.13.tar.gz

    3,编译安装 ./configure && make –j4 && make install                   -j4 意思是:使用4个CPU来编译,编译速度大大提升

     

    2.3 inotify测试

          inotifywait命令基本用法

    [root@xuegod63 ~]# inotifywait -h

    常用参数:

    -e 用来指定要监控哪些事件。

    这些事件包括: create创建,move移动,delete删除,modify修改文件内容,attrib属性更改。

    -m 表示持续监控

    -r 表示递归整个目录

    -q 表示简化输出信息

        使用inotifywait命令监控目录/mpeg/mirrors/yumwarehouse/rhel6发生的变化。然后在另一个终端向/mpeg/mirrors/yumwarehouse/rhel6目录下添加文件、移动文件,查看屏幕输出结果。

    终端1:

    [root@cdncenter yumwarehouse]# inotifywait -mrq -e create,move,delete,modify /mpeg/mirrors/yumwarehouse/rhel6/
    
    /mpeg/mirrors/yumwarehouse/rhel6/ CREATE test
    /mpeg/mirrors/yumwarehouse/rhel6/ MODIFY test
    /mpeg/mirrors/yumwarehouse/rhel6/ MODIFY test
    /mpeg/mirrors/yumwarehouse/rhel6/ DELETE test
    /mpeg/mirrors/yumwarehouse/rhel6/ CREATE test
    /mpeg/mirrors/yumwarehouse/rhel6/ MOVED_FROM test
    /mpeg/mirrors/yumwarehouse/rhel6/ MOVED_TO test1

    终端2:

    [root@cdncenter rhel6]# touch test
    [root@cdncenter rhel6]# echo "111" >test
    [root@cdncenter rhel6]# rm -rf test 
    [root@cdncenter rhel6]# touch test
    [root@cdncenter rhel6]# mv test test1

    使用inotifywait输出的监控结果中,每行记录中依次包括目录、事件、文件。那木根据此可以识别变动情况,编写触发式同步脚本:

     

    2.4 编写触发式同步脚本

    SRC_address=10.80.0.1

    SRC_dir=/mpeg/mirrors/yumwarehouse/rhel6/

    DST_address=10.80.0.161

    SRC_dir=/home/rpmpackage/saltmaster/

    第一步,同步时不需要输入密码:10.80.0.1发生变化后,直接将发生变化的数据同步到10.80.0.161,同步时不需要输入密码

    [root@cencenter~]# ssh-keygen
    [root@cencenter~]# ssh-copy-id root@10.80.0.161
    [root@cencenter~]# ssh 10.80.0.161
    Last login: Wed Nov 12 17:51:35 2017

    第二步编写触发式同步脚本

    前提:参考以下shell脚本:将输出结果赋给变量,并打印

    [root@cdncenter scripts]# cat aaa.sh 
    #!/bin/sh
    
    echo aaa bbb ccc |while read D E F
    do
        echo $D
        echo $E
        echo $F
    done

    执行结果

    [root@cdncenter scripts]# sh aaa.sh 
    aaa
    bbb
    ccc

    实战脚本,监控10.80.0.1服务器的=/mpeg/mirrors/yumwarehouse/rhel6/,一旦发生变化,将增量数据同步给10.80.0.161的=/home/rpmpackage/saltmaster/目录

    [root@cdncenter scripts]# cat inotify.sh 
    #!/bin/sh
    
    SRC_dir=/mpeg/mirrors/yumwarehouse/rhel6/
    DST_address=10.80.0.161
    DST_dir=/home/rpmpackage/saltmaster/
    
    inotifywait -mrq -e create,move,delete,modify ${SRC_dir} |while read D E F
    do 
        rsync -azvP --delete --progress ${SRC_dir} root@${DST_address}:${DST_dir} 
    done
    优化:当更新较频繁时,应避免并发执行rsync备份(当rsync进程已经存在,则忽略本次同步,或根据rsync进程数量来决定是否同步)
    [root@cdncenter scripts]# cat inotify_rsync.sh 
    #!/bin/sh
    
    SRC_dir=/mpeg/mirrors/yumwarehouse/rhel6/
    DST_address=10.80.0.161
    DST_dir=/home/rpmpackage/saltmaster/
    
    inotifywait -mrq -e create,move,delete,modify ${SRC_dir} |while read D E F
    do 
        a=`pgrep rsync|wc -l`
        if [ $a -le 3 ];then
        /usr/bin/rsync -azvP --delete --progress ${SRC_dir} root@${DST_address}:${DST_dir} 
        fi
    done

    注:进程数大于3个时,暂停同步

    ---rsync完结

  • 相关阅读:
    如何将AutoCAD(Dwg、Dxf)文件转换为Shapefile(Shp)文件?
    如何将AutoCAD(Dwg、Dxf)文件转换为KML(kml、kmz)文件?
    如何将Shapefile(Shp)文件转换为KML(kml、kmz)文件?
    如何将Shapefile(Shp)文件转换为AutoCAD(Dwg、Dxf)文件?
    vue-scroller下拉刷新及无限加载组件学习之路
    link和@important引入css的区别
    浏览器兼容问题
    学习vue一段时间的感想
    div在父元素中的居中问题
    jquery的ajax请求bug
  • 原文地址:https://www.cnblogs.com/snailshadow/p/8129862.html
Copyright © 2011-2022 走看看