zoukankan      html  css  js  c++  java
  • CentOS利用inotify+rsync实现文件同步

    1、环境部署

    inotify-master  10.10.6.208

    inotify-slave   10.10.6.149

    2、两台服务器都安装rsync

    yum install -y rsync

    3、inotify-slave部署

    新建rsync用户及模块目录并更改其用户组

    useradd rsync -s /sbin/nologin       #添加rsync用户
    mkdir /usr/local/backup            #创建rsync daemon工作模式的模块目录
    chown rsync.rsync /usr/local/backup    #更改模块目录的用户组

    编写rsync配置文件/etc/rsyncd.conf
    vi /etc/rsyncd.conf

    strict modes =yes #是否检查口令文件的权限
    port = 873 #默认端口873
    log file = /var/log/rsyncd.log #日志记录文件 原文中有的,我没有使用,日志文件
    pid file = /var/log/rsyncd.pid #运行进程的ID写到哪里

    [test]
    max connections = 10 #客户端最大连接数,默认0(没限制)
    uid = rsync #指定该模块传输文件时守护进程应该具有的uid
    gid = rsync #指定该模块传输文件时守护进程应该具有的gid
    path = /usr/local/backup/ # 需要做备份的目录
    ignore errors # 可以忽略一些无关的IO错误
    read only = no #no客户端可上传文件,yes只读
    write only = no #no客户端可下载文件,yes不能下载
    hosts allow = * #充许任何主机连接
    hosts deny = 10.5.3.77 #禁止指定的主机连接
    auth users = rsync_backup # 虚拟用户
    secrets file = /etc/rsync.password # 虚拟用户口令文件位置

    配置虚拟用户的密码文件
    echo "rsync_backup:123456" >/etc/rsync.password #注:rsync_backup为虚拟用户,123456为这个虚拟用户的密码
    chmod 600 /etc/rsync.password #为密码文件提权,增加安全性

    启动rsync服务
    rsync --daemon --config=/etc/rsyncd.conf

    4、inotify-master部署

    安装inotify-tools
    tar zxvf inotify-tools-3.13.tar
    cd inotify-tools-3.13
    ./configure --prefix=/usr/local/inotify-tools
    make
    make install

    测试推送
    echo "123456" >/etc/rsync.password
    chmod 600 /etc/rsync.password
    echo "hello dsideal">test.txt
    rsync -avz test.txt rsync_backup@10.10.6.149::test --password-file=/etc/rsync.password
    sending incremental file list
    sent 30 bytes received 8 bytes 76.00 bytes/sec
    total size is 14 speedup is 0.37

    测试成功,查看10.10.6.149的/usr/local/backup目录文件已经同步过来。

    编写监控脚本并加载到后台执行

    vi inotify.sh

    #!/bin/bash
    #para
    host01=10.10.6.149
    src=/usr/local/backup/ #本地监控的目录
    dst=test #inotify-slave的rsync服务的模块名
    user=rsync_backup #inotify-slave的rsync服务的虚拟用户
    rsync_passfile=/etc/rsync.password #本地调用rsync服务的密码文件
    inotify_home=/usr/local/inotify-tools #inotify的安装目录
    #judge
    if [ ! -e "$src" ]
    || [ ! -e "${rsync_passfile}" ]
    || [ ! -e "${inotify_home}/bin/inotifywait" ]
    || [ ! -e "/usr/bin/rsync" ];
    then
    echo "Check File and Folder"
    exit 9
    fi
    ${inotify_home}/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e close_write,delete,create,attrib $src | while read file
    do
    cd $src && /usr/bin/rsync -aruz -R --delete ./ $user@$host01::$dst --password-file=${rsync_passfile} >/dev/null 2>&1
    echo "${files} was rsynced" >> /tmp/rsync.log 2>&1
    echo "---------------------------------------------------------------------------"
    done
    exit 0


    # sh inotify.sh & #将脚本加入后台执行

  • 相关阅读:
    闭包
    iframe
    函数声明和函数表达式
    简单的事件委托
    onhashchange
    WebP探索
    Chrome
    适合自己学习的一些网站
    模拟jQuery的一些功能
    __autoload()方法
  • 原文地址:https://www.cnblogs.com/kgdxpr/p/5527459.html
Copyright © 2011-2022 走看看