虽然rsync具有高安全性、备份迅速、支持增量备份等优点,但其单独运作的话,只适用于对实时性要求不高的小量数据备份
但如果应用在高端业务系统中,动辄百万、千万量级数据,则效率很差,因为rsync在同步数据时,需要扫描所有文件后进行对比,然后进行差量传输。
而且,rsync不能实时监测、同步数据,虽然它可以通过linux守护进程来触发,但是毕竟有一定的时间差。
-----------------------------------------------
Inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制。
Linux从2.6.13版本起,加入了对其的支持。
通过inotify可以监控文件系统中添加、删除、修改、移动等各种细微事件,利用这个内核接口,第三方软件可以监控文件系统下文件的各种变化情况。
Inotify-tools 就是这样一个第三方软件。
Inotify可以监控文件系统的各种变化,当文件有任何变动时,会触发rsync同步,这样刚好解决了rsync同步的实时性问题。
------------------------------------------------------
安装inotify工具inotify-tools
#uname -r
# ll /proc/sys/fs/inotify
-rw-r--r-- 1 root root 0 04-13 19:56 max_queued_events
-rw-r--r-- 1 root root 0 04-13 19:56 max_user_instance
-rw-r--r-- 1 root root 0 04-13 19:56 max_user_watches
会列出三项输出,表示该系统默认支持inotify,
#编译安装inotify-tools,参数默认
#./configure &&make && make install
# ll /usr/local/bin/inotify*
会列出两个文件,分别是:inotifywait和inotifywatch两个命令。
;inotifywait用于等待文件或文件集上的一个特定事件,可以监控任何文件和目录设置,并且可以递归地监控整个目录树
;inotifywatch用于收集被监控的文件系统统计数据,包括没个inotify事件发生多少次等信息。
-----------------------------------------
Inotify的相关参数:
Inotify定义了一些接口参数,可以用来限制inotify消耗kernel memory的大小。
由于这些参数都是内存参数,所有可以根据应用需求,实时调节其大小。
"/proc/sys/fs/inotify/max_queued_events"
表示调用inotify_init时分配到inotify instance中可排队的event数的最大值,超出这个值的事件被丢弃,但会触发IN_Q_QVERFLOW事件
"/proc/sys/fs/inotify/max_user_instances"
表示每一个real user ID可创建的inotify instances数量的上限
"/proc/sys/fs/inotify/max_user_watches"
表示没个inotify实例相关联的watches的上限,也就是没个inotify实例可监控的最大目录数量。如果监控的文件数目巨大,需要根据实际情况适当增大此值的大小。
例如: echo 30000000 > /proc/sys/fs/inotify/max_user_watches
------------------------------
Inotifywati相关参数:
Inotifywait是一个监控等待事件,可以配合shell脚本使用它。
-m,即“--monitor”,表示始终保持事件监听状态。
-r,即“--recursive”,表示递归查询目录
-q,即“--quiet”,表示打印出监控事件
-e,级“--event”,通过此参数可以指定要监控的事件,常见的事件有modify、delete、create和attrib等
Man inotifywait