zoukankan      html  css  js  c++  java
  • 二、Linux实时同步软件之inotify

    Linux实时同步软件之inotify

     

    Linux 内核从 2.6.13 版本开始提供了 inotify 通知接口,用来监控文件系统的各种变化情况,如文件存取、删除、移动等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。inotify可以通过调用系统接口,实时监视目录和文件的变化,再结合rsync,实现实时目录同步功能。确定系统内核版本后,就可以安装inotify软件包了。

    [root@nfs01 ~]# uname -r
    2.6.32-696.el6.x86_64
    [root@nfs01 ~]# ls /proc/sys/fs/inotify/
    max_queued_events  max_user_instances  max_user_watches
    #max_queued_events   表示监控时间队列           默认16384 可以使用cat命令查看
    #max_user_instances   表示最多监控实例数        默认128
    #max_user_watches     表示每个实例最多监控文件数    默认8192

     

    想要修改系统默认值,需要修改/etc/sysctl.conf文件

    [root@backup nfs]# vim /etc/sysctl.conf
    #末尾添加三行
    fs.inotify.max_queued_events =32768
    fs.inotify.max_user_instances =1024
    fs.inotify.max_user_watches =90000000

     

    • inotify软件安装及使用

    1)inotify软件包安装,可以官网下载(http://sourceforge.net/projects/inotify-tools/) 源码包编译安装,也可以yum安装,前提需要配置epel源。

    [root@nfs01 ~]#wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    [root@nfs01 ~]# yum install -y inotify-tools
    [root@nfs01 ~]# rpm -qa inotify-tools
    inotify-tools-3.14-1.el6.x86_64

     

    2)inotify常用参数

    inotify软件安装完成后有两个命令可使用,分别是/usr/bin/inotifywait 和/usr/bin/inotifywatch

    inotifywait <--- 实现对数据目录信息变化监控(重点了解的命令)

    inotifywatch <--- 监控数据信息变化,对变化的数据进行统计

    通常我们使用inotifywait命令查看目录信息变化即可,inotifywatch统计功能较少使用

    inotifywait命令常用参数主要有下面一些:

    命令参数

    参数说明

    -m|--monitor

    始终监听状态

    -d|--daemon

    后台监听,事件信息会被记录在指定文件中

    -r|--recursive

    递归监听目录数据变化

    -q|--quiet

    减少输出内容

    --timefmt

    设置日期格式 (%F=%Y-%m-%d年-月-日%T=%H:%M:%S 时:分:秒)

    --format

    设置输出信息的格式(%T 时间 %w监控目录%f变化文件 %e事件信息)

    -e

    指定检测的动作 ( closewrite 修改create创建 delete删除 movedto移动 )

    例:inotify -mrq --timefmt "%F %T" --format "%T %w/%f %e"

    -e creat,delete,movedto,closewrite /data

    • inotify+rsync实时同步

    1)实现原理

    inotify可以实现对特定的目录进行持续的数据监控,而rsync的--delete参数可以实现客户端和服务端指定的一个目录数据无差异同步功能,当inotify监控到目录数据变化时,可以通过脚本调用rsync服务,从而实现实时同步的功能。

    2)rsync服务搭建

    实现实时同步,首先保证服务端和客户端的rsync安装配置完成(上一篇介绍rsync服务部署),即客户端可以向备份服务器推送文件,测试如下:

    [root@nfs01 ~]# rsync -az /etc/sysconfig rsync_backup@172.16.1.41::nfs --password-file=/etc/rsync.password
    #客户端推送
    [root@backup ~]# ls /nfs
    sysconfig
    #服务端收到

     

     3)编写脚本

    inotify安装完成后,使用/usr/bin/inotifywait实时监控目录,当目录数据出现变化时,调用rsync服务,通过脚本实现:

    #!/bin/bash
    #inotify+rsync backup /data
    /usr/bin/inotifywait -mrq --format "%w%f" -e create,delete,moved_to,close_write /data |
    while read line
    do
    rsync -az /data/ --delete rsync_backup@172.16.1.41::nfs --password-file=/etc/rsync.password
    done

     

     

     4)运行脚本,测试

    [root@nfs01 data]# sh /root/inotify_rsync.sh &
    [1] 3555
    [root@nfs01 data]# touch {01..20}
    [root@nfs01 data]# ls
    01  02  03  04  05  06  07  08  09  10  11  12  13  14  15  16  17  18  19  20
    #客户端创建测试文件
    [root@backup nfs]# ls /nfs
    01  02  03  04  05  06  07  08  09  10  11  12  13  14  15  16  17  18  19  20
    #服务端成功接收,实现了实时同步的功能

     

    • inotify软件不足

    inotify监控是调用系统接口,但是进程毕竟有限,如果有大量的小文件传输时,会出现明显的延迟,实际生产中,使用较少。

     

     

    I have a dream so I study hard!!!
  • 相关阅读:
    查看网络接口
    httpd sshd firewalld 很多服务后面的d是什么意思
    CentOS7入门
    1005:取余,循环,找规律
    1006 Tick and Tick
    cv.Mat 与 .txt 文件数据的读写操作
    禁止别人用QQ号搜索到你,同时告诉你如何破解
    LaTex初学
    github上对一些名词的理解(之如fork)
    CCF Z字形扫描
  • 原文地址:https://www.cnblogs.com/yaokaka/p/11620751.html
Copyright © 2011-2022 走看看