WDCP环境下的Apache负载均衡及keepalived配置

  • 来源:新网
  • 更新日期:2018-03-20

摘要:测试环境: serverA为web主站点,IP地址为192.168.1.201,网卡eth0 server B为web副站点,IP地址为192.168.1.202,网卡eth0 web站点底层环境为wdcp管理平台(linux+apache+mysql+php),具体安装方法见:51cto.com/wdcp/install.html,使用源码方式安装 任务目标:

测试环境:

serverA为web主站点,IP地址为192.168.1.201,网卡eth0

server B为web副站点,IP地址为192.168.1.202,网卡eth0

web站点底层环境为wdcp管理平台(linux+apache+mysql+php),具体安装方法见:51cto.com/wdcp/install.html,使用源码方式安装

任务目标:使用apache模块功能实现两台web服务器的负载均衡,使用keepalived实现两台服务器的双机热备

 

部署过程:

一.负载均衡

为apache安装支持负载均衡的模块

cd/root/lanmp/httpd-2.2.24/modules/proxy/ #进入源码目录,

/www/wdlinux/httpd-2.2.24/bin/apxs-i -c -a mod_proxy.c proxy_util.c #编译安装

/www/wdlinux/httpd-2.2.24/bin/apxs-i -c -a mod_proxy_http.c

/www/wdlinux/httpd-2.2.24/bin/apxs-i -c -a mod_proxy_ftp.c

/www/wdlinux/httpd-2.2.24/bin/apxs-i -c -a mod_proxy_connect.c

/www/wdlinux/httpd-2.2.24/bin/apxs-i -c -a mod_proxy_balancer.c

 

模块安装完成后会在主配置文件中看到以下信息:

vi/www/wdlinux/httpd-2.2.24/conf/httpd.conf

wKiom1SJGYPiuJikAAEiqbtCt04637.jpg

 

模块安装完成后,登录到web管理平台编辑站点配置文件

站点列表—文件管理

wKiom1SJGgaTaeUQAAO3ypl8Nrk812.jpg

 

Apache配置文件—选择站点配置文件

wKiom1SJGkehdEYVAAHuKgs7Z6E283.jpg

在配置文件中添加配置信息

wKioL1SJGwjDSaZFAAOWGgdfOF0331.jpg

保存后重启httpd服务即可

 

命令解释:

ProxyRequests Off //使用反向代理,on是正向代理

Proxypass / balancer://proxy/ //“/”代表发送Web请求的URL前缀

<Proxy balancer://proxy> //定义一个负载均衡

Order Deny,Allow

Allow from all //这两行是访问控制

BalancerMember http://192.168.1.8:80

BalancerMember http://192.168.1.9:80status=+H //主服务器及辅助服务器,“+H”表示开启热备份功能

ProxySet lbmethod=bytraffic //根据流量分配主机资源

</Proxy>

 

 

更详细的配置参照http://zhumeng8337797.blog.163.com/blog/static/100768914201242211633248/

 

 

 

二.Keepalived配置

 

keepalived官方地址:http://www.keepalived.org/download.html,可以到这里下载最新版本的keepalived

 

1.环境配置:安装make gcc openssl openssl-devel等等

yum -y install gcc make openssl openssl-devel wgetkernel-devel

mkdir -p /usr/local/src/hasoft

cd /usr/local/src/hasoft

wget http://www.keepalived.org/software/keepalived-1.2.2.tar.gz

tar -zxvf keepalived-1.2.2.tar.gz

cd keepalived-1.2.2

./configure --prefix=/usr/local/keepalived--with-kernel-dir=/usr/src/kernels/2.6.18-238.19.1.el5-i686/

这里的软件版本及系统内核版本要根据自己的服务器进行修改

 

预编译后出现:

Keepalived configuration

------------------------

Keepalived version : 1.2.2

Compiler : gcc

Compiler flags : -g -O2 -DETHERTYPE_IPV6=0x86dd

Extra Lib : -lpopt -lssl -lcrypto

Use IPVS Framework : Yes

IPVS sync daemon support : Yes

IPVS use libnl : No

Use VRRP Framework : Yes

Use Debug flags : No

 

2.编译安装

make && make install

复制代码

这里用的是通用安装方法,如果没有用到LVS可以把lvs去掉即

./configure --prefix=/usr/local/keepalived--with-kernel-dir=/usr/src/kernels/2.6.18-238.19.1.el5-i686/--disable-lvs-syncd --disable-lvs

3.整理管理文件:

cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

cp /usr/local/keepalived/etc/sysconfig/keepalived/etc/sysconfig/

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived/etc/init.d/

 

4.建立配置文件目录

mkdir -p /etc/ keepalived/

两台服务器(两个节点)都这样安装即可

 

5.编辑配置文件

节点A配置如下:

vi /etc/keepalived/keepalived.conf

 

global_defs

{

notification_email

{

admin@example.com

}

notification_email_from admin@example.com

smtp_server 127.0.0.1

stmp_connect_timeout 30

router_id lnmp_node1

}

 

vrrp_instance lnmp {

state MASTER //这里住服务器配制成MASTER,备机配制成BACKUP

interface eth0 //绑定虚拟IP的网卡

virtual_router_id 100 //两台服务器的virtual_router_id要完全一致

priority 200 //数值越大,优先级越高

advert_int 5 //vrrp信息检测时间间隔,这里是5秒

track_interface { //监听的网卡

eth0

}

authentication { //主备服务器的验证方式,密码要完全一致

auth_type PASS

auth_pass 123456

}

virtual_ipaddress { //使用的虚拟IP,默认绑定在主服务器上,如果主服务器宕机,则漂移到备服务器上

192.168.1.10

}

}

 

节点B配置如下:

vi /etc/keepalived/keepalived.conf

 

global_defs

{

notification_email

{

admin@example.com

}

notification_email_from admin@example.com

smtp_server 127.0.0.1

stmp_connect_timeout 30

router_id lnmp_node1

}

 

vrrp_instance lnmp {

state BACKUP

interface eth0

virtual_router_id 100

priority 150

advert_int 5

track_interface {

eth0

}

authentication {

auth_type PASS

auth_pass 123456

}

virtual_ipaddress {

192.168.1.10

}

}

 

6.添加开机启动项

chkconfig --add keepalived

chkconfig --level 35 keepalived on

 

7.添加防火墙策略

vi /etc/sysconfig/iptables

添加一行:

-A INPUT –s 192.168.1.0/24 -p vrrp -j ACCEPT

 

8.启动测试

在节点A上启动

/usr/local/keepalived/sbin/keepalived

启动日志:

cat /var/log/messages

Sep 818:26:02 centosa Keepalived_vrrp: Registering Kernel netlink reflector

Sep 818:26:02 centosa Keepalived_vrrp: Registering Kernel netlink command channel

Sep 818:26:02 centosa Keepalived_vrrp: Registering gratutious ARP shared channel

Sep 818:26:02 centosa Keepalived_vrrp: Opening file\'/etc/keepalived/keepalived.conf\'.

Sep 818:26:02 centosa Keepalived_vrrp: Configuration is using : 36076 Bytes

Sep 818:26:02 centosa Keepalived_vrrp: Using LinkWatch kernel netlink reflector...

Sep 818:26:02 centosa Keepalived: Starting VRRP child process, pid=5606

Sep 818:26:07 centosa Keepalived_vrrp: VRRP_Instance(lnmp)Transition to MASTER STATE

Sep 818:26:12 centosa Keepalived_vrrp: VRRP_Instance(lnmp)Entering MASTER STATE

Sep 818:26:12 centosa avahi-daemon[2528]: Registering new address record for192.168.1.10 on eth0.

 

在节点B上启动

/usr/local/keepalived/sbin/keepalived

 

查看启动日志:

cat /var/log/messages

Sep 818:30:02 centosb Keepalived_vrrp: Opening file\'/etc/keepalived/keepalived.conf\'.

Sep 818:30:02 centosb Keepalived_vrrp: Configuration is using : 36252 Bytes

Sep 818:30:02 centosb Keepalived_vrrp: Using LinkWatch kernel netlink reflector...

Sep 818:30:02 centosb Keepalived_healthcheckers: Configuration is using : 6271 Bytes

Sep 818:30:02 centosb Keepalived_healthcheckers: Using LinkWatch kernel netlinkreflector...

Sep 818:30:02 centosb Keepalived_vrrp: VRRP_Instance(lnmp)Entering BACKUP STATE

 

从日志可以看出,启动都没有问题,并且安装我给的优先级完成了竞选,各自成就了各自的状态

 

关闭节点A的网卡测试切换是否正常

ifdown eth0

 

观察节点B的日志:

Sep 818:32:55 centosb Keepalived_vrrp: VRRP_Instance(lnmp) Transition to MASTERSTATE

Sep 818:33:00 centosb Keepalived_vrrp: VRRP_Instance(lnmp)Entering MASTER STATE

Sep 818:33:00 centosb avahi-daemon[2531]: Registering new address record for192.168.1.10 on eth0.

 

启动节点A的网卡测试切换是否正常

ifup eth0

观察节点B的日志:

Sep 818:33:31 centosb Keepalived_vrrp: VRRP_Instance(lnmp) Received higher prioadvert

Sep 818:33:31 centosb Keepalived_vrrp: VRRP_Instance(lnmp) EnteringBACKUP STATE

Sep 818:33:31 centosb avahi-daemon[2531]: Withdrawing address record for 192.168.1.10on eth0.

Received higher prio advert:表示接收到更高优先级的公告(advert公告的意思)

Withdrawing:撤回的意思,可以看出切换过程一目了然

 

9.使用脚本监测服务

下面使用脚本监控apache、php及mysql三个服务,若有一个出现问题便立即停止keepalived服务,以切换到另一台服务器

mkdir /root/shell/

cd /root/shell

vi keepcheck.sh

 

#!/bin/bash

while:

do

mysqlcheck=`/www/wdlinux/mysql-5.1.63/bin/mysqladmin-pwdlinux.cn -uroot ping 2>&1`

mysqlcode=`echo $?`

phpcheck=`ps aux | grep -c php-fpm | wc -l`

apachecheck80=`lsof -i:80|wc -l`

apachecheck8080=`lsof -i:8080|wc -l`

keepalivedcheck=`ps -C keepalived --no-header| wc -l`

if [$apachecheck80 -eq 0 ]||[ $apachecheck8080 -eq 0 ]||[ $phpcheck -eq 0 ]||[$mysqlcode -ne 0 ];then

if [ $keepalivedcheck -ne 0];then

killall -TERM keepalived

else

echo "keepalived isstoped"

fi

else

if [ $keepalivedcheck -eq 0];then

/etc/init.d/keepalived start

else

echo "keepalived isrunning"

fi

fi

sleep5

done

 

注意,用/etc/init.d/keepalived start如果起不来,可以用/usr/local/keepalived/sbin/keepalived二进制文件直接执行启动即可

启动脚本:

chmod +x /root/shell/keepcheck.sh

nohup sh /root/shell/keepcheck.sh &

节点B也用这个脚本

写入/etc/rc.local开机自动启动

vi /etc/rc.local

nohup sh /root/shell/keepcheck.sh &

 

至此全部配置已经完成,将域名或nat指向到创建的虚拟ip即可使用服务