实时监控服务---Inotify

       随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足。
       首先,rsync在同步数据时,需要扫描所有文件后进行比对,进行差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的,并且正在发生变化的往往是其中很少的一部分,这是非常低效的方式。
       其次,rsync不能实时的去监测、同步数据,虽然它可以通过linux守护进程的方式进行触发同步,但是两次触发动作一定会有时间差,这样就导致了服务端和客户端数据可能出现不一致,无法在应用故障时完全的恢复数据。
基于以上两种情况,可以使用rsync+inotify的组合来解决,可以实现数据的实时同步。

一、Inotify 简介

       inotify是一种强大的、细粒度的、异步的文件系统事件控制机制。linux内核从2.6.13起,加入了inotify支持,通过inotify可以监控文件系统中添加、删除、修改、移动等各种事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools正是实施监控的软件。
       在使用rsync首次全量同步后,结合inotify对源目录进行实时监控,只有有文件变动或新文件产生,就会立刻同步到目标目录下,非常高效使用!

二、Inotify 安装

[root@nfs /]# uname -r
3.10.0-1062.el7.x86_64
[root@nfs /]# ls -l /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 root root 0 Feb 26 10:23 max_queued_events  # 设置inotify实例事件队列可容纳的事件数
-rw-r--r-- 1 root root 0 Feb 26 10:23 max_user_instances  #设置每个用户可以运行inotify工具命令的进程数
-rw-r--r-- 1 root root 0 Feb 26 10:23 max_user_watches  #设置inotify可以监视的文件数量
#说明:有这三个文件证明系统支持inotify
#查看三个文件的默认参数
[root@nfs /]# cat /proc/sys/fs/inotify/max_queued_events
16384
[root@nfs /]# cat /proc/sys/fs/inotify/max_user_instances 
128
[root@nfs /]# cat /proc/sys/fs/inotify/max_user_watches 
8192
#安装Inotify
[root@nfs /]# yum install -y inotify-tools

三、Inotify 主要命令

  1. Inotifywait命令

inotifywait [-hcmrq] [-e ] [-t ] [--format ] [--timefmt ] [ ... ]
Inotifywait命令常用参数
命令参数 命令说明
-m, --monitor 始终保持事件的监听状态
-r  --recursive 递归查询目录
-q, --quiet 输出信息少(只打印监控的事件信息)
-d, –daemon 跟–monitor一样,除了是在后台运行,需要指定–outfile把事情输出到一个文件。也意味着使用了–syslog
-o, –outfile 输出事情到一个文件而不是标准输出
-s, –syslog 输出错误信息到系统日志
--excludei  <pattern> 排除文件或者目录,不区分大小写
--timefmt <fmt>

自定义时间输出格式

常用的时间格式:

%d 日  %m 月 %y 年  %H:%M 时:分

--format <fmt>

自定义inotifywait的输出格式,

%w  事件发生时,监控文件或目录的名称信息

%f   事件发生时,将显示监控目录下触发事件的文件

或目录信息,否则为空

%e   显示发生的事件信息,将不同事件信息用逗号隔

%T    输出时间格式中定义的时间格式信息,通过

--timefmt 选项的语法格式进行设置

%Xe   显示事件发生的信息,不用的事件用X进行分

       ,可以修改X为指定的分隔符
————————————————
版权声明:本文为CSDN博主「十五十六」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/L835311324/article/details/80512499

-e <event>

监听指定事件,有几个常见的事件如下:

access:读取文件或目录内容

modify:修改文件或者目录内容

attrib:文件或者目录属性改变

close_write(常用):以可写方式打开的文件被关闭

close_nowrite:以只读方式打开的文件被关闭

open:文件或目录被打开

moved_to(常用):文件或目录移动到 

moved_from:文件从目录移动

move:移动文件或目录移动到监视目录

create(常用):在监视目录下创建文件或目录

delete(常用): 删除监视目录下的文件或目录

delete_self: 删除目录下的文件或目录

unmount :卸载文件系统

  2. Inotifywatch命令

inotifywatch [-hvzrqf] [-e ] [-t ] [-a ] [-d ] [ ... ]

四、Inotify优化

[root@nfs /]# echo "50000000" >/proc/sys/fs/inotify/max_queued_events
# 单进程可以监控的文件数量
[root@nfs /]# echo "50000000" >/proc/sys/fs/inotify/max_user_watches 
# 队列容纳事件的数量

#说明:意思配置文件重启系统会失效,需要放到rc.local文件中

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章