• Linux系统——Inotify事件监控工具


    每秒传输文件200

    Rsync放在定时任务中也只是一分钟执行一回,要想达到实时的效果,为防止单点nfs架构故障,再启动一台nfs服务器作为主nfs服务器的备份服务器,此时需要inotify实时同步数据(秒级别同步),而这台备份nfs服务器可以作为rsync备份服务器

    Inotify是一种异步的文件系统事件监控机制软件,通过inotify可以监控文件系统中添加,删除,修改,移动等各种事件,利用这个内核接口,第三方软件就可以监控文件系统性文件的各种变化情况。

    Inotify的软件版本

    (1)inotify-tools

    (2)sersync

    (3)lsyncd

    其中sersync版本软件是rsyncinotify的结合版本

     

    yum仓库安装

    从网上下载一个epel.repoyum

    1)先查看wget软件包是否安装,若没有则yum安装wget

    # yum -y install wget

    2# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

              把文件下载到这个位置        从哪里下载

     

    (3# yum -y clean all

     

    4# yum makecache

     

    Inotify安装步骤

    # yum -y install inotify-tools

     

    # which inotifywait

     

    inotifywait参数

    含义说明

    -r --recursive

    递归查询目录

    -q --quiet

    打印很少的信息,仅仅打印监控事件的信息

    -m--monitor

    始终保持事件监听状态

    --exclude

    排除文件或目录时,不区分大小写。

    --timefmt

    指定时间输出的格式

    --format

    打印使用指定的输出类似格式字符串

    -e--event

    通过此参数可以指定需要监控的事件,如下一个列表所示

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

    Events

    含义

    access

    文件或目录被读取

    modify

    文件或目录内容被修改

    attrib

    文件或目录属性被改变

    close

    文件或目录封闭,无论读/写模式

    open

    文件或目录被打开

    moved_to

    文件或目录被移动至另外一个目录

    move

    文件或目录被移动到另一个目录或从另一个目录移动至当前目录

    create

    文件或目录被创建在当前目录

    delete

    文件或目录被删除

    umount

    文件系统被卸载

     

    人工测试监控事件

    开启两个窗口

    测试create(创新事件)

    # inotifywait -mrq --timefmt '%y %m %d %H %M' --format '%T %w %f' -e create /backup

    -mrq-m 进行不间断持续监听

      -q 只输入简短信息

    -r 递归监控整个目录包括子目录

    --timefmt ‘’ 指定输出的时间格式

    %y %m %d %H %M----“年 月 日 小时 分钟”

    --format ‘’ 输出的不仅是时间,还有路径,会按照指定的格式输出变化的路径

    %T %w %f-----“时间 路径 文件名”

    -e 指定监控事件类型,“以create创建事件为例”

    /backup 监控的目录

     

    %w%f 表达的是路径+文件名,也就是绝对路径;

    若管道符给rsync,就可以实时传送创建事件

    测试delete(删除事件)

    # inotifywait -mrq --timefmt '%y %m %d %H %M' --format '%T %w %f' -e delete /backup

     

     

    当删除指定目录的文件时,delete事件有更新跟踪

    测试close_write(写关闭事件)以write方式打开文件并关闭

    close_nowrite 以非write方式打开文件并关闭

    当在指定目录中,写入文件信息或创建文件预备写入信息时,写关闭时间会更新信息,记录情况。通常监控echo”、“touch”、“vim”命令。

    # inotifywait -mrq --timefmt '%y %m %d %H %M' --format '%T %w %f' -e close_write /backup

     

     

    测试moved_to(移动事件)将文件移入被监测的目录

    moved_from将文件移动被监测的目录出去

    # inotifywait -mrq --timefmt '%y %m %d %H %M' --format '%T %w %f' -e moved_to /backup

     

    编写inotify实时监控脚本

    inotify实时监控放在后台(在命令后面加“&”)

    # inotifywait -mrq --timefmt '%y %m %d %H %M' --format '%T %w %f' -e moved_to /backup &

    # backup_Server=备份服务器的IP地址

     Inotify绝对路径 -mrq --format ‘%w%f’ -e create,close_write,delete /data | while read line

     

    Rsync绝对路径

    命令 | while read line(变量)默认将管道符左边的值复制到line这个变量中,执行while循环

    关键参数调整

    /proc/sys/fs/inotify目录下有三个文件,对inotify机制有一定的限制
    1max_user_watches:设置inotifywaitinotifywatch命令可以监视的文件数量(单进程)
    2max_user_instances:设置每个用户可以运行的inotifywaitinotifywatch命令的进程数
    3max_queued_events:设置inotify实例事件(event)队列可容纳的事件数量。

    inotify优点及缺点

    (1)优点

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

    (2)缺点

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

    sersync功能多:(inotify+rsync命令)

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

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

    1)inotifysersync+ rsync,是文件级别的。
    2drbd文件系统级别,文件系统级别,基于block块同步,缺点:备节点数据不可用
    3)第三方软件的同步功能:mysql同步(主从复制),oraclemongodb
    4)程序双写,直接写两台服务器。
    5)利用产品业务逻辑解决(读写分离,备份读不到,读主)

     

    架构解析:

    一台服务器的读写速度成为吞吐量

     

    NFS的单主双写模式(当读取压力大时使用该架构,但为单点、不可扩容、吞吐量低,成本高)

    单主模式的的吞吐量低,不能无限扩容,小企业才会使用,大中企业不会使用这种架构

     

    用户上传的图片、附件存储在主NFS中,但是主NFS通过rsync+inotify进行实时同步,同步两个完全一样的作为备份:NFS备份1NFS备份2;同步的目的在于Web服务器读取数据NFS备份中上传过来的数据

    Web服务器将读取的压力不再给主NFS,而是均衡负载到NFS备份1NFS备份2上。这样。写入的压力给了主NFS,读取的压力在NFS备份上,这种方法称为读写分离,可以提高NFS性能(通常,互联网20%的压力在写入,80%的压力在读取,相当于多台NFS分担压力)。

    NFS的双主双写模式(当写入压力大时使用该架构,网卡的使用要求极高,一般为万兆网卡)

     

    环境后方为两个双主NFS服务器(记一个为IP1,一个为IP2),若开发时设定图片在IP1中写入,视频在IP2中写入,这样图片和视频的写入压力被分散。

    假设,Web服务器的挂载目录都有两个共享目录(一个为/backup1,、另一个为/backup2),把IP1的主NFS服务器挂载到/backup1上,把IP2的主NFS服务器挂载到/backup2上,每台Web服务器都将NFS存储挂载到不同的共享目录上。开发默认,不论图片还是附件都先通过/backup1目录中读取,若/backup1中没有读取到,就去/backup2中读取,若都为读取到目标数据,则不存在该目标数据。通常,用来缓解NFS的写入压力。

    集群架构的搭建

    NFSNFS之间通过rsyncinotify传递数据,进行数据间的实时同步(备份),NFSWeb服务器之间通过远程挂载进行数据共享

  • 相关阅读:
    python的参数传递
    django的objects级别的权限控制
    django如何将mysql数据库转化为model
    django的orm查询使用in的保序
    多用户OFDM系统资源分配研究
    第一代到第四代多址技术:从FDMA、TDMA、CDMA到OFDMA
    Kaggle比赛总结
    4 二维数组中的查找 JavaScript
    5 替换空格 JavaScript
    简单的HTTP协议
  • 原文地址:https://www.cnblogs.com/daisy118/p/10010519.html
Copyright © 2020-2023  润新知