前言: 

 本文章转自我的个人博客 http://www.anyisalin.com 欢迎大家访问 


Rsync+Inotify+LVS实现Web Service的负载均衡


实验环境:

 系统: CentOS6.7

 服务: LVS

 类型: DR模型

 机器: 

LVS-Director:

    DIP: dev eth0 172.16.100.2/24 GW: 172.16.100.254

    VIP: dev eth0:0  172.16.100.1/24 GW: 172.16.100.254

LVS-RS1: 发布网页文件服务器

    VIP dev lo:0 172.16.100.1/32

    RIP dev eth0 172.16.100.7/24 GW: 172.16.100.254

LVS-RS2: Rsync同步服务器

    VIP dev lo:0 172.16.100.1/32

    RIP dev eth0 172.16.100.8/24 GW: 172.16.100.254

DataBase:

    IP dev eth0 172.16.100.200/24 GW: 172.16.100.254

 


部署步骤:

 1.部署LVS-DR

 2.配置DataBase主机Mysql数据库

 3.在RS1上安装Discuz并连接到DataBase主机数据库上

 4.使用Rsync+Inotify实现对RS1,RS2网站目录的同步

 5.测试



实验步骤:

网络配置:

 ##由于LVS-DR中关于网络部分的配置较为繁琐,故在此详细解释


LVS-Director: #这里为临时配置,若需永久生效请自行修改配置文件

ifconfig eth0 172.16.100.2
ifconfig eth0:0 172.16.100.1

LVS-RS1: #这里为临时配置,若需永久生效请自行修改配置文件

ifconfig eth0 172.16.100.7  
sysctl -w net.ipv4.conf.eth0.arp_ignore=1
sysctl -w net.ipv4.conf.all.arp_ignore=1
sysctl -w net.ipv4.conf.all.arp_announce=2
sysctl -w net.ipv4.conf.all.arp_announce=2
ifconifg lo:0 172.16.100.1 netmask 255.255.255.255 broadcast 172.16.100.1
route add -host 172.16.100.1 dev lo:0

LVS-RS2: #这里为临时配置,若需永久生效请自行修改配置文件

ifconfig eth0 172.16.100.8
sysctl -w net.ipv4.conf.eth0.arp_ignore=1
sysctl -w net.ipv4.conf.all.arp_ignore=1
sysctl -w net.ipv4.conf.all.arp_announce=2
sysctl -w net.ipv4.conf.all.arp_announce=2
ifconifg lo:0 172.16.100.1 netmask 255.255.255.255 broadcast 172.16.100.1
route add -host 172.16.100.1 dev lo:0


ipvs配置:

 LVS-Director:

ipvsadm -A -t 172.16.100.1:80 -s wlc -p  #由于没有共享session,这里需使用持久连接
ipvsadm -a -t 172.16.100.1:80 -r 172.16.100.7 -g -w 2 
ipvsadm -a -t 172.16.100.1:80 -r 172.16.100.8 -g -w 1


DataBase主机配置:

 DataBase: 

yum install mysql-server #安装mysql数据库
service mysqld start #启动mysql服务
iptables -F #清空iptables规则
mysql -uroot -p -e 'create database discuzdatabase;' #创建discuz数据库
mysql -uroot -p -e "grant all on discuzdatabase.* to discuz@'%' identified by 'YOUPASS';" #创建discuz用户并赋予管理discuzdatabase的权限
mysql -uroot -p -e 'flush privileges;' #刷新mysql权限


配置Web服务:

 ##注意事项: 由于Rsync+Inotify的一些机制,故先在RS1上完全配置好Discuz在使用Rsync同步


LVS-RS1: 

自行参考教程安装discuz和httpd服务

 

配置Rsyncd:

 LVS-RS2:

vim /etc/rsyncd.conf  #配置Rsyncd配置文件
 uid=root  #root为Rsync守护进程的用户
 gid=root  #root为Rsync守护进程的组
 use chroot=no  #不使用chroot
 max connections=0  #设置最大连接数,为0为无限制
 log file=/var/log/rsyncd.log  #配置日志文件位置
 pid file=/var/run/rsyncd.pid  #pid文件存放位置
 lock file=/var/run/rsyncd.lock  #锁文件存放位置
 [webdir]
 path=/var/www/html/
 comment=rsync from 172.16.100.7
 read only=no
 list=no
启动Rsync服务 #启动前检查防火墙规则和SElinux是否关闭
 rsync --port=873 --address=172.16.100.8 --daemon

LVS-RS1:

 同步文件

 rsync -avH --delete --progress /var/www/html/ 172.16.100.8::webdir


Inotify配置

安装Inotify

 ./configure --prefix=/usr/local/inotify ##自行下载Inotify
 make && make install


编写Inotify同步脚本

vim inotify.sh

 #START
 #!/bin/bash
 src="/var/www/html/"
 host="172.16.100.8"
 module="webdir"
/usr/local/inotify/bin/inotifywait -mr --timefmt '%d/%m/%y %H:%M' --format '%T %w %f' -e close_write,modify,delete,create,attrib $src |  while read DATE TIME DIR FILE; do
FILECHANGE=${DIR}${FILE}
/usr/bin/rsync -avH --delete --progress   --exclude-from="/usr/local/inotify/logs/rules.txt" rsyncuser@$host::$module &
echo "At ${TIME} on ${DATE}, file $FILECHANGE was backed up via rsync" >> $log
done
#END

chmod a+x inotify.sh  #给脚本添加执行权限
./inotify.sh &  #让脚本在后台运行