看完inotify和rsync的原理(关于Linux中文件同步inotify+rsync(介绍篇)),接下来就是该如何配置了。

安装环境

CentOS 7 1810

3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

要安装inotify先要确定是否能进行使用

 ls -l /proc/sys/fs/inotify/,有下面三个文件,便是支持inotify

关于Linux中文件同步inotify+rsync(配置篇)_文件同步
从文件名便可知这三个文件分别是inotify instance中可排队的event的数目的最大值、每一个real user ID可创建的inotify instatnces的数量上限、每个inotify instance相关联的watches的上限

接下来便是关闭selinux、firewalld,清空iptables规则

setenforce 0  &&  sudo sed -i.ori 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config  && getenforce

看到selinux处于disabled即可

关于Linux中文件同步inotify+rsync(配置篇)_接收端_02

iptables -t nat -F && iptables -F && iptables -L -vn && iptbales -t nat -L -vn

关于Linux中文件同步inotify+rsync(配置篇)_接收端_03

Inotify安装配置

确定上面的限制都关闭后,就可以开始进行安装了,我是进行编译安装,各位可以直接yum install -y inotify-tools

inofity-tools下载地址:http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

下载好后进行解压

[root@es1_master_node_test ~]# tar -xvzf inotify-tools-3.14.tar.gz
进入解压后文件夹

[root@es1_master_node_test ~]# cd inotify-tools-3.14

进行编译安装,并制定安装路径

[root@es1_master_node_test inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify
此时我报了个错,linux报错不可怕,因为linux报错一般都会把错误原因说的清清楚楚,明明白白

关于Linux中文件同步inotify+rsync(配置篇)_linux_04

linux告诉我说在环境变量$PATH中找不到可接受的C编译器,那好办,安装一个gcc就好了

[root@es1_master_node_test inotify-tools-3.14]# yum install gcc -y

关于Linux中文件同步inotify+rsync(配置篇)_接收端_05

安装好后再一次编译,这次编译就顺畅很多,当看到下图,就可以进行下一步,make && make install

关于Linux中文件同步inotify+rsync(配置篇)_linux_06

最后出现这个的时候,就代表正常安装完成了

关于Linux中文件同步inotify+rsync(配置篇)_接收端_07

此时可以进到我开始指定的安装目录查看,能看到

关于Linux中文件同步inotify+rsync(配置篇)_linux_08

在此文中就不详细讲述inotify了,接下来是rsync的安装和配置

可以选择编译安装,也可以选择yum直接安装,

在这里我选择yum直接安装,

rsync安装配置

[root@es1_master_node_test bin]# yum install -y rsync

通过yum安装后并没有直接的rsync的文件夹,它的配置文件rsync.conf文件是直接在/etc/目录下,而编译安装的情况是没有rsync.conf文件的,此时需要在自己指定的rsync安装目录下/etc目录里面创建此文件

关于Linux中文件同步inotify+rsync(配置篇)_安装配置_09

接下来就是创建rsync.passwd文件了,密码文件随便你放哪,如果是编译安装可以统一放在/rsync/etc目录下,这是两个服务器进行文件同步的密码

在文件发送端只需要在rsync.passwd里面配置密码即可,接收端需要以user:passwd的形式保存rsync.passwd

passwd文件只能是600权限,不然会导致验证失败

关于Linux中文件同步inotify+rsync(配置篇)_接收端_10

在/usr/local/bin目录下创建rsync_data.sh同步脚本

#!/bin/bash

date=`date +%Y%m%d`
host=10.9.8.215
src=/data/blog/static/
dst=rsyncdata
user=rsyncuser
rsync_passible=/etc/rsyncd.passwd
inotify_home=/usr/local/inotify

if [ ! -e "$src" ]\
 || [ ! -e "$rsync_passible" ]\
 || [ ! -e "$inotify_home/bin/inotifywait" ]\
 || [ ! -e "/usr/bin/rsync" ]
 then
    echo "File is not enough to run inotify!"
    exit 9
fi
${inotify_home}/bin/inotifywait -mrq  --format "%w%f" -e close_write,modify,attrib,create $src \
 | while read line
    do
  #     [ ! -e $line ] && continue
      echo '$line'=$line >> /tmp/rsync_$date.log
      cd $src && rsync -aruz -R ./ --timeout=104 $user@$host::$dst --password-file=${rsync_passible} >/dev/null 2>&1
    done
exit 0

到此,rsync的发送端的配置基本完成,在讲法上,发送端又叫做客户端,在shell脚本中有一句

${inotify_home}/bin/inotifywait -mrq  --format "%w%f" -e close_write,modify,attrib,create $src \

就是用到inotify进行文件的实时情况进行监控,进行增量同步

接下来就是配置rsync的接收端了,同样的需要在接收端安装rsync,这里我同样用yum进行安装

同样需要进行密码的配置,接收端的密码在前文有讲到,需要以user:passwd键值对的形式进行保存

关于Linux中文件同步inotify+rsync(配置篇)_文件同步_11

接下来和发送端的配置有点不一样了,发送端无须配置rsync.conf,但是接收端需要进行配置,配置相应的模块

关于Linux中文件同步inotify+rsync(配置篇)_编译安装_12

rsyncdata就是一个模块,发送端发送东西过来后,接收端的rsync根据这个模块里面的配置,进行辨认,验证,接受保存文件到相应的path

在模块上面有一些rsync本身的一些基础配置

接下来在发送端启动rsync_data.sh脚本

[root@es1_master_node_test static]# ./rsync_data.sh &

在接收端

[root@es1_master_node_test static]# systemctl start rsyncd && systemctl status rsyncd

关于Linux中文件同步inotify+rsync(配置篇)_接收端_13

开启成功,接下来去发送端的相应目录下生成一个测试文件,再查看接收端是否收到此测试文件,

发送端生成文件

关于Linux中文件同步inotify+rsync(配置篇)_linux_14

查看接收端,也同步了此文件

关于Linux中文件同步inotify+rsync(配置篇)_安装配置_15

至此,inotify+rsync的安装配置就大功告成咯。