• 使用rsync+inotify-tools+ssh实现文件实时同步


     假设某服务器架构中有两台web服务器(IP为192.168.1.252和192.168.1.254),一台代码更新发布服务器(IP为192.168.1.251),需要同步的目录是/data/www/,结构图如下:

    rsync文件同步

    下面介绍一下安装步骤
    在代码发布服务器(192.168.1.251)上安装inotify,执行如下命令

    tar xzvf inotify-tools-3.14.tar.gz
    cd inotify-tools-3.14
    ./configure
    make
    make install
    cd ..
    在所有服务器上(代码发布服务器和需要同步的服务器)上安装rsync,命令如下:
    tar zxvf rsync-3.0.9.tar.gz
    cd rsync-3.0.9
    ./configure
    make
    make install
    #------以上命令在每台服务器上都需要执行---------

    在代码发布服务器与需要同步的服务器之间配置ssh key信任,在代码发布服务器上生成公钥和私钥
    ssh-keygen -t rsa
    直接三次回车
    将公钥添加到各个需要更新的主机authorized_keys 文件中,在代码更新服务器上再执行
    ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.252
    ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.254
    如果有提示 输入yes
    按提示输入密码回车
    然后两台需要web服务器(192.168.1.252192.168.1.254 )重启ssh
    service sshd restart
    在代码发布服务器上以root身份创建inotify_rsync.sh脚本vi /root/inotify_rsync.sh 输入

    #!/bin/sh
    SRC=/data/www/    #代码发布服务器目录
    DST=/data/www/    #目标服务器目录
    IP="192.168.1.252 192.168.1.254"    #目标服务器IP,多个以空格隔开
    USER=root
    /usr/local/bin/inotifywait -mrq --timefmt '%Y-%m-%d %H:%M' --format '%T %w%f %e' --exclude "(.swp|.swx|.svn)"
    -e create,move,delete,close_write,attrib $SRC | while read files
    do
    for i in $IP
    do
        /usr/local/bin/rsync -ahqzt --exclude Runtime --delete $SRC $USER@$i:$DST
        echo $files >>/tmp/rsync.log 2>&1
    done
    done

    相关解释:
    /usr/local/bin/inotifywait -mrq --timefmt '%Y-%m-%d %H:%M' --format '%T %w%f %e' --exclude "(.swp|.swx|.svn)"
    -e create,move,delete,close_write,attrib $SRC | while read files

     -m 是保持一直监听
     -r 是递归查看目录
     -q 是打印出事件
     -e create,move,delete,close_write,attrib 是指 监听 创建 移动 删除 写入 权限事件
     
    /usr/local/bin/rsync -ahqzt --exclude Runtime --delete $SRC $USER@$i:$DST
     -a 存档模式
     -h 保存硬连接
     -q 制止非错误信息
     -z 压缩文件数据后传输
     -t 维护修改时间
     -delete 删除于多余文件

    --exclude 排除同步的文件

     

    然后赋予脚本可执行权限
    chmod +x /root/inotify_rsync.sh
    设置开机自启动 echo "/root/inotify_rsync.sh &" >> /etc/rc.local
    执行脚本/root/inotify_rsync.sh &

    在代码更新服务器的/data/www/目录中创建文件,测试效果。

  • 相关阅读:
    PHP 5.5.0 Alpha5 发布
    Ubuntu Touch 只是另一个 Android 皮肤?
    MariaDB 10 已经为动态列提供文档说明
    Percona Toolkit 2.1.9 发布,MySQL 管理工具
    Oracle Linux 6.4 发布
    Ruby 2.0.0 首个稳定版本(p0)发布
    Apache Pig 0.11.0 发布,大规模数据分析
    Node.js 0.8.21 稳定版发布
    红薯 MySQL 5.5 和 5.6 默认参数值的差异
    Django 1.5 正式版发布,支持 Python 3
  • 原文地址:https://www.cnblogs.com/wuwenshuai/p/6402170.html
Copyright © 2020-2023  润新知