inotify事件监控工具(inotify+rsync组合)
一、rsync+inotify组合的起源
rsync(remote sync)远程同步工具,虽然可以实现增量备份,但是自身存在不足,因为文件数太多时,比对的时间会非常耗时,即便是放到定时任务里最快是一分钟执行一次,故inotify的出现,可以缓解rsync的不足之处
因为定时任务是每分钟触发的,希望时时同步
NFS性能差:吞吐量和容量(不能扩容)问题
单点:只有一个,因为一台服务器造成全部服务器集群全不能用了(做一个NFS的备份服务器,(通常是rsync备份服务器/backup)inotify秒级同步)
高可用:一个坏了,还有其他的可以顶上
吞吐量:一台服务器的存储速度
分布式存储:I/O速度和容量问题解决了,但是读写速度太快,网卡成为瓶颈
二、inotify简介
cron最快是每分钟同步的,inotify反应灵敏、时时监控,是一种异步的文件系统监控机制,可以监控文件系统中添加、删除、修改、移动等各种事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况。
用inotify时时监控文件或目录的改变情况,一旦发生变化就推给rsync
三、inotify
(1)查看当前系统是否支持inotify
uname -r 看 linux内核是否达到了2.6.13
在/proc/sys/fs/inotify目录下有三个文件,对inotify机制有一定的限制
#显示这三个文件证明支持
max_user_watches:设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)
max_user_instances:设置每个用户可以运行的inotifywait或inotifywatch命令的进程数。
max_queued_events:设置inotify实例事件(event)队列可容纳的事件数量。
(2)Yum安装inotify-tools
一共安装了2个工具,即inotifywait和inotifywatch
inotifywait:在被监控的文件或目录上等待特定文件系统事件(open,close,delete等)发生,执行后处于阻塞状态,适合shell脚本中使用。
inotifywatch:收集被监视的文件系统使用度统计数据,指文件系统事件发生的次数统计。
inotifywait命令
inotifywait --help
inotifywait参数
|
含义说明
|
-r --recursive
|
递归查询目录
|
-q --quiet
|
打印很少的信息,仅仅打印监控事件的信息
|
-m,--monitor
|
始终保持事件监听状态
|
--exclude
|
排除文件或目录时,不区分大小写。
|
--timefmt
|
指定时间输出的格式
|
--format
|
打印使用指定的输出类似格式字符串
|
-e,--event
|
通过此参数可以指定需要监控的事件,如下一个列表所示
|
Events
|
含义
|
access
|
文件或目录被读取
|
modify
|
文件或目录内容被修改
|
attrib
|
文件或目录属性被改变
|
close
|
文件或目录封闭,无论读/写模式
|
open
|
文件或目录被打开
|
moved_to
|
文件或目录被移动至另外一个目录
|
move
|
文件或目录被移动到另一个目录或从另一个目录移动至当前目录
|
create
|
文件或目录被创建在当前目录
|
delete
|
文件或目录被删除
|
umount
|
文件系统被卸载
|
(3)人工监测事件
①测试create
②测试delete
③测试close_write
④测试moved_to
脚本可以加入开机启动:
echo "/bin/sh /server/scripts/inotify.sh &" >> /etc/rc.local
notify实时并发:
经过测试,每秒200文件并发,数据同步几乎无延迟(小于1秒)
(四)编写实时监控脚本
inotify时时监听/data下的动作,一旦有变化,就立马推给rsync,增量同步到服务端
对文件的所有修改动作:创建、写关闭、删除
几种缓解NFS弊端的架构:
NFS读写分离架构(分摊读压力)
双主双写架构(分摊写压力)
但是上面两种依然是单点的,不可扩容的