Linux System Environment
[root@nfs ~]# cat /etc/redhat-release #==》系统版本
CentOS release 6.7 (Final)
[root@nfs ~]# uname –r #==》内核版本
3.10.0-862.el7.x86_64
[root@nfs ~]# uname -m #==》系统架构
x86_64
[root@nfs ~]# echo $LANG #==》系统字符集
en_US.UTF-8
[root@nfs ~]# rpm -qa inotify-tools #==》Inotifty版本
inotify-tools-3.14-8.el7.x86_64
Inotify简介
Inotify是一个实时监控实时同步的软件,Linux2.6.13起加入了inotify支持,通过inotify可以监控文件系统中添加,删除,修改,移动等各种事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools正是实施这样监控的软件,另外一个这样效果的软件是中国人周洋在金山公司开发的Sersync,还有一个配置更简单的软件叫Lsyncd,实时同步软件Inotify/Sersync/Lsyncd三者功能虽然一样,但在处理文件同步效率上有很大区别。
Inotify功能
1、监控文件系统的变化,然后实时监控的结果执行我们相应的命令
2、inotify监控到目录的变化,然后配合rsync命令推送到备份服务器,实现实时备份功能
Inotifywait参数说明
-m ,-monitor #==》始终保持事件监听状态
-r,-recursive #==》递归查询目录
-q,-quiet #==》只打印监控事件的信息
-exclude #==》排除文件或目录时,不区分大小写
-t,-timeout #==》超时时间
-timefmt #==》指定时间输出格式
-format #==》指定时间输出格式
-e,event #==》后面指定增,删,改等事件
inotifywait events #==》事件说明
access #==》读取文件或目录内容
modify #==》修改文件或目录内容
attrib #==》文件或目录的属性改变
close_write #==》修改真实文件内容
close_nowrite
close
open #==》文件或目录被打开
moved_to #==》文件或目录移动到
moved_from #==》文件或目录从...移动到
move #==》移动文件或目录移动到监视目录
create #==》在监视目录下创建文件或目录
delete #==》删除监视目录下的文件或目录
delete_self
umount #==》卸载文件系统
Inotify注意事项
1、yum安装 inotify需要使用到epel源(第三方扩展软件)
2、inotify服务有两个命令inotifywait和inotifywatch,主要使用inotifywait命令
3、inotify服务优化配置文件/proc/sys/fs/inotify/
max_queued_events #==》设置inotifywait或inotifywathc命令可以监视文件数量(单进程),建议设置65535
max_user_instances #==》设置每个用户可以运行inotifywait或inotifywatch命令的进程数,建议设置128
max_user_watches #==》设置inotify实例事件(event)队列可容纳的事件数量,建议设置65535
Inotify优缺点
inotify优点
(1)、监控文件系统事件变化,通过同步工具实现实时数据同步
inotify缺点
(1)、并发如果大于200个文(10-100k),同步就会由延迟
(2)、我们前面的脚本,每次都是全部推送一次,但是确实是增量的,也可以只同步变化的文件
(3)、监控到事件后,调用rsync同步是单进程(加&并发)sersync多进程同步
一、Inotify安装配置
注意:Inotify只支持Linux 内核2.6.13以上的版本(包括2.6.13版本)
1、配置阿里云yum源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum makecache
2、安装inotify工具
[root@nfs ~]# yum -y install inotify-tools
oot@nfs ~]# rpm -qa inotify-tools
inotify-tools-3.14-8.el7.x86_64
3、查看Inotify默认参数
[root@nfs ~]# ls -l /proc/sys/fs/inotify
total 0
-rw-r--r-- 1 root root 0 Aug 29 18:06 max_queued_events
-rw-r--r-- 1 root root 0 Aug 29 18:04 max_user_instances
-rw-r--r-- 1 root root 0 Aug 29 18:04 max_user_watches
[root@nfs ~]# ls /proc/sys/fs/inotify/ | xargs -n 1 | awk '{print "cat","/proc/sys/fs/inotify/"$0}'| bash
16384
128
8192
4、测试
#==》Xshell打开一个窗口监测
[root@nfs ~]# mkdir /backup
[root@nfs ~]# inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e delete,create /backup
29/08/19 18:18 /backup/1.txt
29/08/19 18:19 /backup/test
29/08/19 19:27 /backup/1.txt
#==》Xshell打开另外一个窗口操作
[root@nfs ~]# touch /backup/1.txt
[root@nfs ~]# mkdir /backup/test/
[root@nfs ~]# rm -f /backup/1.txt
5、把脚本放到NFS服务端监控/backup目录,如果发生变化自动通过rsync推送
标注:rsync -avz $backupdir --delete rsync_backup@10.0.0.60::backup 此传输命令过于危险,不建议使用
[root@nfs ~]# vim /server/scripts/inotify.sh
#!/bin/bash
export RSYNC_PASSWORD=123456
backupdir=/backup/
rsync -avz $backupdir rsync_backup@10.0.0.60::backup
if [ -d $backupdir ];then
/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e delete,create,modify,attrib $backupdir |
\
while read line
do
rsync -avz $backupdir rsync_backup@10.0.0.60::backup
done
else
exit 1;
fi
[root@nfs ~]# sh /server/scripts/inotify.sh
网友评论