• CentOS7之Rsync+Inotify架构实现实时同步文件和文件夹


      该实验是为了实现服务器S上的文件夹内容变动后,自动同步到服务器C上,使两个服务器S和C文件内容保持一致.原理是当inotify监听到文件内容变动后,自动调用rsync进行文件和文件夹的同步.

    系统:Centos7.3

    服务器S:192.168.2.128  #需要同步内容的服务器,我们简称为S

    客户端C:192.168.2.137  #等待同步内容的服务器,我们简称C

    我们的最终目的是实现,将S上的内容实时同步到C上

    1.下载inotify-tools并上传到服务器S

    下载地址

    https://github.com/rvoicilas/inotify-tools/wiki

     二:关闭防火墙和selinux

    在S和C上分别执行:
    systemctl stop firewalld
    systemctl disable firewalld
    setenforce 0
    sed -i "s/enforcing/disabled/" /etc/selinux/config

    三:配置S

    在服务器S上执行以下操作
    yum install rsync gcc -y
    #设置目录

    vi /etc/rsyncd.conf  #文件内容如下

    [node1]           #模块名,可自定义,用来标志和识别rsync同步目录,建议和path的值目录名一致,方便记忆
            path = /node1                 #我们需要同步的目录,这里我假设为node1
            auth user = rsync_backup      #指定用户同步,建议在系统里也添加这个用户,并指定该用户位node1的拥有者
            secrets file = /etc/rsyncd.secrets      #指定保存用户密码文件

    mkdir /node1

    useradd rsync_backup  #添加rsync用户用于同步

    chown -R rsync_backup:rsync_backup  /node1  #修改文件夹拥有者

    rsync --daemon  #启动服务

    netstat -anpt|grep 873  #查看rsync是否正常启动

    echo "rsync_backup:123456" >/etc/rsyncd.secrets

    chmod 600 /etc/rsyncd.secrets

    touch /node1/file{1..3}

    tar -zxvf inotify-tools*

    rm -rf *.gz
    cd inotify-tools*
    ./configure && make && make install

    vi /tmp/1.sh

    #!/bin/bash
    /usr/local/bin/inotifywait -mrq -e modify,create,move,delete,attrib /node1 |while read events   
    #-m –monitor始终保持事件监听状态 -r –recursive递归查询目录,-q –quiet打印监控事件的信息,-e –event指定删、增、改等事件 do rsync -a --delete /node1 这里输入服务器C的IP::node2
    #-a归档模式,表示以递归方式传输文件,并保持所有文件属性,等价于 --delete 删除那些接收端还有而发送端已经不存在的文件
    echo "`date +'%F %T'` 出现事件 $events" >>/tmp/rsync.log 2>&1 done

    四:配置C

    配置服务器C
    yum install rsync -y
    vi /etc/rsyncd.conf #修改文件内容

    [node2]
    path=/node2/
    read only=false
    uid=rsync_backup
    gid=rsync_backup

    useradd rsync_backup  #添加rsync用户用于同步

    mkdir /node2

    chown -R rsync_backup:rsync_backup  /node2  #修改文件夹拥有者
    rsync --daemon
    netstat -tlnp|grep 873

    五:测试同步功能
    在服务器S上执行以下操作
    nohup sh /tmp/1.sh &   #执行该1.sh脚本,启动监听,当S上有内容变动时,会自动同步到C上

    尝试在服务器S上创建一个文件
    echo "aaa">>/node1/file1

    那么在服务器C上也会自动在对应位置上生产该新文件

     

     左上->S,右上->C,右下->S  nohup.out可以查看相关的执行日志,也可以看/tmp/rsync.log.可以看到,我在右下角终端创建一个a文件夹,左上终端就会有相关的日志更新,同时,右上角终端可以看到C上同时生成了a文件夹

    以上,就是这次实验全过程,成功达到目的.

    但是还有一个缺点,就是左上角终端日志中提示的警告,提示chgrp操作有异常,不过没有影响同步.我尝试这chown修改目录拥有者,但是这个只对已存在文件有效,对后面新建的文件夹依然无效,找到原因后我再和大家分享一下.

    PS:以上内容已经过二次整理修改,已可实现我们的实验目的,部分细节我后续再进行更新.

  • 相关阅读:
    事物的五种传播机制与七种传播行为
    Spring jdbcTemplate
    SpriingMVC执行流程结构
    SpringMVC视图解析器
    promise的基本使用和理解
    集合set的类型转换
    数据结构小结一
    Dotween的一些常用方法记录
    线程与进程的解释
    反射和特性
  • 原文地址:https://www.cnblogs.com/biaopei/p/10335427.html
Copyright © 2020-2023  润新知