keepalived+LVS+apache双机搭建高可用负载均衡web服务

这篇文章讲述的是如何只使用两台机器使用keepalived搭建web服务的高可用负载均衡

一、试验环境

vmware6.0  
linux01 192.168.211.128  CentOS release 5.3 (Final)  
linux02 192.168.211.129  CentOS release 5.3 (Final)  
web:httpd-2.2.3-31.el5.centos  
keepalived版本:keepalived-1.1.19.tar.gz

二、安装程序

1、keepalived的安装

首先到http://www.keepalived.org/download.html下载最新的keepalived程序

# tar zxvf keepalived-1.1.19.tar.gz  
# cd keepalived-1.1.19  
# ./configure –prefix=/ –with-kernel-dir=/usr/src/kernels/2.6.18-128.el5-i686  
# make  
# make install

# cp keepalived/etc/init.d/keepalived.rh.init /etc/init.d/keepalived  
# chmod +x /etc/init.d/keepalived  
# cp keepalived/etc/init.d/keepalived.sysconfig /etc/sysconfig/keepalived

2、web的安装

因为蚊子只是为了实现功能,所以只使用了centos自己的apache,如果默认系统没有按照httpd,使用

# yum –y install httpd

3、ipvsadm的安装

ipvsadm的安装也很简单,如果系统默认没有,则使用

# yum –y install ipvsadm

以上两个步骤在两台机器上是一样的。

三、 配置部分

1、linux01上的配置

1.1、keepalived的配置

编辑/etc/keepalived/keepalived.conf 

# vi /etc/keepalived/keepalived.conf ,添加如下内容

! Configuration File for keepalived 

global_defs {  
   notification_email {  
     admin@example.com  
   }  
   notification_email_from admin@example.com  
   smtp_server 127.0.0.1  
   smtp_connect_timeout 30  
   router_id linux01  

vrrp_instance VI_1 {                               #定义一个实例 
    state BACKUP                                    #设置为backup,然后通过priority控制哪台提升为主 
    interface eth0  
    virtual_router_id 51  
    priority 100  
    nopreempt                                          #在priority高的这台设置这个参数,方便当主恢复后 
    advert_int 1                                        #可以自动接管 
    authentication {  
        auth_type PASS  
        auth_pass 1111  
    }  
    virtual_ipaddress {  
        192.168.211.110 dev eth0 label eth0:0                #这里使用label标签启用eth0:0 
    }  

virtual_server 192.168.211.110 80 {                        #这里往下是定义LVS 
    delay_loop 6  
    lb_algo rr  
    lb_kind DR  
    nat_mask 255.255.255.0  
    protocol TCP 

    real_server 127.0.0.1 80 {                            #其中一台是本地web服务 
        weight 1  
        TCP_CHECK {  
            connect_timeout 3  
        }  
    }  
    real_server 192.168.211.129 80 {             #另一台的web服务
        weight 1  
        TCP_CHECK {  
            connect_timeout 3  
        }  
    }   
}

1.2、web配置

web使用apache默认的配置,唯一修改的就是添加了自己的index.html文件,为了方便之后的测试

# echo “linux01”>/var/www/html/index.html

1.3、关于本机启动回环地址

众所周知,要是用lvs的dr模式,必须在realserver上启动回环地址,所以,搭建两台机器的负载均衡,当然就得在本机也启动相应的回环地址,才能实现所要的功能,脚本如下

# vi /usr/local/bin/startlo 

#!/bin/sh

VIP=192.168.211.110 

case "$1" in  
  stop)  
        # close lo:0 interface 

        echo $"Close lo:0 interface"  
        /sbin/route del -host $VIP dev lo:0  
        /sbin/ifconfig lo:0 down  
        echo "0">/proc/sys/net/ipv4/conf/all/arp_announce  
        echo "0">/proc/sys/net/ipv4/conf/all/arp_ignore  
        echo "0">/proc/sys/net/ipv4/conf/lo/arp_announce  
        echo "0">/proc/sys/net/ipv4/conf/lo/arp_ignore  
        ;;  
  start)  
        # start lo:0 interface 

        echo $"Start lo:0 interface"  
        /sbin/ifconfig lo:0 $VIP/32 broadcast $VIP up  
        /sbin/route add -host $VIP dev lo:0  
        echo "2">/proc/sys/net/ipv4/conf/all/arp_announce  
        echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore  
        echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce  
        echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore  
        ;;  
  *)  
        echo $"Usage: $0 (start|stop)"  
        exit 1  
        ;;  
esac

但由于keepalived不像heartbeat里有ldirectord来控制回环地址的启动和停止,所以我们需要人为的判断应该在哪台机器上启动回环地址,所以蚊子就写了下面的一个脚本,

# vi /usr/local/bin/check_interface

#!/bin/bash  
#  
#作者:蚊子  
#  
#脚本说明:  
#本脚本用于判断当前server是否是master  
#如果当前server不是master,则启动回环地址  
#否则停止回环地址  
#  
#VIP_interface请根据自己的情况自行设定,这个是VIP接口  
#lo_interface请根据自己的情况自行设定,是回环地址接口

VIP_interface="eth0:0"  
lo_interface="lo:0" 

i=10 

while [ $i != 0 ]  
do  
    /sbin/ifconfig |grep $VIP_interface &>/dev/null  
    retval=$?  
    if [ ! $retval -eq 0 ];then  
        /sbin/ifconfig |grep $lo_interface &>/dev/null  
        retval=$?  
        if [ ! $retval -eq 0 ];then  
            /usr/local/bin/startlo start  
        fi  
    else  
        /sbin/ifconfig |grep $lo_interface &>/dev/null  
        retval=$?  
        if [ $retval -eq 0 ];then  
            /usr/local/bin/startlo stop  
        fi  
    fi  
    i=10  
    sleep 10  
done

2、linux02上的配置

2.1、keepalived的配置

具体的配置这里就不给出了,请参考linux01上的配置,唯一的区别

A、priority的值小于linux01上值,蚊子设置为50  
B、在vrrp_instance VI_1的配置中不用设置nopreempt   
C、修改realserver部分的ip为本机和另外一台server的ip地址

2.2、web的配置

apache的配置和linux01一样使用默认配置,同意是编辑默认的index.html文件

# echo “linux02”>/var/www/html/index.html

2.3、本地回环地址的设置

这部分内容和linux01上的一样,相关脚本可以拷贝过来直接使用

四、启动测试

到此,一切准备就绪就可以测试了

首先将所有需要的脚本设置可执行权限。依次启动相应的服务

A、# /etc/init.d/httpd start  
B、# /usr/local/bin/check_interface &  
C、# /etc/init.d/keepalived start

如果没有任何报错,说明服务已经启动,keepalived的日志存放在/var/log/messages中,如果有错误,请自行查看

测试1:当前状态下测试负载均衡情况

方法:打开ie浏览器,输入http://192.168.211.110,然后不断用ctrl+F5强制刷新,可以看到网页内容在linux01和linux02中切换

测试2:停止linux01的keepalive,测试负载均衡情况

方法:

A、/etc/init.d/keepalived stop  
然后等待几秒可以看到linux01上的lo:0地址已经启动,而linux02上的lo:0已经停止

B、打开ie浏览器,输入http://192.168.211.110,然后不断用ctrl+F5强制刷新,可以看到网页内容在linux01和linux02中切换

测试3:开启linux01上的keepalived,观察linux01是否切换回master

方法:启动keepalived程序,使用ifconfig观察linux01上已经启动了eth0:0接口,同时lo:0接口停止,linux02上eth0;0接口停止,同时lo:0接口启动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值