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

    rsync+inotify-tools实时同步
    官方网站:
    http://rsync.samba.org/
    https://download.samba.org/pub/rsync/rsync.html
    https://download.samba.org/pub/rsync/rsyncd.conf.html
    https://download.samba.org/pub/rsync/src/rsync-3.1.1.tar.gz

    http://sourceforge.net/projects/inotify-tools/
    https://github.com/rvoicilas/inotify-tools/wiki

    操作系统: CentOS6.5 x64

    server1.example.com:192.168.192.101(rsync client+inotify-tools)
    server2.example.com:192.168.192.102(rsync server)
    server3.example.com:192.168.192.103(rsync server)

    简介:inotify是内核的一个监控文件变化的模块,提供监控文件变化的API,需要安装inotify-tools工具来调用这个API 。inotify用来监控需要同步目录发生的变化,可以实现文件的新增,删除,修改,改变属性等,功能很强大。

    一.目标服务器(server2,server3)
    说明:被同步的服务器,接收者
    1.安装
    rsync server
    yum -y install gcc gcc-c++
    wget  https://download.samba.org/pub/rsync/src/rsync-3.1.1.tar.gz
    tar -xvf /mnt/samba/rsync-3.1.1.tar.gz -C /usr/local/src/
    cd /usr/local/src/rsync-3.1.1/
    ./configure && make -j4 && make install
    2.配置
    1.全局配置文件/etc/rsyncd.conf
    cat >/etc/rsyncd.conf <<HERE
    uid = nobody
    gid = nobody
    port = 873
    hosts allow = server1.example.com
    hosts deny = *
    max connections = 100
    timeout= 300
    use chroot = no
    list = false
    read only = no
    syslog facility = local5
    transfer logging = yes

    ##config file
    pid file = /var/run/rsyncd.pid
    lock file = /var/run/rsync.lock
    log file = /var/log/rsyncd.log
    #motd file = /etc/rsyncd.motd

    ##global config
    [web]
            path = /var/www/html
            comment = Sync the web root
            ignore errors = yes
            read only = no
            write only = no
            hosts allow = server1.example.com
            hosts deny = *
            list = false
            auth users = apache foo
            secrets file = /etc/rsyncd.secrets

    [image]
            path = /var/ftp/pub/image
            comment = Images
    HERE

    官方示例:
    auth users = joe:deny @guest:deny admin:rw @rsync:ro susan joe sam
    2.rsync client/server通信口令
    cat >/etc/rsyncd.secrets <<HERE
    apache:myapache
    HERE
    chmod 600 /etc/rsyncd.secrets
    注意:other不能有r权限
    3.banner(可选)
    echo "Welcome to use the rsync services" 
    > /etc/rsyncd.motd
    4.开机启动
    echo "/usr/local/bin/rsync --daemon --config=/etc/rsyncd.conf" >>/etc/rc.local
    source /etc/rc.local


    二.分发服务器(server1)
    1.rsync client
    yum -y install gcc gcc-c++
    wget  https://download.samba.org/pub/rsync/src/rsync-3.1.1.tar.gz
    tar -xvf /mnt/samba/rsync-3.1.1.tar.gz -C /usr/local/src/
    cd /usr/local/src/rsync-3.1.1/
    ./configure && make -j4 && make install

    2.inotify-tools
    tar -xvf /mnt/samba/inotify-tools-3.13.tar.gz -C /usr/local/src/
    cd /usr/local/src/inotify-tools-3.13/
     ./configure && make -j4 && make install

    3.监控脚本
    #############################################
    #!/bin/sh
    #To rsync real time automatically
    #############################################

    #Define variables
    dest_hosts="server2.example.com"
    dest_module="web"
    password_file="/etc/rsyncd.secrets"
    exclude_list="/etc/rsyncd.exclude"
    auth_user1="apache"
    auth_user2=""
    source_dir1="/root/test/"
    source_dir2=""

    inotifywait_bin="/usr/local/bin/inotifywait"
    rsync_log="/var/log/rsync.log"

    #Rsync
    for dest_host in $(echo $dest_hosts)
    do
            source_dir=$source_dir1
            auth_user=$auth_user1
            $inotifywait_bin -mr --timefmt '%Y/%m/%d %H:%M:%S' --format '%T %w %f' -e close_write,modify,delete,create,attrib $source_dir1|
            while read DATE TIME DIR FILE
            do
                    filechanged=$DIR$FILE
                    rsync -auzS --delete --ignore-errors --exclude-from=$exclude_list --password-file=$password_file $source_dir rsync://$auth_user@$dest_host:$dest_port/$dest_module 2>/dev/null
                    echo -e "At e[31;1m$TIMEe[0m on e[34;1m$DATEe[0m, file e[32;1m$filechangede[0m was rsynced to e[33;1m$dest_hoste[0m"|tee -a $rsync_log
            done
    done

    注意:源路径的最后有斜杠(
    /root/test/),则只同步目录中的文件
    没有斜杠
    (/root/test),则不但会同步目录中的文件,还会同步目录本身
    rsync+inotify-tools实时同步

    rsync+inotify-tools实时同步


    4.rsync client/server通信口令
    cat >/etc/rsyncd.secrets <<HERE
    myapache
    HERE
    chmod 600 /etc/rsyncd.secrets
    注意:和目标服务器的通信口令不一样,只有密码,没有用户名

    三.测试

    rsync+inotify-tools实时同步
    rsync+inotify-tools实时同步

    rsync+inotify-tools实时同步


  • 相关阅读:
    C++逐行读取文本文件的正确做法
    <Android Framework 之路>Android5.1 Camera Framework(一)
    zeromq-4.1.2在windows下的编译
    Duilib应用修改程序图标方法
    gdal集成kml库的做法
    使用DWR实现JS调用服务端Java代码
    DirectUI界面编程(六)实现右键弹出菜单
    如何设计系统的错误码及错误信息
    TCP协议格式
    UDP协议
  • 原文地址:https://www.cnblogs.com/lixuebin/p/10814353.html
Copyright © 2011-2022 走看看