看完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
从文件名便可知这三个文件分别是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即可
iptables -t nat -F && iptables -F && iptables -L -vn && iptbales -t nat -L -vn
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告诉我说在环境变量$PATH中找不到可接受的C编译器,那好办,安装一个gcc就好了
[root@es1_master_node_test inotify-tools-3.14]# yum install gcc -y
安装好后再一次编译,这次编译就顺畅很多,当看到下图,就可以进行下一步,make && make install
最后出现这个的时候,就代表正常安装完成了
此时可以进到我开始指定的安装目录查看,能看到
在此文中就不详细讲述inotify了,接下来是rsync的安装和配置
可以选择编译安装,也可以选择yum直接安装,
在这里我选择yum直接安装,
rsync安装配置
[root@es1_master_node_test bin]# yum install -y rsync
通过yum安装后并没有直接的rsync的文件夹,它的配置文件rsync.conf文件是直接在/etc/目录下,而编译安装的情况是没有rsync.conf文件的,此时需要在自己指定的rsync安装目录下/etc目录里面创建此文件
接下来就是创建rsync.passwd文件了,密码文件随便你放哪,如果是编译安装可以统一放在/rsync/etc目录下,这是两个服务器进行文件同步的密码
在文件发送端只需要在rsync.passwd里面配置密码即可,接收端需要以user:passwd的形式保存rsync.passwd
passwd文件只能是600权限,不然会导致验证失败
在/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键值对的形式进行保存
接下来和发送端的配置有点不一样了,发送端无须配置rsync.conf,但是接收端需要进行配置,配置相应的模块
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
开启成功,接下来去发送端的相应目录下生成一个测试文件,再查看接收端是否收到此测试文件,
发送端生成文件
查看接收端,也同步了此文件
至此,inotify+rsync的安装配置就大功告成咯。