inotify

inotify事件监控工具

inotify 实施准备

大前提rsync daemon 服务配置成功,可以再rsync客户端推送拉取数据,然后才能配置inotify服务。

image_1cjpiqlkvn1t1c3n1f7f1vtb5v29.png-460.6kB

1.在安装inotify-tools前请先确认你的linux内核是否达到了2.6.13,并且在编译时开启CONFIG_INOTIFY选项,也可以通过以下命令检测查看当前系统是否支持inotify

image_1cjpj5412rjgeu0in22cctm2m.png-8.9kB

关键参数说明

image_1cjpj66jh14au1at31g3l9fc22r13.png-12.9kB

2.配置云Yum仓库与安装inotify-tools

2.1首先得保证可以上网

image_1cjnl2n8a14bl1kus17np1pdknc29.png-13.2kB

2.2首先得有wget这个安装包,没有就装

image_1cjnlc1nk1rke1a3h1jkt1ouca7d13.png-1.8kB

image_1cjnl9rse16jf1hl81f8p14uiqlgm.png-2.2kB

2.3清空/etc/yum.repos.d/目录下是Yum配置文件,可以:

image_1cjnlfein18fs15kqf8eb9vi11g.png-6.7kB

2.4利用wget从网上下载Yum配置文件

image_1cjnlo5efa6n1bhb1qh318r2g461t.png-3.7kB

image_1cjnlp382nv29lj1baamvpbv2a.png-2.4kB

2.5清空缓存与建立新的缓存

image_1cjnlsodlbi81kjh19dmu461oco2n.png-5.6kB

image_1cjnm51odbi81h5r1vc21tj81n6s6d.png-1.9kB

2.6安装inotify-tools

image_1cjnm9iev1f79nng1pc6191011756q.png-2.1kB

image_1cjnma8u61rtuqko17q4qnoe6f77.png-3.4kB

  • 一共安装了2个工具,即inotifywaitinotifywatch
  • inotifywait:在被监控的文件或目录上等待特定文件系统事件(open,close,delete等)发生,执行后处于阻塞状态,适合shell脚本中使用。
  • inotifywatch:收集被监视的文件系统使用度统计数据,指文件系统事件发生的次数统计。

3.1inotifywait命令常用参数详解

image_1cjnn80gh1fhvudf17fn12sr1k3s8k.png-31.4kB

3.2-e :--event的各种事件含义

image_1cjnqjmt8c2t1e9c19hloh5tsv9.png-37.6kB

4.人工测试监控事件

一个账号开启两个窗口

4.1 测试create

4.1.1第一个窗口测试输出(会卡住)

image_1cjo59j9457o1rcqefg1hjt1jgj9.png-4.5kB

4.1.2第二个窗口测试

image_1cjo5c66b17k2t5823cfu1u03m.png-2kB

4.1.3检查第一个窗口会发现

image_1cjo5dlfn1nsv1kh1dek6n6196p13.png-6.1kB

image_1cjo5f1t5lsddqpdiknqis1e1g.png-10.5kB

4.2测试delte

4.2.1第一个窗口测试输出(会卡住)

image_1cjo5iocqnrsdde1fo916l11sh91t.png-4.7kB

4.2.2第二个窗口测试

image_1cjo5ju24bqouj1a5k1lo2g3s2a.png-2.1kB

4.2.3检查第一个窗口会发现

image_1cjo5kbl28cscng132vm6k14142n.png-6.4kB

image_1cjo5l1d09j9u6u1t32dea170834.png-2.9kB

4.3测试close_write

4.3.1第一个窗口测试输出(会卡住)

image_1cjo5papp1v1m14248891jsekk83h.png-5.3kB

4.3.2第二个窗口测试

image_1cjo5tfehdlg1dgg1afatog1dsu3u.png-5.8kB

4.3.3检查第一个窗口会发现

image_1cjo5tvva14kn1bgg16d2vru1b6l4b.png-7.8kB

image_1cjo5ufbia9sb8r1jnh934cv74o.png-3.3kB

4.4测试move_to

4.4.1第一个窗口测试输出(会卡住)

image_1cjo669jj11dm132rlf381614j26v.png-4.6kB

4.4.2第二个窗口测试

image_1cjo64nj115ggh6mg9t1i951p2665.png-4kB

4.4.3检查第一个窗口会发现

image_1cjo65ai91ku6b7vielv71qsh6i.png-6.8kB

5.1编写inotify实时监控脚本

image_1cjpjemjg18dteoahmb1vbn1j891g.png-17.2kB

5.2脚本可以加入开机启动:

image_1cjpjgkcs1s3l1e664d91vrj105i1t.png-3kB

提示:一个& 代表从后台开始运行该条命令。

6.1关键参数调整

/proc/sys/fs/inotify目录下有三个文件,对inotify机制有一定的限制

  • max_user_watches:设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)
  • max_user_instances:设置每个用户可以运行的inotifywait或inotifywatch命令的进程数
  • max_queued_events:设置inotify实例事件(event)队列可容纳的事件数量。

6.2实战调整

image_1cjpjlspjtb41ltu3it1lah1km12a.png-30.6kB

inotify 优点:监控文件系统事件变化,通过同步工具实现实时数据同步。


inotify 缺点:

  • 并发如果大于200个文件(10-100k),同步就会有延迟
  • 我们前面写的脚本,每次都是全部推送一次,但确实是增量的。也可以只同步变化的文件,不变化的不理。
  • 监控到事件后,调用rsync同步是单进程的,而sersync为多进程同步。既然有了inotify-tools,为什么还要开发sersync?

8.serysync功能多=(inotify+rsync命令)

  • 支持通过配置文件管理
  • 真正的守护进程socket
  • 可以对失败文件定时重传(定时任务功能)
  • 第三方的HTTP接口(例如:更新cdn缓存)
  • 默认多进程rsync同步

9.高并发数据实时同步方案小结:

  • inotify(sersync)+ rsync,是文件级别的。
  • drbd文件系统级别,文件系统级别,基于block块同步,缺点:备节点数据不可用
  • 第三方软件的同步功能:mysql同步(主从复制),oracle,mongodb
  • 程序双写,直接写两台服务器。
  • 利用产品业务逻辑解决(读写分离,备份读不到,读主)
    image_1cjpk4p8v1qmt1c611ucar2prqi37.png-214.9kB

说明:

  • 用户上传的图片或者附件单独存在NFS主服务器上;
  • 用户读取数据从两台NFS备份服务器上读取;
  • NFS主和两台NFS备份通过inotify+rsync方式进行实时同步。

9.6NFS集群(1,4,5方案整合)(双写主存储,备存储用inotify(sersync)+rsync

image_1cjpk8kumtcoinj39ir0q1m9q3k.png-275.1kB