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:收集被监控的文件系统使用的统计数据,指文件系统事件发生的次数统计。

监控的事件说明

null

inotifywait -mrq --timefmt '%d/$m/$y %H:%M' --format '%T %w%f' -e create /data
##监控/data目录创建事件显示信息
inotifywait -mrq -e delete /data
##监控/data目录删除事件显示信息

null

案例

查看是否支持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文件中。
#设置开机自动进行实时监控优化。

results matching ""

    No results matching ""