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命令常用参数主要有下面一些:

 

  • 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)运行脚本,测试

   inotifywait运行时,命令行会死循环,除非中断,否则shell无法使用,所以可以让脚本后台运行:

[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监控是调用系统接口,但是进程毕竟有限,如果有大量的小文件传输时,会出现明显的延迟。

 

 

 

 

posted @ 2017-05-24 21:45  Dreamfuture  阅读(88)  评论(0)    收藏  举报