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

浙公网安备 33010602011771号