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

     rsync+inotify实现实时同步
    测试机1:主    172.23.128.124
    测试机2:从    172.23.132.91
    实现主机/usr/local/www 有任何变动 从机/usr/local/www实现实时同步
    一、主
    1、 下载安装包rsync+inotify
    cd /opt
    wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
    wget http://rsync.samba.org/ftp/rsync/rsync-3.0.9.tar.gz
    
    2、解压安装rsync+inotify
       tar -zxvf rsync-3.0.9.tar.gz
       cd rsync-3.0.9
       ./configure --prefix=/usr/local/rsyncd
       make && make install
       tar –zxvf inotify-tools-3.14.tar.gz
       cd inotify-tools-3.14
       ./configure --prefix=/usr/local/inotify
       make && make install
    
    3、 
    mkdir /usr/local/www
    #此处只需密码即可。
    echo "123456" >/etc/rsyncd/rsyncd.password 
    chmod 600 /etc/rsyncd/rsyncd.password
    
    3、 编写同步脚本
    #此脚本为完整同步!!
    cd /opt
    vim www_rsync.sh
    #!/bin/bash
    src=/usr/local/www
    des=www
    ip=172.23.132.91
    /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib $src | while read file
    do
        /usr/local/rsyncd/bin/rsync -vzrtopg --delete --progress $src test@$ip::$des --password-file=/etc/rsyncd/rsyncd.password
    Done
    
    
    /usr/local/rsyncd/bin/rsync -vzrtopg --delete --progress /usr/local/www test@172.23.132.91::www --password-file=/etc/rsyncd/rsyncd.password
    
    注:源目录/usr/local/www 此处www后不加/为同步www这个目录到目标目录里面,反之则是同步www目下的内容到目标目录里面。
    例如:
    1、 不加/,另一台rsync配置目录为/usr/local/www
    /usr/local/rsyncd/bin/rsync -vzrtopg --delete --progress /usr/local/www test@172.23.132.91::www --password-file=/etc/rsyncd/rsyncd.password
    
    该命令让/usr/local/www目录和另一台服务器的/usr/local/www目录保持一致
     
    2、 加/,另一台rsync配置目录为/usr/local/www/
    /usr/local/rsyncd/bin/rsync -vzrtopg --delete --progress /usr/local/www/ test@172.23.132.91::www --password-file=/etc/rsyncd/rsyncd.password
    
    该命令让/usr/local/www目录和另一台服务器的/usr/local/www目录保持一致
     
    此脚本为实时同步(没有操作不会同步,检测到操作同步操作内容,如需全部同步执行完整同步脚本)
    #!/bin/sh
    src=/usr/local/www
    P1=${#src} 计算源的字符串长度
    des=www
    ip=172.23.132.91
    /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w %f %e' -e close_write,delete,create,attrib ${src}| while read D T R F E
    do
            case "${E}" in
                    DELETE)
                            F1=${R}
                            echo "delete"
                    ;;
                    DELETE,ISDIR)
    #                       F1=${R}
                            echo `date +%F-%H:%M:%S`" $R$F is going to delete" >> /opt/dir_delete_`date +%F`.log
    #此处continue为回到开始重新执行,不在往下继续执行如果需要删除目录,需要注释掉continue
                            continue
                    ;;
                    *)
                            F1=${R}${F}
                            echo "${F1}"
                    ;;
            esac
            SubDirectory=${R:${P1}}
    /usr/local/rsyncd/bin/rsync -avz --progress --delete $F1  rsync_backup@$ip::$des$SubDirectory --password-file=/etc/rsyncd/rsyncd.password &
    done
    
    脚本解释
    --timefmt 时间格式
    %y年 %m月 %d日 %H小时 %M分钟
    --format 输出格式
    %T时间 %w路径 %f文件名 %e状态
    -m 始终保持监听状态,默认触发事件即退出。
    -r 递归查询目录
    -q 打印出监控事件
    -e 定义监控的事件,可用参数:
    open   打开文件
    access 访问文件
    modify 修改文件
    delete 删除文件
    create 新建文件
    attrb  属性变更
     
    D 返回值为时间
    T 返回值为时间
    R 返回值为文件
    F 返回值为目录
    E 返回执行的指令
    
    二、从
       1、安装rsync
    tar -zxvf rsync-3.0.9.tar.gz
    cd rsync-3.0.9
    ./configure --prefix=/usr/local/rsyncd
    make && make install
    
    2、创建rsync配置文件
    mkedir /etc/rsyncd/
    cd /etc/rsyncd/
    vim rsyncd.conf
    
    uid = root
    gid = root
    user chroot = no
    max connections = 50
    timeout = 180
    pid file = /etc/rsyncd/rsyncd.pid
    lock file= /etc/rsyncd/rsyncd.lock
    log file = /var/log/rsyncd.log
    transfer logging = yes
    log format = %t %a %m %f %b
    syslog facility = local3
    secrets file = /etc/rsyncd/rsyncd.password
     
    [www]  //同步目录名
    path=/usr/local/www   //同步目录位置
    ignore errors
    hosts allow = 172.23.128.0/21
    hosts deny = 0.0.0.0/32
    secrets file = /etc/rsyncd/rsyncd.password
    read only = no
    list = no
    auth users = test  //同步验证账号 要与主一样
    
    3、 
    echo "test:123456" >> /etc/rsyncd/rsyncd.password
    chmod 600 /etc/rsyncd/rsyncd.password
    
    4、 启动rsync
    /usr/local/rsyncd/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf
    
    
    三、测试
    主: 可后台运行脚本
    /usr/bin/nohup /opt/www_rsync.sh > /dev/null 2>&1 &
    在/usr/local/www 创建文件目录
    从:查看/usr/local/www 时候有实现同步
    
    修改inotify相关配置:
    #此为零时生效:
    echo 1638400 > /proc/sys/fs/inotify/max_queued_events
    echo 12800 > /proc/sys/fs/inotify/max_user_instances
    echo  819200  > /proc/sys/fs/inotify/max_user_watches
    
    #需要永久生效,需要修改/etc/sysctl.conf
    #在文件末尾添加
    fs.inotify.max_queued_events = 1638400
    fs.inotify.max_user_instances = 12800
    fs.inotify.max_user_watches = 819200
    sysctl -p
    
    /proc/sys/fs/inotify/max_user_instances:每个用户可创建的inotify实例最大上限数量
    /proc/sys/fs/inotify/max_user_watches:每个inotify实例可监听的最大上限数量
    /proc/sys/fs/inotify/max_queued_events:对应的inotify实例队列可容纳的最大上限事件数量
    
    实时同步排除:
    扫描排除/usr/local/inotify/bin/inotifywait --exclude=/data/htdocs/club/home/runtime排除此目录不同步
    完全同步排除:
    /usr/local/rsyncd/bin/rsync -avz --progress --delete --exclude-from=/etc/rsyncd/exclude.list
    指定排除的文件在/etc/rsyncd/exclude.list里面
    exclude.list要写入需要排除的相对目录
     
    /usr/local/inotify/bin/inotifywait --fromfile=/etc/rsyncd/exclude.list 排除扫描多个文件
    exclude.list里面需要写入绝对路径
    @/data/htdocs/club/home/runtime 排除扫描在前面加@
    @/data/htdocs/uc/click/
    
    --exclude 
    正则匹配需要排除的文件,大小写敏感。
    --excludei 
    正则匹配需要排除的文件,忽略大小写。
    从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以@开头。
    

      

  • 相关阅读:
    Java Comparator和Comparabler的区别
    正则表达式全部符号解释
    Java使用reids,以及redis与shiro集成
    jQuery的select相关操作
    javascrit原生实现jquery的append()函数
    spring拦截器 实现应用之性能监控
    Gitlab完美安装【CentOS6.5安装gitlab-6.9.2】
    关于datepicker只显示年、月、日的设置
    spring aop 环绕通知around和其他通知的区别
    springMVC和spring各自扫描自己的注解不要相互混淆
  • 原文地址:https://www.cnblogs.com/xieyi5420/p/13474132.html
Copyright © 2011-2022 走看看