• rsync+inotify 实时双向同步


    前言

    在遇到需要 nginx 负载均衡,承受较高并发的情况,同时会有双机相同目录内容须保持一致的需求

    rsync+inotify 是一个不错的解决方案,相较于 rsync+sersync 在处理大量文件时更具稳定性

    本片博文不再赘述安装前准备,详情可查看以往篇

    一、安装 rsync 以及修改 /etc/rsyncd.conf

    yum install -y rsync
    #rsync通用配置文件,配置的注释不要写在配置后面,否则会有问题
    uid = root
    gid = root
    use chroot = 0
    port = 873
    #允许ip访问设置,请根据实际需要进行配置,这里为了方便设为全网段 *,生产环境下为了安全请指定ip或ip段
    hosts allow = *
    max connections = 0
    timeout = 300
    pid file = /var/run/rsyncd.pid
    lock file = /var/run/rsyncd.lock
    log file = /var/log/rsyncd.log
    log format = %t %a %m %f %b
    transfer logging = yes
    syslog facility = local3
    #方括号中为模块声明,对应命名,这里master_web对应了主web机配置,从服务器可都为[slave_web],方便inotify脚本配置
    [master_web]
    #指定当前模块在rsync服务器上的同步路径,该参数是必须指定的
    path = /data/dh/upload/
    #注释,可以同模块名一样,从服务器可都为slave_web
    comment = master_web
    ignore errors
    #是否允许客户端上传文件
    read only = no
    list = no
    #指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块
    auth users = rsync
    #保存密码和用户名文件,需要自己生成
    secrets file = /etc/rsyncd.passwd

    二、创建 /etc/rsyncd.passwd 和 /root/rsyncd.passwd

    #/etc/rsyncd.passwd中内容格式 用户名:密码
    rsync:123456
    #/root/rsyncd.passwd中内容只需要填写从服务器的密码
    123456

    三、给密码文件赋权限

    chmod 600 /etc/rsyncd.passwd
    chmod 600 /root/rsyncd.passwd

    四、以守护进程方式启动 rsync 服务并添加开机自启动

    /usr/bin/rsync --daemon --config=/etc/rsyncd.conf
    echo "/usr/bin/rsync --daemon --config=/etc/rsyncd.conf">>/etc/rc.local

    五、验证代码是否同步

    主web服务器推送代码到从web服务器,命令中的192.168.10.230 为从web服务器的ip,slave_web 为从web服务器的 rsyncd.conf 中配置的模块名,
    rsync 为从web服务器的中 rsyncd.passwd 中配置的用户名 rsync
    -vzrtopg --delete --progress /data/dh/upload/ rsync@172.17.0.11::slave_web --password-file=/root/rsyncd.passwd

    六、安装inotify(两台服务器都要安装)

    wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz --no-check-certificate
    tar -zxvf inotify-tools-3.14.tar.gz
    mkdir /usr/local/inotify
    cd inotify-tools-3.14.tar.gz
    ./configure --prefix=/usr/local/inotify
    make && make install
    # 查看是否安装成功
    ls -alh /usr/local/inotify/bin/inotify*
    # 建立软连接
    ln -s /usr/local/inotify/bin/inotifywait /usr/bin/inotifywait
    ln -s /usr/local/inotify/bin/inotifywatch /usr/bin/inotifywatch

    七、配置rsync.sh同步监控脚本

    #!/bin/bash
    src=/data/dh/upload/
    des=master_web
    user=rsync
    
    host="172.17.0.11"
    cd $src
    /usr/bin/inotifywait -mrq --exclude=public --exclude=themes --exclude=wap_themes --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib ./ | while read file
    do
        rsync -vzrtopg --delete --progress --exclude=themes --exclude=wap_themes --exclude=public $src $user@$host::$des --password-file=/root/rsyncd.passwd
        echo "$file was rsynced" >> /tmp/rsync.log 2>&1
    done

    八、给脚本赋权以及运行配置

    chmod +x /root/rsync.sh
    nohup sh /root/rsync.sh &
    #建立守护进程运行rsync.sh脚本
    echo “nohup sh /root/rsync.sh &” >> /etc/rc.local
    注:主从web服务器双向实时同步配置完全一致,只需修改部分模块名字以及ip即可
  • 相关阅读:
    【leetcode_easy】530. Minimum Absolute Difference in BST
    【leetcode】521. Longest Uncommon Subsequence I
    【leetcode】520. Detect Capital
    【leetcode】509. Fibonacci Number
    【leetcode】507. Perfect Number
    第2章 GNS3和PacketTracer网络模拟器(1)_GNS3概述
    第1章 计算机网络和协议(4)_网络性能指标
    第1章 计算机网络和协议(3)_TCP/IP协议
    第1章 计算机网络和协议(2)_OSI参考模型
    第1章 计算机网络和协议(1)_网络的概念
  • 原文地址:https://www.cnblogs.com/murry/p/11942297.html
Copyright © 2020-2023  润新知