- A+
所属分类:Centos
最近公司项目要部署负载均衡,负载均衡后,由于代码分布在不同的服务器上,一台一台服务器部署是不现实的。经过调研下,采用centos 的 rsync 传输文件和 inotify 监测目录下文件的变动。
一、环境准备
建立一台服务器作为代码发布服务器,该服务器作为rsync服务端,通过inotify监测网站代码文件,文件发生变化后,通过rsync同步到多个web服务器。
准备三台服务器如下:
rsync服务端: 192.168.189.5 作为rsync客户端,需要安装rsync和 inotify
web服务器1: 192.168.189.6 作为rsync服务端,需要配置rsync
web服务器2: 192.168.189.7 作为rsync服务端,需要配置rsync
二、在服务端(192.168.189.6)上配置rsync
①. 安装rsync
yum -y install rsync
②建立数据同步目录
mkdir -p /data/www/
③修改目录权限为777
chmod 777 /data/www/
④修改配置文件 vim /etc/rsyncd.conf
fake super = yes transfer logging = yes log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock uid = root gid = root use chroot = no ignore errors read only = no [web1] comment = web content path = /data/www auth users = backup secrets file = /etc/rsyncd.secrets hosts allow = 192.168.189.5 hosts deny = * list =false
⑤设置密码文件
echo "backup:backup" > /etc/rsyncd.secrets chmod 600 /etc/rsyncd.secrets rsync --daemon #一定记得要开启rsync echo "rsync --daemon" >> /etc/rc.local
⑥防火墙
关闭防火墙或者使用以下配置
firewall-cmd --permanent --add-port=873/tcp #rsync默认端口是873,设置防火墙永久允许 firewall-cmd --reload
192.168.189.6 和 192.168.189.7 的配置相同, 将web1 改成web2即可。
三、配置数据发布服务器(192.168.189.5)
①安装rsync并开启服务
yum -y install rsync rsync --daemon #开启rsync yum -y install automake libtool #安装编译安装软件所需工具
②安装inotify-tool
wget http://downloads.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz #下载inotify-tool软件包 解压后进入inotify-tools-3.13目录,执行如下安装 ./configure #默认安装路径是/usr/local,如果想改变路径可在后面加参数 --prefix 路径名 make && make install
③设置密码文件
echo "backup" > /root/rsync.pass #名字可任意写,backup为rsync服务端配置的用户名为backup的密码 chmod 600 /root/rsync.pass
④编写监控脚本
#!/bin/bash export PATH=/bin:/usr/bin:/usr/local/bin SRC=/data/www/ #设置修改数据的目录 DEST1=web1 #pc1的模块名 DEST2=web2 #pc2的模块名 Client1=192.168.189.6 Client2=192.168.189.7 User=backup Passfile=/root/rsync/rsync.pass [ ! -e $Passfile ] && exit 2 #wait for change inotifywait -mrq --timefmt '%y-%m-%d %H:%M' --format '%T %w%f %e' -e modify,create,move,delete,attrib $SRC | while read file do echo "$line" > /var/log/inotify_web 2>&1 #同步数据到pc1,下面命令其实就是rsync -avz /web_data/ backup@192.168.189.6::web1,然后把输出结果记录在sync_web1中 rsync -avz --delete --progress --password-file=$Passfile $SRC ${User}@$Client1::$DEST1 >> /var/log/sync_web1 2>&1 #同步数据到pc2 rsync -avz --delete --progress --password-file=$Passfile $SRC ${User}@$Client2::$DEST2 >> /var/log/sync_web2 2>&1 done &