inotify+rsync作为系统运维人员,在工作中大多会遇到集群服务器的维护,在规模不大的时候,采用手动部署逐台更新项目配置,可能会应付的了不会出问题,可是一旦业务扩增服务器的规模扩大一个级别,则手动逐台更改配置文件则效率开始变的地下和容易产生错误。
inotify+rsync可以实现,一点变动,多点实时更新的效果。inotify技术从kernel 2.6.13开始正式并入内核,RHEL5已经支持。
下面是安装计划步骤
1、确认系统对inotify的支持, 看看是否有 /proc/sys/fs/inotify/目录,以确定内核是否支持inotify。
[root@nginx-m inotify]# ls /proc/sys/fs/inotify/
max_queued_events max_user_instances max_user_watches
2、安装程序,inotify 和 rsync
rsync 一般系统会默认安装好,直接使用即可,如不清楚,请看网上查找相关rsync的帖子。
下载inotify ; 地址:http://inotify-tools.sourceforge.net/
编译安装
./configure
make
make install
安装完毕后会有一个inotifywait命令,可以通过man inotifywait 查看具体的命令帮助。
主要通过inotifywait 监控具体目录和文件的变动。
inotify 可以监视的文件系统事件包括:
IN_ACCESS,即文件被访问
IN_MODIFY,文件被 write
IN_ATTRIB,文件属性被修改,如 chmod、chown、touch 等
IN_CLOSE_WRITE,可写文件被 close
IN_CLOSE_NOWRITE,不可写文件被 close
IN_OPEN,文件被 open
IN_MOVED_FROM,文件被移走,如 mv
IN_MOVED_TO,文件被移来,如 mv、cp
IN_CREATE,创建新文件
IN_DELETE,文件被删除,如 rm
IN_DELETE_SELF,自删除,即一个可执行文件在执行时删除自己
IN_MOVE_SELF,自移动,即一个可执行文件在执行时移动自己
IN_UNMOUNT,宿主文件系统被 umount
IN_CLOSE,文件被关闭,等同于(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)
IN_MOVE,文件被移动,等同于(IN_MOVED_FROM | IN_MOVED_TO)
注:上面所说的文件也包括目录。
inotifywait 命令的常用参数包括:
-m, --monitor 保持一直监听
-r, --recursive 若有多级目录循环递归每一层。
-q, --quiet 静默式运行
-e <event>, --event <event> create,move,delete,modify
3、实际示例:
#cat inotify.sh
#!/bin/sh
src=/usr/local/nginx/conf/
des=inotifyhome
ip=172.16.1.2 172.16.1.4 172.16.1.5
user=sysman
/usr/local/bin/inotifywait -mrq -e modify,delete,create,attrib $src | while read file
do
for i in $ip
do
rsync -vzrtopgl --delete --progress --files-from=file.list --password-file=/etc/rsyncd.pwd $src
done
done
4、运行脚本
[root@localhost]# inotify.sh