公司的6台tomcat服务器内的东西是一样的,每次传索引的时候都特别麻烦,偶尔疏忽的话,内容是不一样的。本文将介绍rsync_inotify结合实现文件的实时同步。
对于网上的大部分类似文章,每次做实验都达不到我想要的结果,要么是同步目录不一样,要么不能同时同步多个目录和多台机器。本文将很好的解决这个问题,
这种配置在公司生产平台上跑了半个月,没有出现任何问题,效果很好,节省好多时间和不必要的麻烦。
开始:
前提:配置机器的信任关系,这个很简单,网上有很多类似文章,这里不多介绍
安装inotify 这里采用的是rpm的方式安装的,很简单 rpm -ivh inotify-tools-3.13-1.i386.rpm 它依赖inotify-tools-devel-3.13-1.i386.rpm
安装完成。
notif可以监视的文件系统事件包括:
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_MOVE,文件被移动
相关参数:
--timefmt 时间的格式
--format 输出的格式
-m 保持一直监听
-r 是递归查看目录
-q 是打印出事件
-e 监听的事件
配置脚本:
vi rsync.sh
#!/bin/sh
#set -x
src="/a /b" #同步的2个目录
des_ip="*.*.*.* *.*.*.*" #同步目的IP
#function
inotify_fun ()
{
/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y-%H:%M' --format '%T %w%f' \
-e modify,delete,create,move $1|while read time file #监视、递归
do
for ip in $des_ip #轮询同步
do
echo "`date +%Y%m%d-%T`: rsync -avzq --delete --exclude=/a/c --partial --progress $1 $ip:`dirname $1`"
rsync -avzq --delete --exclude=/a/c --partial --progress $1 $ip:`dirname $1`
echo #排除目录
done
done
}
#main
for a in $src
do
inotify_fun $a &
done
执行方式:nohup
在当前目录下新建start-rsync.sh
内容为 nohup ./rsync.sh &
这样我们可以通过nohup.out实时跟踪文件传递情况,同步也可以实时在后台进行。别忘了给脚本加权限
将 start-rsync.sh加入到/etc/rc.local开机启动
配置完成