zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    python3 获取n天后的日期时间
    python3 获取n年前日期
    RequestsDependencyWarning: urllib3 (1.25.2) or chardet (3.0.4) doesn't match a supported version!
    html5 富文本编辑器
    python3 md5 加密
    python3 获取当前日期以及7天后的日期(2016-03-20 11:45:39 形式)
    python3 生成随机手机号
    python 列表 字典转json
    (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1076)')))
    【Python】时间与时间戳
  • 原文地址:https://www.cnblogs.com/ywb123/p/11131370.html
Copyright © 2011-2022 走看看