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

    inotify + rsync实现linux文件实时同步

    作者:ZIY

    出处:http://www.ziy.cc/topic/24110-inotify-rsync%E5%AE%9E%E7%8E%B0linux%E6%96%87%E4%BB%B6%E5%AE%9E%E6%97%B6%E5%90%8C%E6%AD%A5/


    一.项目需求:
    服务器A的数据目录内容变化后,改变要实时更新到多台服务器B C 的相关目录。
    二.解决方法:
        1、多台服务器做为rsync服务器端,服务器A做为rsync客户端,使用rsync命令同步数据内容。
        2、inotify做为触发器,当服务器A数据目录内容变化时,执行rsync命令同步数据。
        A  192.168.13.151  
        B  192.168.13.252
        C  192.168.13.253
    三.安装配置
    服务器端BC (192.168.13.252 192.168.13.253)
    # wget http://www.samba.org/ftp/rsync/src/rsync-3.0.7.tar.gz
    # tar zxvf rsync-3.0.7.tar.gz
    # cd  rsync-3.0.7
    # ./configure –prefix=/usr/local/rsync
    # make
    # maek install
    # vi /etc/rsyncd.conf


    uid = root
    gid = root
    use chroot = no
    max connections = 10
    pid file =  /var/run/rsyncd.pid
    lock file = /var/run/rsync.lock
    log file =  /var/log/rsync.log
    [images]
    path = /opt/images
    read only = no
    auth users = valeRsync
    secrets file = /etc/rsyncd.secrets
    建立用户认证文件
    # echo -ne “valeRsync:Vale.com-init” >   /etc/rsyncd.secrets
    # chmod 600 /etc/rsyncd.secrets
    开机自动执行
    # echo -ne “rsync –daemon –config=/etc/rsyncd.conf”   >> /etc/rc.local
    启动服务
    # /usr/local/rsync/bin/rsync –daemon –config=/etc/rsyncd.conf
    客户端A (192.168.13.251)
    # wget http://www.samba.org/ftp/rsync/src/rsync-3.0.7.tar.gz
    # tar zxvf rsync-3.0.7.tar.gz
    # cd  rsync-3.0.7
    # ./configure –prefix=/usr/local/rsync
    # make
    # maek install
    # wget http://ncu.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz
    # tar zxvf inotify-tools-3.13.tar.gz
    # cd inotify-tools-3.13
    # ./configure –prefix=/usr/local/inotify
    # make
    # make install
    建立用户密码文件
    # echo -ne “Vale.com-init”  > /etc/rsyncd.secrets
    # chmod 600 /etc/rsyncd.secrets
    开机自动执行
    # echo -ne ‘/root/InotifyRsync.sh &’ >> /etc/rc.local
    我的脚本
    # vi  /root/InotifyRsync.sh


    #!/bin/bash
    host_1=192.168.13.252
    host_2=192.168.13.253

    src=/opt/image/
    dst=images
    user=valeRsync

    /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib $src | whileread file
        do
        rsync -avzP --delete  --password-file=/etc/rsyncd.secrets $src $user@$host_1::$dst  > /dev/null
        rsync -avzP --delete  --password-file=/etc/rsyncd.secrets $src $user@$host_2::$dst  > /dev/null
        #echo "${file} was rsynced"
    done
    exit 0
    四.inotify支持的触发事件
    IN_ACCESS,即文件被访问
    IN_MODIFY,文件被 write
    IN_ATTRIB,文件属性被修改,如 chmod、chown、touch 等
    IN_CLOSE_WRITE,可写文件被 close
    IN_CLOSE_NOWRITE,不可写文件被 close
    IN_OPEN,文件被 open
    IN_MOVED_FROM,文件被移走,如 mv
    IN_MOVED_TO,文件被移来,如 mv、cp
    IN_CREATE,创建新文件
    IN_DELETE,文件被删除,如 rm
    IN_DELETE_SELF,自删除,即一个可执行文件在执行时删除自己
    IN_MOVE_SELF,自移动,即一个可执行文件在执行时移动自己
    IN_UNMOUNT,宿主文件系统被 umount
    IN_CLOSE,文件被关闭,等同于(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)
    IN_MOVE,文件被移动,等同于(IN_MOVED_FROM | IN_MOVED_TO)
    备注:


    #!/bin/sh
    #set -x
    #var 
    src="/usr/local/nginx/html/lib /usr/local/nginx/html/www /usr/local/nginx/html/var/www.work.com.conf.php"
    des_ip="172.18.1.35 172.18.1.36 172.18.1.37 172.18.1.38"
    #function
    inotify_fun ()
    {
    /usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y-%H:%M' --format '%T %w%f' -e modify,delete,create,move $1
    | while read time file
    do
    for ip in $des_ip
    do
    echo "`date +%Y%m%d-%T`: rsync -avzq --delete --progress $1 $ip:`dirname $1`"
    rsync -avzq --delete --progress $1 $ip:`dirname $1`
    echo
    done
    done
    }

    #main
    for a in $src
    do
    inotify_fun $a  &
    done 
  • 相关阅读:
    高性能的索引策略(上)
    索引的优点
    Mysql 索引的基础(下)
    Mysql 索引的基础(上)
    如果使用的是orm,是否还需要关系索引
    Mysql 数据类型使用说明
    WCF开发实战系列三:自运行WCF服务
    WCF开发实战系列二:使用IIS发布WCF服务
    WCF开发实战系列一:创建第一个WCF服务
    .Net并行编程之二:并行循环
  • 原文地址:https://www.cnblogs.com/leonxyzh/p/7289134.html
Copyright © 2011-2022 走看看