虽然rsync具有高安全性、备份迅速、支持增量备份等优点,但其单独运作的话,只适用于对实时性要求不高的小量数据备份

 

    但如果应用在高端业务系统中,动辄百万、千万量级数据,则效率很差,因为rsync在同步数据时,需要扫描所有文件后进行对比,然后进行差量传输。

 

    而且,rsync不能实时监测、同步数据,虽然它可以通过linux守护进程来触发,但是毕竟有一定的时间差。

 

-----------------------------------------------

 

Inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制。

Linux2.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*

 

会列出两个文件,分别是:inotifywaitinotifywatch两个命令。

 

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”,通过此参数可以指定要监控的事件,常见的事件有modifydeletecreateattrib

 

Man inotifywait