inotify机制的优点和缺点
优点:
监控文件文件系统事件变化,通过复制工具实现实时数据复制。支持多线程实时复制。
缺点:实测并发如果大于200个文件(10-100k),复制会有延迟。
inotify简介
Inotify是一种异步的系统事件监控机制,Linux内核从2.6.13起,加入了Inotify支持,通过Inotify 可以监控文件系统中添加、删除,修改、移动等各种事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而 inotify-tools 正是实施这样监控的软件。实际上: inotify-tools 是一个监控指定目录数据实时变化的软件程序。
Inotify程序原理是一种事件驱动机制,它为应用程序监控文件系统事件提供了实时响应事件的机制,可以做到对事件处理的实时响应。
inotify机制核心参数作用
文件名称 | 作用说明 |
---|---|
max_user_watches | 设置inotify命令可以监视的文件数量(单进程) |
max_user_instances | 设置每个用户可以运行的inotify命令的进程数 |
max_queued_events | 设置inotify实例事件(event)队列可容纳的事件数量 |
inotify-tools工具主要命令
在inotify-tools软件部署完毕后,主要应用两个命令实现数据信息的监控,一个利用inotifywait 命令实现对数据变化事件的监控,另一个利用inotifywatch命令实现对数据事件信息统计。这个两个命令是能够应用好inotify-tools 软件的关键,下面对这两个软件说明如下:
inotifywait:在被监控的目录等待特定文件系统事件(open、close、delete等)发生,执行后处于阻塞状态,适合在 Shell 脚本中使用,此命令是实现监控的重点。
inotifywait:
参数 | 说明 |
---|---|
-m | 始终保持事件监听状态 |
-r | 递归监控目录数据信息变化 |
-o | 打印事件到文件中,相当于标准正确输出 |
-s | 发送错误到syslog相当于标准错误输出 |
-q | 输出信息少(只打印事件信息) |
-- | 排除文件或目录 |
--timefmt | 指定时间输出的格式 |
--format | 打印使用指定的输出类似格式字符串;即实际监控输出内容 |
-e | 指定监听指定的事件,如果省略,表示所有事件都进行监听 |
inotifywatch:收集被监控的文件系统使用的统计数据,指文件系统事件发生的次数统计。
监控的事件说明
inotifywait -mrq --timefmt '%d/$m/$y %H:%M' --format '%T %w%f' -e create /data
##监控/data目录创建事件显示信息
inotifywait -mrq -e delete /data
##监控/data目录删除事件显示信息
案例
查看是否支持inotify:
ls -l /proc/sys/fs/inotify/
总用量 0
-rw-r--r-- 1 root root 0 10月 17 21:24 max_queued_events
-rw-r--r-- 1 root root 0 10月 17 21:24 max_user_instances
-rw-r--r-- 1 root root 0 10月 17 21:24 max_user_watches
说明:显示这三个文件说明系统支持inotify程序功能
安装inotify-tools:
yum install -y epel-release -y 需要先安装epel源
yum install -y inotify-tools
rpm -qa inotify-tools
inotify-tools-3.14-9.el7.x86_64
编写脚本:
cat inotifywait.sh
#!/bin/bash
WATCHED_DIR="/HanaDBBak/datatransfer/BIZ"
inotifywait -mqr -e create --format '%w%f' "$WATCHED_DIR" | while read NEW_FILE
do
if [ -n "$NEW_FILE" ]; then
chmod 775 "$NEW_FILE"
chown root:sftp "$NEW_FILE"
fi
done
nohup ./inotifywait.sh >> inotifywait.sh.log & 2>&1
测试无误后,在nfs01上让脚本放入后台运行。并放入/etc/rc.local里
tail -1 /etc/rc.d/rc.local
/bin/sh /server/scripts/monitorl.sh &>/dev/null ##说明:让脚本在后台运行
优化inotify
利用inotify对应的proc目录中的三个文件,可以适当对inotify软件进行优化,企业实战中调整为如下配置:
echo "50000000" > /proc/sys/fs/inotify/max_user_watches
##单进程可以监控的文件数量
echo "50000000" > /proc/sys/fs/inotify/max_queued_events
##队列容纳事件的数量
#说明:以上配置重启可能会失效,需要放置在rc.local文件中。
#设置开机自动进行实时监控优化。