实战:配置rsync+inotify实现实时同步

Linux内核从2.6.13版本开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如文件存取、删除、移动等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。

使用rsync工具与inotify机制相结合,可以实现触发式备份(实时同步),只要原始位置的文档发生变化,则立即启动增量备份操作,否则处于静态等侍状态,这样一来,就避免了按固定周期备份进存在的延迟性、周期过密等问题。

inotify-tools-3.13.tar

下载地址:http://sourceforge.net/projects/inotify-tools/

 

 

扩展:

常见的开源软件下载网址:

SourceForge.net,又称SF.net,是开源软件开发者进行开发管理的集中式场所。

SourceForge 是全球最大开源软件开发平台和仓库,网站建立的宗旨,就是为开源软件提供一个存储、协作和发布的平台。SourceForge 上拥有大量非常优秀的开源软件,事实上,这些软件完全可以代替一些商业软件。

实战4:把xuegod63.cn服务器上的/var/www/html目录时实同步到xuegod64.cn主机上的/web-back目录中。

inotify-tools服务端:xuegod63.cn IP192.168.1.63

客户端:xuegod64.cnIP:192.168.1.64

查看是否支持inotify,从kernel 2.6.13开始正式并入内核。

[root@xuegod63 ~]#uname -r

2.6.32-220.el6.x86_64

[root@xuegod63 ~]#ll /proc/sys/fs/inotify/

root@xuegod63 ~]#ll /proc/sys/fs/inotify/

total 0

-rw-r--r-- 1 rootroot 0 Apr 10 09:09 max_queued_events

-rw-r--r-- 1 rootroot 0 Apr 10 09:09 max_user_instances

-rw-r--r-- 1 rootroot 0 Apr 10 09:09 max_user_watches

注:

在linux内核中,默认的inotify机制提供了三个调控参数:

max_queued_events#表示监控事件队列

max_user_instances#表示最多监控实例数

max_user_watches #表示每个实例最多监控文件数

查看具体参数值:

[root@xuegod63~]# cat /proc/sys/fs/inotify/max_queued_events

 

16384

[root@xuegod63 ~]#cat /proc/sys/fs/inotify/max_user_instances

128

[root@xuegod63 ~]#cat /proc/sys/fs/inotify/max_user_watches

8192

注:当要监控的目录、文件数量较多或者变化较频繁时,要加大这三个参数的值。

例如:可直接修改/etc/sysctl.conf配置文件,将管理队列设为32768,实例数设为1024,监控数设为9000000(建议大于监控目标的总文件数)。

[root@xuegod63~]#vim /etc/sysctl.conf#以文件最后,添加以下内容

fs.inotify.max_queued_events= 32768

fs.inotify.max_user_instances= 1024

fs.inotify.max_user_watches= 90000000

[root@xuegod63 ~]#sysctl -p#使修改后的sysctl.conf文件生效

查看是否修改成功:

[root@xuegod63~]# cat  /proc/sys/fs/inotify/max_user_watches

90000000

安装inotify-tools-3.13.tar:

安装inotify-tools后,将拥有inotifywait、inotifywatch辅助工具程序,从而来监控、汇总文件系统改动情况。

[root@xuegod63 ~]#tar -zxvf inotify-tools-3.13.tar.gz

[root@xuegod63 ~]#cd inotify-tools-3.13

[[email protected]]# ./configure

[[email protected]]# make

 

[[email protected]]# make install

测试:

使用inotifywait命令监控网站目录/var/www/html发生的变化。然后在另一个终端向/var/www/html目录下添加文件、移动文件,查看屏幕输出结果。

[root@xuegod63 ~]#inotifywait -h

常用参数:

-e用来指定要监控哪些事件。

这些事件包括:create创建,move移动,delete删除,modify修改文件内容,attrib属性更改。

-m表示持续监控

-r表示递归整个目录

-q 表示简化输出信息。

[root@xuegod63 ~]#inotifywait -mrq -e create,move,delete,modify /var/www/html/

在另一个终端登录,在/var/www/html目录进行相关的操作,然后,回到原来的终端查看监控变化情况。

[root@xuegod63 ~]#echo aaa > /var/www/html/a.html

[root@xuegod63 ~]#mkdir /var/www/html/test

[root@xuegod63 ~]#cp /etc/passwd /var/www/html/test/

[root@xuegod63 ~]#rm -rf /var/www/html/test/passwd

查看变化:

[root@xuegod63 ~]#inotifywait -mrq -e create,move,delete,modify /var/www/html/

/var/www/html/CREATEa.html

/var/www/html/MODIFY a.html

/var/www/html/CREATE,ISDIR test

/var/www/html/test/CREATE passwd

/var/www/html/test/MODIFY passwd

 

使用inotifywait输出的监控结果中,每行记录中依次包括目录、事件、文件。据此可以识别变动情况。

编写触发式同步脚本:

第一步,同步时不需要输入密码:

xuegod63发生变化后,直接将发生变化的数据同步到xuegod64,同步时不需要输入密码

[root@xuegod63 ~]#ssh-keygen

[root@xuegod63 ~]#ssh-copy-id [email protected]

[root@xuegod63 ~]#ssh 192.168.1.64

Last login: WedNov 12 17:51:35 2014

 

编写一个脚本

[root@xuegod63 ~]#cat a.sh

#!/bin/sh

SRC=/var/www/html

[email protected]:/web-back

inotifywait -mrq-e modify,delete,create,attrib ${SRC} | while read D E F 

do

/usr/bin/rsync-ahqzt --delete $SRC $DST

done

[root@xuegod63 ~]#cp /root/a.sh /opt/inotify_rsync.sh

[root@xuegod63~]# echo '/opt/inotify_rsync.sh &' >> /etc/rc.local

 

 实战:配置rsync+inotify实现实时同步备份_第1张图片