实战:配置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开始正式并入内核。 [iyunv@xuegod63 ~]#uname -r 2.6.32-220.el6.x86_64 [iyunv@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 #表示每个实例最多监控文件数 查看具体参数值: [iyunv@xuegod63~]# cat /proc/sys/fs/inotify/max_queued_events
16384 [iyunv@xuegod63 ~]#cat /proc/sys/fs/inotify/max_user_instances 128 [iyunv@xuegod63 ~]#cat /proc/sys/fs/inotify/max_user_watches 8192 注:当要监控的目录、文件数量较多或者变化较频繁时,要加大这三个参数的值。 例如:可直接修改/etc/sysctl.conf配置文件,将管理队列设为32768,实例数设为1024,监控数设为9000000(建议大于监控目标的总文件数)。 [iyunv@xuegod63~]#vim /etc/sysctl.conf#以文件最后,添加以下内容 fs.inotify.max_queued_events= 32768 fs.inotify.max_user_instances= 1024 fs.inotify.max_user_watches= 90000000 [iyunv@xuegod63 ~]#sysctl -p#使修改后的sysctl.conf文件生效 查看是否修改成功: [iyunv@xuegod63~]# cat /proc/sys/fs/inotify/max_user_watches
90000000 安装inotify-tools-3.13.tar: 安装inotify-tools后,将拥有inotifywait、inotifywatch辅助工具程序,从而来监控、汇总文件系统改动情况。 [iyunv@xuegod63 ~]#tar -zxvf inotify-tools-3.13.tar.gz [iyunv@xuegod63 ~]#cd inotify-tools-3.13 [root@xuegod63inotify-tools-3.13]# make
测试: 使用inotifywait命令监控网站目录/var/www/html发生的变化。然后在另一个终端向/var/www/html目录下添加文件、移动文件,查看屏幕输出结果。 [iyunv@xuegod63 ~]#inotifywait -h 常用参数: -e用来指定要监控哪些事件。 这些事件包括:create创建,move移动,delete删除,modify修改文件内容,attrib属性更改。 -m表示持续监控 -r表示递归整个目录 -q 表示简化输出信息。
[iyunv@xuegod63 ~]#inotifywait -mrq -e create,move,delete,modify /var/www/html/ 在另一个终端登录,在/var/www/html目录进行相关的操作,然后,回到原来的终端查看监控变化情况。 [iyunv@xuegod63 ~]#echo aaa > /var/www/html/a.html [iyunv@xuegod63 ~]#mkdir /var/www/html/test [iyunv@xuegod63 ~]#cp /etc/passwd /var/www/html/test/ [iyunv@xuegod63 ~]#rm -rf /var/www/html/test/passwd 查看变化: [iyunv@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,同步时不需要输入密码 [iyunv@xuegod63 ~]#ssh-keygen [iyunv@xuegod63 ~]#ssh 192.168.1.64 Last login: WedNov 12 17:51:35 2014
编写一个脚本 [iyunv@xuegod63 ~]#cat a.sh #!/bin/sh SRC=/var/www/html DST=root@192.168.1.64:/web-back inotifywait -mrq-e modify,delete,create,attrib ${SRC} | while read D E F do /usr/bin/rsync-ahqzt --delete $SRC $DST done [iyunv@xuegod63 ~]#cp /root/a.sh /opt/inotify_rsync.sh [iyunv@xuegod63~]# echo '/opt/inotify_rsync.sh &' >> /etc/rc.local
|