zoukankan      html  css  js  c++  java
  • centos inotify-rsync配置

     安装

     yum -y  install inotify-tools
     yum install rsync

    innotify说明

      inotify介绍-- 是一种强大的、细颗粒的、异步的文件系统监控机制,*&####&*_0_*&####&*内核从2.6.13起,加入Inotify可以监控文件系统中添加、删除、修改移动等各种事件,利用这个内核接口,就可以监控文件系统下文件的各种变化情况。

     inotifywait 参数说明

    参数名称参数说明
    -m,–monitor 始终保持事件监听状态
    -r,–recursive 递归查询目录
    -q,–quiet 只打印监控事件的信息
    –excludei 排除文件或目录时,不区分大小写
    -t,–timeout 超时时间
    –timefmt 指定时间输出格式
    –format 指定时间输出格式
    -e,–event 后面指定删、增、改等事件

    inotifywait events事件说明

    事件名称事件说明
    access 读取文件或目录内容
    modify 修改文件或目录内容
    attrib 文件或目录的属性改变
    close_write 修改真实文件内容
    close_nowrite  
    close  
    open 文件或目录被打开
    moved_to 文件或目录移动到
    moved_from 文件或目录从移动
    move 移动文件或目录移动到监视目录
    create 在监视目录下创建文件或目录
    delete 删除监视目录下的文件或目录
    delete_self  
    unmount 卸载文件系统

    rsync说明

    在配置完rsync服务器后,就可以从客户端发出rsync命令来实现各种同步的操作。rsync有很多功能选项,下面就对介绍一下常用的选项:

      rsync的命令格式可以为:
      
      1. rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST 
      2. rsync [OPTION]... [USER@]HOST:SRC DEST 
      3. rsync [OPTION]... SRC [SRC]... DEST 
      4. rsync [OPTION]... [USER@]HOST::SRC [DEST] 
      5. rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST 
      6. rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]

      rsync有六种不同的工作模式:

      1. 拷贝本地文件;当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。
      2.使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。
      3.使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。
      4. 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。
      5. 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。
      6. 列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。
      -a 以archive模式操作、复制目录、符号连接 相当于-rlptgoD

      rsync中的参数

      -r 是递归 
      -l 是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件;
      -z 传输时压缩;
      -P 传输进度;
      -v 传输时的进度等信息,和-P有点关系,自己试试。可以看文档;
      -e ssh的参数建立起加密的连接。
      -u只进行更新,防止本地新文件被重写,注意两者机器的时钟的同时
      --progress是指显示出详细的进度情况
      --delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致
      --password-file=/password/path/file来指定密码文件,这样就可以在脚本中使用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设得只有属主可读。

    脚本

    客户端: 

    1.配置密码文件,并设置权限

    echo "rsyncuser" >> /etc/rsync.passwd
    chmod  600 /etc/rsync.passwd

    2.脚本

    #!/bin/bash
    src=/data/                             # 需要同步的源路径
    des=data                               # 目标服务器上 rsync --daemon 发布的名称
    rsync_passwd_file=/etc/rsync.passwd1   # rsync验证的密码文件
    ip1=192.168.2.107                      # 目标服务器1
    user=rsyncuser                         # rsync --daemon定义的验证用户名
    cd ${src}                              # 此方法中,由于rsync同步的特性,这里必须要先cd到源目录,inotify再监听 ./ 才能rsync同步后目录结构一致,有兴趣的同学可以进行各种尝试观看其效果
    inotifywait -mrq --format  '%Xe %w%f' -e modify,create,delete,attrib,close_write,move ./ | while read file         # 把监控到有发生更改的"文件路径列表"循环
    do
            INO_EVENT=$(echo $file | awk '{print $1}')      # 把inotify输出切割 把事件类型部分赋值给INO_EVENT
            INO_FILE=$(echo $file | awk '{print $2}')       # 把inotify输出切割 把文件路径部分赋值给INO_FILE
            echo "-------------------------------$(date)------------------------------------"
            echo $file
            #增加、修改、写入完成、移动进事件
            #增、改放在同一个判断,因为他们都肯定是针对文件的操作,即使是新建目录,要同步的也只是一个空目录,不会影响速度。
            if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]]         # 判断事件类型
            then
                    echo 'CREATE or MODIFY or CLOSE_WRITE or MOVED_TO'
                    rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des}          # INO_FILE变量代表路径哦  -c校验文件内容
                     #仔细看 上面的rsync同步命令 源是用了$(dirname ${INO_FILE})变量 即每次只针对性的同步发生改变的文件的目录(只同步目标文件的方法在生产环境的某些极端环境下会漏文件 现在可以在不漏文件下也有不错的速度 做到平衡) 然后用-R参数把源的目录结构递归到目标后面 保证目录结构一致性
            fi
            #删除、移动出事件
            if [[ $INO_EVENT =~ 'DELETE' ]] || [[ $INO_EVENT =~ 'MOVED_FROM' ]]
            then
                    echo 'DELETE or MOVED_FROM'
                    rsync -avzR --delete --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des} 
                    #看rsync命令 如果直接同步已删除的路径${INO_FILE}会报no such or directory错误 所以这里同步的源是被删文件或目录的上一级路径,并加上--delete来删除目标上有而源中没有的文件,这里不能做到指定文件删除,如果删除的路径越靠近根,则同步的目录月多,同步删除的操作就越花时间。这里有更好方法的同学,欢迎交流。
            fi
            #修改属性事件 指 touch chgrp chmod chown等操作
            if [[ $INO_EVENT =~ 'ATTRIB' ]]
            then
                    echo 'ATTRIB'
                    if [ ! -d "$INO_FILE" ]                 # 如果修改属性的是目录 则不同步,因为同步目录会发生递归扫描,等此目录下的文件发生同步时,rsync会顺带更新此目录。
                    then
                            rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des}fi
            fi
    done

    后台执行

    nohup /bin/bash inotify_rsync.sh >/dev/null 2>&1 &

    每两小时做1次全量同步

    因为inotify只在启动时会监控目录,他没有启动期间的文件发生更改,他是不知道的,所以这里每2个小时做1次全量同步,防止各种意外遗漏,保证目录一致。

    * */2 * * * rsync -avz --password-file=/etc/rsync.passwd /data/ rsyncuser@192.168.2.107::data

    服务端配置:

     /etc/rsyncd.conf

        uid = root
        gid = root
        use chroot = no
        max connections = 20
        timeout = 600
        pid file = /var/run/rsyncd.pid
        lockfile = /var/run/rsyncd.lock
        log file = /var/log/rsyncd.log
    
        [data]
        path = /data/
        ignore errors = yes
        read only = no
        write only = no
        hosts allow = 192.168.0.0/16
        hosts deny = *
        list = yes
        uid = root
        gid = root
        auth users = rsyncuser
        secrets file = /etc/rsync.passwd

    添加用户,配置密码,添加认证文件,设置权限,并启动服务

    useradd rsyncuser
    echo rsyncuser:rsuncuser| chpasswd
    echo "rsyncuser:rsyncuser" >> /etc/rsync.passwd
    chmod  600 /etc/rsync.passwd

    rsync --daemon --config=/etc/rsyncd.conf

    配置完成! 

     

     

     

  • 相关阅读:
    天梯赛练习 L3-011 直捣黄龙 (30分) dijkstra + dfs
    PAT甲级练习 1087 All Roads Lead to Rome (30分) 字符串hash + dijkstra
    天梯赛练习 L3-010 是否完全二叉搜索树 (30分) 数组建树模拟
    天梯赛练习 L3-008 喊山 (30分) bfs搜索
    天梯赛练习 L3-007 天梯地图 (30分) Dijkstra
    1018 Public Bike Management (30分) PAT甲级真题 dijkstra + dfs
    PAT天梯赛练习 L3-004 肿瘤诊断 (30分) 三维BFS
    课堂实验(计算1!+2!+...+100!)
    39页作业第7题
    39页作业(还款年限—月还款额表)
  • 原文地址:https://www.cnblogs.com/rongkang/p/7997491.html
Copyright © 2011-2022 走看看