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

    配置rsync+inotify实时同步
    Linux从2.6.13版内核开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如文件的存取,删除,移动,修改内容及属性等。利用这个机制,可以实现文件异动警告,增量备份,针对目录或文件的变化及时做出响应。
    将inotify机制与rsync工具结合,可以实现触发式备份(实时同步),只要原始位置的文档发生变化,则立即启动增量备份,否则处于静默等待状态,避免了按固定周期备份是存在的延迟性,周期过密等问题。
    正因为inotify通知机制有Linux内核提供,因此inotify主要做本机监控,在触发式备份应用中更适合上行同步
    1、调整inotify内核参数(在客户端操作)
    在linux内核中,默认的inotify机制提供给了三个调控参数:
    cat /proc/sys/fs/inotify/max_queued_events (表示监控事件队列)(16384)
    16384
    cat /proc/sys/fs/inotify/max_user_instances (最多监控实例数)(128)
    128
    cat /proc/sys/fs/inotify/max_user_watches (每个实例最多监控文件数)(8192)
    8192
    当要监控的目录,文件数量较多或者变化频繁时,建议加大这三个参数的值
    vim /etc/sysctl.conf
    fs.inotify.max_queued_events = 16384
    fs.inotify.max_user_instances = 1024
    fs.inotify.max_user_watches = 1048576
    sysctl -p
    2、安装inotify-tools
    inotify-tools主要提供inotifywait,inotifywatch等工具,用来监控,汇总改动情况。
    上传软件包,在Linux soft内
    tar -xf inotify-tools-3.14.tar.gz
    cd inotify-tools-3.14/
    ./configure && make && make install
    以监控网站目录/var/www/html/为例,执行inotifywait命令后,在另外一个终端中改动/var/www/html目录下内容
    mkdir -p /var/www/html (在本地创建目录)
    inotifywait -mrq -e modify,create,move,delete,attrib /var/www/html/ (测试监控本机目录)
    【监控窗口不会退出,所以以下操作要在另一个窗口进行】
    -e  指定要监控的事件
    -m 表示持续监控
    -r 表示递归整个目录
    -q 简化输出信息
    modify:对文件内容的修改
    create:创建
    move:移动,重命名
    delete:删除
    attrib:属性,比如修改权限,属主,属组
    一有变动立即输出结果。inotifywait可用于收集系统变动情况,并在运行结束后输出汇总的变化情况
    另一个终端:在/var/www/html目录下添加文件、移动文件、跟踪屏幕输出结果
    touch /var/www/html/a.txt
    touch /var/www/html/b.txt
    编写触发式同步脚本
    inotifywait输出的监控结果中,每行记录中包括目录,事件,文件。据此可以识别变动情况。为了简单,只要检测到变动时执行rsync上同步操作即可。
    注意:当更新较频繁时,避免并发执行rsync备份,若rsync进程已经存在则忽略本次同步,或者根据rsync进程数量(取决于实际任务)来决定是否同步。
    为了使发起端可以上传文件的权限,修改同步源(服务端)的配置文件
    vim /etc/rsyncd.conf
    uid = nobody
    gid = nobody
    use chroot = yes
    address = 192.168.200.111
    port = 873
    log file = /var/log/rsyncd.log
    pid file = /var/run/rsyncd.pid
    hosts allow = 192.168.200.0/24
    [wwwroot]
            path = /var/www/html
            comment = Document Root os www.laowang.com
            read only = no  (只读改为no)
            dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z
            auth users = backuper
            secrets file = /etc/rsyncd_users.db
    重启服务
    kill $(cat /var/run/rsyncd.pid)
    rsync --daemon
    netstat -lnpt | grep 873
    chown nobody:nobody /var/www/html/ (修改共享目录属主,属组)
    在客户端测试是否可以上传
    rsync -avzH --password-file=/etc/server.pass /etc/hosts backuper@192.168.200.111::wwwroot/
    vim /opt/inotify.sh (脚本名中不能有rsync,否则会被认为rsync存活)
    #!/bin/bash
    INOTIFY_CMD="inotifywait -mrq -e modify,create,move,attrib,delete /var/www/html" (监控变量命令)
    RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html/  backuper@192.168.200.111::wwwroot"          (rsync上传命令变量)
    $INOTIFY_CMD | while read DIRECTORY EVENT FILE (执行监控命令|定义了三个变量,默认空格分开)
    do
            if [ $(pgrep rsync | wc -l) -le 0 ]   (判断rsync是否开启,如果没有进程,执行以下操作)
            then
                    $RSYNC_CMD
            fi
    done
    chmod +x /opt/inotify_rsync.sh 
    nohup /opt/inotify.sh &  (可以使脚本在后台运行)
    触发式操作有些场景不用
    可以用:用于数据异地备份
    不建议用:WEB集群中节点数据的批量更新,管理员上传文件服务器A才会有变化,
    管理员知道什么时候有改动,不需要触发,
    管理员上传代码出错,所有服务器都会同步到错的代码
  • 相关阅读:
    读操作
    读锁与写锁
    Mvcc
    readView
    版本链
    事务的隔离性
    索引的代价
    keras backend的修改
    caffe 笔记
    菜品识别 SDK调用
  • 原文地址:https://www.cnblogs.com/elin989898/p/12005601.html
Copyright © 2011-2022 走看看