由于线上的使用的是tomcat集群,所以每次上传程序都要传好几个服务器,因此决定使用rsync+inotify实现自动同步程序。
实现方案: tomcat-01 10.0.0.41 同步镜像 安装rsync服务,默认监听tcp873端口,接受主服务器文件
tomcat-02 10.0.0.42 发布服务器 实现inotify监控动作,执行rsync同步命令
程序只要在tomcat-02上更新一次,程序会自动同步到tomcat-01上。
tomcat-01: 安装rsync,安装过程很简单,直接yum install rsync -y 即可
我安装的是rsync 3.0.6
配置文件 /etc/rsync.conf
uid=root 启动守护进程使用的用户
gid=root
use chroot = no 不使用chroot
max connections=200 最大连接数
timeout=300
pid file=/var/run/rsync.pid
lock file=/var/run/rsync.lock
log file=/var/log/rsync.log 可以分析日志查看同步时的错误
[java] 模块名,需要跟主服务器一致
path=/usr/local/tomcat/ 需要同步的目录,注意不要跟主的同步目录一致,比如要同步主的/usr/local/tomcat/webapps,就一定要写这个目录,不然会出现webapps下面出现 webapps的情况
ignore errors
read only=false
auth users=root
secrets file=/etc/rsync.pas 使用传输的账户密码文件,设置好读写属性,文件名随意,最好用一致的用户,可以设置/sbin/nologin属性
/etc/rsync.pas
root 用户名
root:root 用户名:密码
必须遵循这个格式,不然报错,可能我这个版本需要如此
启动rsync 作为守护进程 /usr/bin/rsync --config=/etc/rsync.con --daemon
从服务器配置到此结束
主服务器 10.0.0.42
安装rsync 和inotify 可以通过yum 下载安装
制作监控脚本 vim inotify.sh
-
#!/bin/bash
-
#
-
host01=10.0.0.41 #inotify-slave的ip地址
-
src=/usr/local/tomcat/webapps #本地监控的目录
-
dst=java #inotify-slave的rsync服务的模块名
-
user=root #inotify-slave的rsync服务的虚拟用户
-
rsync_passfile=/etc/rsyn.pas #本地调用rsync服务的密码文件
-
inotify_home=/usr/local/inotify-3.14 #inotify的安装目录
-
#judge
-
/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e close_write,delete,create,attrib $src \
-
| while read file
-
do
-
rsync -avz --delete --timeout=100 --password-file=${rsync_passfile} $src $user@$host01::$dst >/dev/null 2>&1
-
#cd $src && rsync -aruz -R --delete ./ --timeout=100 $user@$host01::$dst --password-file=${rsync_passfile} >/dev/null 2>&1
-
done
-
exit 0
注意: src必须写同步的具体的文件夹不用加/ ,dst设置为从服务器的模块名,rsync.pas 格式一样,inotify那个表示监控增删改的动作,一旦发现这个动作就执行rsync命令,rsync命令表示发送修改的文件信息
实现后台运行/root/inotify.sh &
经过测试没问题,线上已经使用一段时间,未发现问题。
阅读(1462) | 评论(0) | 转发(0) |