tools 实现web发布目录同步

由于现在的环境没有使用共享存储,为了保证各个节点的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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/ded1348e759f522d3a7ddc4b8b6fcc81.html