• centos7部署inotify与rsync实现实时数据同步


    实验环境:CentOS Linux release 7.6.1810

    node1:192.168.216.130 客户端(向服务端发起数据同步)

    node2:192.168.216.132 服务端(接收来自客户端的数据)

    本次实验为单向同步

    1、在两个节点安装rsync

    yum -y install rsync
    

    2、在node2节点修改rsyncd.conf配置文件,注意hosts allow允许数据同步的IP、path同步目录、 comment备注信息、auth users认证用户、secrets file密钥文件,其参数值需要和实际一致

    cat /etc/rsyncd.conf 
    # /etc/rsyncd: configuration file for rsync daemon mode
    
    # See rsyncd.conf man page for more options.
    
    # configuration example:
    
    uid = 0
    gid = 0
    use chroot = no
    max connections = 200
    timeout = 1000
    pid file = /var/run/rsyncd.pid
    # exclude = lost+found/
    transfer logging = yes
    lock file = /var/run/rsyncd.lock
    log file = /var/log/rsyncd.log
    log format = %t %a %m %f %b
    reverse lookup = no
    hosts allow = 192.168.216.0/24
    # timeout = 900
    # ignore nonreadable = yes
    # dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
    
    # [ftp]
    #        path = /home/ftp
    #        comment = ftp export area
    
    [data]
    path = /data/
    comment = data
    ignore errors
    read only = no
    #write only = yes
    list = false
    auth users = postgres
    secrets file = /etc/rsync/rsync.passwd
    

    3、在node2上启动rsync服务,并创建用户认证文件,注意认证文件中的用户必须实际存在,自行创建用户

    启动服务
    systemctl start rsyncd
    创建用户名/密码认证文件
    echo "postgres:123456" > /etc/rsync/rsync.passwd
    修改认证文件权限为600
    chmod 600 /etc/rsync/rsync.passwd
    查看认证文件
    cat /etc/rsync/rsync.passwd
    postgres:123456
    

     4、在node1上创建用户认证文件

    node1节点只需要存放密码内容即可
    echo "123456" > /etc/rsync/rsync.passwd
    cat /etc/rsync/rsync.passwd
    chmod 600 /etc/rsync/rsync.passwd
    

    5、在node1上执行以下命令,手动测试是否可以正常同步数据,同步node1上data目录的文件至node2上的data目录  

    touch /data/a{1..100}
    rsync -avz --password-file=/etc/rsync/rsync.passwd /data/  postgres@192.168.216.132::data
    

    此时可以看到node2下的data目录数据和node1一致

     6、在node1上安装inotify-tools,这里采用编译安装,也可以执行yum install inotify-tools安装

    cd /tmp/
    wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
    tar zxf inotify-tools-3.14.tar.gz
    cd inotify-tools-3.14
    ./configure --prefix=/usr/local/include/
    make && make install
    

    7、在node1上创建shell脚本用于实时监控目录数据变化,并自动完成数据同步

    vi inotify_rsync.sh
    #!/bin/bash
    SRC='/data/'
    DEST='postgres@192.168.216.132::data'
    inotify_home=/usr/local/include/
    ${inotify_home}/bin/inotifywait -mrq --timefmt '%Y-%m-%d %H:%M' --format '%T %w %f' -e create,delete,moved_to,close_write,attrib ${SRC} |
    while read DATE TIME DIR FILE;do
            FILEPATH=${DIR}${FILE}
            rsync -az --delete --password-file=/etc/rsync/rsync.passwd $SRC $DEST && echo "At ${TIME} on ${DATE}, file $FILEPATH was backuped up via rsync" >> /var/log/changelist.log
    done
    

    这里引入一个--delete 选项,表示客户端上的数据要与服务器端完全一致,如果 /data目录中有服务器上不存在的文件,则删除。最终目的是让客户端/data目录上的数据完全与服务器上/data保持一致;用的时候要 小心点,最好不要把已经有重要数所据的目录,当做本地更新目录,否则会把你的数据全部删除;
    注意脚本中变量SRC(同步目录)、DEST(服务端信息)、inotify_home(inotify-tools安装目录)需要和实际目录一致

    8、后台运行脚本sh inotify_rsync.sh &

    参考:https://blog.51cto.com/14234525/2396910

  • 相关阅读:
    在LINUX中添加按键的驱动并编译进入内核
    什么是Dojo
    Dojo EnhancedGrid Pagination
    再Repeater模板中,如何获取里面的控件 客户端ID ??
    需求分析的大道理
    PL/SQL块结构和组成元素
    ORACLE SQL:经典查询练手第二篇
    企业信息化的定义、内涵
    背景需要需求规格
    asp.net(c#)两时间段每天是星期几,周几(时间段日历显示)的问题解
  • 原文地址:https://www.cnblogs.com/caidingyu/p/11708851.html
Copyright © 2020-2023  润新知