inotify+rsync实现服务器之间目录文件实时同步

Linux系统 gongyj 1649℃ 已收录 0评论

作为系统运维人员,在工作中大多会遇到集群服务器的维护,在规模不大的时候,采用手动部署逐台更新项目配置,可能会应付的了不会出问题,可是一旦业务扩增服务器的规模扩大一个级别,则手动逐台更改配置文件则效率开始变的地下和容易产生错误。同样,我们也需要同步代码,让多台机器之间代码实时更新,完全同步。

inotify.jpg

inotify+rsync可以实现,一点变动,多点实时更新的效果。inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。  在上面章节中,我们讲到,rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rsync同步,这样刚好解决了同步数据的实时性问题。

下面是安装计划步骤

inotify.png

1、确认系统对inotify的支持, 看看是否有 /proc/sys/fs/inotify/目录,以确定内核是否支持inotify。 

ls /proc/sys/fs/inotify/
max_queued_events  max_user_instances  max_user_watches

2、安装程序,inotify 和 rsync
rsync 一般系统会默认安装好,直接使用即可,如不清楚,请看博客中rsync的帖子。
下载inotify,地址:http://sourceforge.net/projects/inotify-tools/

编译安装

tar xf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./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、实际示例:

先配置好rsync服务,并启动,然后编写自动监控脚本

vim inotify.sh
#!/bin/sh
src=/data/website/webapps
des=inotifyhome                   
ip="172.16.1.2 172.16.1.4 172.16.1.5"
user=admin
/usr/local/bin/inotifywait -mrq -e modify,delete,create,attrib $src |  while read file
do
    for i in $ip
        do 
            rsync -vzrtopgl --delete --progress  --password-file=/etc/rsyncd/rsync.password $src $user@$i::$des 
        done
done

4、运行脚本

inotify.sh &

5、服务器报错

upper limit on inotify watches reached!
Please increase the amount of inotify watches allowed per user via `/proc/sys/fs/inotify/max_user_watches’.

原因:

cat一下这个文件,默认值是8192,要监控的目录下文件太多,超过了默认监控值

解决:

echo 8192000 > /proc/sys/fs/inotify/max_user_watches

调大该数值即可。

本站文章如未注明,均为原创丨本网站采用BY-NC-SA协议进行授权,转载请注明转自:http://blog.chopmoon.com/favorites/208.html
喜欢 (1)
发表我的评论
取消评论

表情 代码 贴图 加粗 链接 私信 删除线 签到

Hi,请填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
正在加载中……