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

简介:rsync是用来同步文件和文件夹的,inotify是用来实现监听变动而自动同步的

OS:Centos7.3

服务器端:172.16.13.157

客 户 端  :172.16.13.156

目     标  :客户端文件夹内容变动后,自动同步到客户端上,使内容保持一致

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

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

部署步骤如下

本脚本主要分为三个部分,第一部分设置rsync服务器,第二部分在客户端上测试rsync功能能否正常使用,第三部分测试文件夹自动检测修改并同步

两台主机都执行:
关掉防火墙和selinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i "s/enforcing/disabled/" /etc/selinux/config

第一部分:(需要根据情况修改对应的ip等内容)

#服务器端:
yum install rsync gcc -y
#设置目录
cat >> /etc/rsyncd.conf <<EOF #这里有坑,我直接复制到脚本里,结果制表符变成^I导致一直报错不存在目录。查看有没有复制正确,使用cat -A 查看文件,没有看到异常的符号就可以了,我后面是手动打的,没有复制
[test]
        path = /test                 #本地共享目录
        auth user = user1      #指定用户同步
        secrets file = /etc/rsyncd.secrets      #指定保存用户密码文件
EOF
#启动服务
rsync --daemon
netstat -anpt|grep 873

cat >> /etc/rsyncd.secrets <<EOF
user1:123
EOF

chmod 600 /etc/rsyncd.secrets
mkdir /test
touch /test/file{1..10}
#执行完上面步骤后,可以尝试在客户端上执行rsync -av user1@172.16.13.158::test /date -a归档-v详细输出,目的是将158服务器上的test文件夹 同步到客户端上的/date文件夹下
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 172.16.13.159::test #-a归档模式,表示以递归方式传输文件,并保持所有文件属性,等价于 --delete 删除那些接收端还有而发送端已经不存在的文件
echo "`date +'%F %T'` 出现事件 $events" >>/tmp/rsync.log 2>&1
done

客户端:
yum install rsync -y
rsync -a 172.16.13.158:: #正常会显示test(这个test就是服务器上的那个文件夹)
rsync -av user1@172.16.13.158::test /date
cd /date/
ls
cat >> /etc/rsyncd.conf << EOF
[test]
path=/node2/
read only=false
uid=root
gid=root
EOF
[root@bp node2]#
mkdir /node2
rsync --daemon
netstat -tlnp|grep 873
cd /node2/
ls
cd node1/
ls

服务器端:
mkdir /node1
touch /node1/testa{1..5}
nohup sh /tmp/1.sh &
echo "aaa">>/node1/file1

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

文章比较乱,后面我再整理一下,大概流程就这样

上一篇:springBean的作用域


下一篇:Java从零到企业级电商项目实战