由于现在的环境没有使用共享存储,为了保证各个节点的web目录一致,这里结合了rsync和inotify-tools实时同步web目录。从网上查了相关资料,发现方法都差不多。自己测试后把步骤记录下,方便参考。
rsync+inotify-tools 实现web发布目录文件同步
环境 Ubuntu 10.04
源目录服务器(客户端)web1: 192.168.1.24
集群节点服务器(服务端)web2: 192.168.1.3
web的发布目录都为/var/www/eztest
同步方向为web1 --> web2
客户端安装rsync 和 inotify #放源程序目录的服务器
服务端安装rsync #集群节点,运行rsync守护进程
安装软件 apt-get install rsync
服务端配置:
先配置服务端,也就是集群的各个节点。各节点配置一样
默认安装情况下rsync没有文件,需要自己手工创建。
服务端rsync配置 /etc/rsyncd.conf
uid = nobody
gid = nobody
use chroot = no
max connections = 20
strict modes = yes
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log format = %t %a %m %f %b
[eztest]
path = /var/www/eztest/
auth users = eztestback
ignore errors = yes
read only = no
write only = no
list = no
hosts allow = 192.168.1.0/24
hosts deny = *
uid = root
gid = root
secrets file = /etc/rsync.passwd
创建认证文件,方便同步过程中自动同步,不需输入密码。
echo "eztestback:sjjm1605" > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
启动rsync守护进程
rsync --daemon --config=/etc/rsyncd.conf
利用ps 或netstat查看是否启动成功
创建同步的目录
mkdir /var/www/eztest && chown www-data:www-data /var/www/eztest
客户端配置:
apt-get install rsync inotify-tools
客户端,即存放源程序目录的服务器(git更新的目录),这个只需按照rsync 和 inotify-tools
rsync不需要配置,只需创建认证文件,且认证文件中只有密码。
echo "sjjm1605" > /etc/rsync.passwd && chmod 600 /etc/rsync.passwd
使用如下命令测试,参数的解释参考
rsync -vzrtopg --delete --exclude=a/ --password-file=/etc/rsync.passwd /var/www/eztest/ eztestback@192.168.1.3::eztest
使用如下命令测试inotify对文件的监控
inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f %e' -e modify,delete,create,attrib /var/www/eztest
利用脚本自动同步,脚本内容如下
#!/bin/bash
host1=192.168.1.3
#host2=192.168.1.4
#集群节点有多少,写多少个变量
src=/var/www/eztest/
dst=eztest #变量值和配置中模块名字相同。
username=eztestback
/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,modify,delete,create,attrib $src \
| while read files
do
/usr/bin/rsync -vzrtopgq --delete --exclude=test1/a/ --password-file=/etc/rsync.passwd $src $username@$host1::$dst # --exclude 使用相对路径,--exclude-from=file 文件中写明要排除的文件
if [ $? -eq 0 ];then
echo "${files} was rsynced ok" >>/tmp/rsync.log 2>&1
fi
done
将脚本放到启动文件中
echo "/home/wang/rsync.sh &" >> /etc/rc.local