inotify事件监控工具
inotify简介
· Inotify是一种强大的,细粒度的,异步的文件系统事件监控机制(软件),linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加,删除,修改,移动等各种事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools正是实施这样监控的软件。还有国人周洋在金山公司开发的sersync。
· Inotify实际是一种事件驱动机制,它为应用程序监控文件系统事件提供了实时响应事件的机制,而无须通过诸如cron等的轮询机制来获取事件。cron等机制不仅无法做到实时性,而且消耗大量系统资源。相比之下,inotify基于事件驱动,可以做到对事件处理的实时响应,也没有轮询造成的系统资源消耗,是非常自然的事件通知接口,也与自然世界的事件机制相符合。
· inotify 的实现有几款软件
1)inotify-tools,
2)sersync(金山周洋)
3)lsyncd
特别说明:
下面的inotify配置是建立在rsync服务基础上的配置过程。
inotify 实施准备
大前提rsync daemon 服务配置成功,可以再rsync客户端推送拉取数据,然后才能配置inotify服务。
开始安装
默认yum源:
base + extras + updates
扩展的yum源:
epel
1.网易163源
2。阿里云epel源
在安装inotify-tools前请先确认你的linux内核是否达到了2.6.13,并且在编译时开启CONFIG_INOTIFY选项,也可以通过以下命令检测。
查看当前系统是否支持inotify
1. [root@backup ~]# uname -r
2. 2.6.32-642.el6.x86_64
3. [root@backup ~]# ls -l /proc/sys/fs/inotify
4. 总用量 0
5. -rw-r--r-- 1 root root 0 3月 11 05:01 max_queued_events
6. -rw-r--r-- 1 root root 0 3月 11 05:01 max_user_instances
7. -rw-r--r-- 1 root root 0 3月 11 05:01 max_user_watches
8.
9. #显示这三个文件证明支持
关键参数说明:
1. 在/proc/sys/fs/inotify目录下有三个文件,对inotify机制有一定的限制
2. max_user_watches:设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)
3. max_user_instances:设置每个用户可以运行的inotifywait或inotifywatch命令的进程数。
4. max_queued_events:设置inotify实例事件(event)队列可容纳的事件数量。
Yum安装inotify-tools:
1. #wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
2. yum -y install inotify-tools
3. rpm -qa inotify-tools
一共安装了2个工具,即inotifywait和inotifywatch
inotifywait:在被监控的文件或目录上等待特定文件系统事件(open,close,delete等)发生,执行后处于阻塞状态,适合shell脚本中使用。
inotifywatch:收集被监视的文件系统使用度统计数据,指文件系统事件发生的次数统计。
inotifywait命令常用参数详解
下面用列表详细解释一下各个参数的含义
|
inotifywait参数 |
含义说明 |
|
-r --recursive |
递归查询目录 |
|
-q --quiet |
打印很少的信息,仅仅打印监控事件的信息 |
|
-m,--monitor |
始终保持事件监听状态 |
|
--exclude |
排除文件或目录时,不区分大小写。 |
|
--timefmt |
指定时间输出的格式 |
|
--format |
打印使用指定的输出类似格式字符串 |
|
-e,--event |
通过此参数可以指定需要监控的事件,如下一个列表所示 |
-e :--event的各种事件含义
|
Events |
含义 |
|
access |
文件或目录被读取 |
|
modify |
文件或目录内容被修改 |
|
attrib |
文件或目录属性被改变 |
|
close |
文件或目录封闭,无论读/写模式 |
|
open |
文件或目录被打开 |
|
moved_to |
文件或目录被移动至另外一个目录 |
|
move |
文件或目录被移动到另一个目录或从另一个目录移动至当前目录 |
|
create |
文件或目录被创建在当前目录 |
|
delete |
文件或目录被删除 |
|
umount |
文件系统被卸载 |
编写inotify实时监控脚本
1. #!/bin/bash
2.
3. Path=/data
4. backup_Server=172.16.1.41
5.
6.
7. /usr/bin/inotifywait -mrq --format '%w%f' -e create,close_write,delete /data | while read line
8. do
9. if [ -f $line ];then
10. rsync -az $line --delete rsync_backup@$backup_Server::nfsbackup --password-file=/etc/rsync.password
11. else
12. cd $Path &&\
13. rsync -az ./ --delete rsync_backup@$backup_Server::nfsbackup --password-file=/etc/rsync.password
14. fi
15.
16. done
脚本可以加入开机启动:
echo "/bin/sh /server/scripts/inotify.sh &" >> /etc/rc.local
提示:
一个& 代表从后台开始运行该条命令。
关键参数调整
在/proc/sys/fs/inotify目录下有三个文件,对inotify机制有一定的限制
max_user_watches:设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)
max_user_instances:设置每个用户可以运行的inotifywait或inotifywatch命令的进程数
max_queued_events:设置inotify实例事件(event)队列可容纳的事件数量。
Inotify实时并发:
结论:经过测试,每秒200文件并发,数据同步几乎无延迟(小于1秒)
inotify 优点:
1)监控文件系统事件变化,通过同步工具实现实时数据同步。
inotify 缺点
1)并发如果大于200个文件(10-100k),同步就会有延迟
2)我们前面写的脚本,每次都是全部推送一次,但确实是增量的。也可以只同步变化的文件,不变化的不理。
3)监控到事件后,调用rsync同步是单进程的,而sersync为多进程同步。
浙公网安备 33010602011771号