实战:配置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 IP:192.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