lvs+keepalived使用DR模式实现负载均衡

        LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。[源于百度]

        keepalived可以实现服务的高可用或热备,用来防止单点故障的问题;而Keepalived的核心VRRP协议,VRRP协议主要实现了在路由器或三层交换机处的冗余;Keepalived就是使用VRRP协议来实现高可用的。

         lvs+keepalived结合可以更好的提高系统可用性,lvs提供负载,keepalived提供健康检查、故障转移,提高系统可用性。

下面是一个keepalived的原理图:

Keepalived启动后会有三个进程:
    父进程:内存管理,子进程管理
    子进程:VRRP子进程
    子进程:healthchecker子进程
由上图可知:
    两个子进程都被系统WatchDog看管,两个子进程各自复杂自己的事,healthchecker子进程复杂检查各自服务器的健康程度,例如HTTP,LVS等,如果healthchecker子进程检查到MASTER上服务不可用了,就会通知本机上的VRRP子进程,让它删除通告,并且去掉虚拟IP,转换为BACKUP状态。

实验环境如下图所示:

系统版本及机器用途列表:

使用centos 6.6,ipvsadmin-1.26,keepalived-1.2.9

LVS系统下集群VIP是:192.168.100.2

机器名称 机器用途 机器IP
vm1 lvs-master

192.168.100.11

vm2 lvs-backup 192.168.100.12
vm3 realserver1(web1) 192.168.100.13
vm4 realserver2(web2) 192.168.100.14

所有服务器上iptables和selinux全部关闭。

下面是安装步骤:

1、先安装LVS:

LVS包含两部分:IPVS模块(lvs已经是Linux标准内核的一部分,直接被编译到内核中)和IPVS管理工具ipvsadm

使用如下两种方法检查是否安装IPVS模块,显示如下内容说明已经安装IPVS模块了:

2、安装ipvsadm

[root@vm1 src]# cd ipvsadm-1.26
[root@vm1 ipvsadm-1.26]# make

直接安装会有这个报错,需要安装poptpopt-staticlibnllibnl-devel这四个rpm包。

安装上述四个包以后再执行make和make install

可以使用ipvsadm –help验证是否安装成功。

3、安装keepalived

安装keepalived前需要安装kernel-devel、openssl、openssl-devel三个包。

[root@vm1 src]# cd keepalived-1.2.9
[root@vm1 keepalived-1.2.9]# ./configure --sysconf=/etc/ --with-kernel-dir=/usr/src/kernels/2.6.32-573.12.1.el6.x86_64/

执行过./configure以后这三项必须是YES状态。

[root@vm1 keepalived-1.2.9]# make && make install

再加一个链接方便使用:

[root@vm1 keepalived-1.2.9]#  ln -s /usr/local/sbin/keepalived /sbin/

到此ipvsadm和keepalived全部安装完毕,接下来配置下keepalived,然后启动keepalived测试。

4、需要给keepalived配置文件写入如下内容,此处采用DR模式实现。:

[root@vm1 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived  
global_defs {   
   router_id DR1  
}  
           ########VRRP Instance########  
vrrp_instance VI_1 {  
    state MASTER    #指定Keepalived的角色,MASTER为主机服务器,BACKUP为备用服务器  
    interface eth0  #BACKUP为备用服务器  
    virtual_router_id 51  
    priority 100    #定义优先级,数字越大,优先级越高,主DR必须大于备用DR。  
    advert_int 1  
    authentication {  
        auth_type PASS  #设置验证类型,主要有PASS和AH两种  
        auth_pass 1111  #设置验证密码  
    }  
    virtual_ipaddress {  
        192.168.100.2  #设置主DR的虚拟IP地址(virtual IP),可多设,但必须每行1个  
    }  
}  
           ########Virtual Server########  
virtual_server 192.168.100.2 80 {  #注意IP地址与端口号之间用空格隔开  
    delay_loop 6        #设置健康检查时间,单位是秒  
    lb_algo wrr          #设置负载调度算法,默认为rr,即轮询算法,最优秀是wlc算法  
    lb_kind DR          #设置LVS实现LB机制,有NAT、TUNN和DR三个模式可选  
    nat_mask 255.255.255.0  
    persistence_timeout 50  #会话保持时间,单位为秒  
    protocol TCP        #指定转发协议类型,有TCP和UDP两种  
    real_server 192.168.100.13 80 {  
        weight 4          #配置节点权值,数字越大权值越高  
        TCP_CHECK {  
            connect_timeout 3     #表示3秒无响应,则超时  
            nb_get_retry 3        #表示重试次数  
            delay_before_retry 3  #表示重试间隔  
        }  
    }  
    real_server 192.168.100.14 80 {  #配置服务器节点,即Real Server2的public IP  
        weight 3            #配置节点权值,数字越大权值越高  
        TCP_CHECK {  
            connect_timeout 3       #表示3秒无响应,则超时  
            nb_get_retry 3          #表示重试次数  
            delay_before_retry 3    #表示重试间隔  
        }  
    }  
}

这个是master上的配置,复制到bakcup机器上需要修改如下地方:

state BACKUP
priority 90

5、后端web服务器上需要添加如下脚本,两台web服务器上都需要做如下操作,添加一个VIP:

[root@vm3 init.d]# cat /etc/init.d/realserver.sh 
#add for chkconfig  
#chkconfig: 2345 70 30  #234都是文本界面,5就是图形界面X,70启动顺序号,30系统关闭,脚本  
#止顺序号  
#description: RealServer's script  #关于脚本的简短描述  
#processname: realserver.sh       #第一个进程名,后边设置自动时会用到  
#!/bin/bash  
VIP=192.168.100.2  
source /etc/rc.d/init.d/functions  
case "$1" in  
start)  
       ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP  
       /sbin/route add -host $VIP dev lo:0  
       echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore  
       echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce  
       echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore  
       echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce  
       echo "RealServer Start OK"  
       ;;  
stop)  
       ifconfig lo:0 down  
       route del $VIP >/dev/null 2>&1  
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore  
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce  
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore  
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce  
       echo "RealServer Stoped"  
       ;;  
       *)  
       echo "Usage: $0 {start|stop}"  
       exit 1  
esac  
exit 0
[root@vm3 init.d]# ./realserver.sh start

看到如下结果说明成功:

6、分别启动两台lvs上的keepalived服务:

[root@vm1 ~]# service keepalived start

然后通过ipvsadm查看是否正常:

7、检查VIP是否正常:

vm1是master服务器,在vm1上查看IP如下:

8、模拟服务器宕机操作,通过查看日志看IP切换漂移情况。

现在vm1上暂停keepalived服务,不嫌麻烦的直接关机操作。然后看vm2上的日志以及ip飘移情况:

通过日志可以发现vm2已经由原来的BACKUP变为MASTER状态了,并且VIP也跟着飘移过来了。

9、模拟后端web服务器宕机,看keepalived的检查情况。通过日志查看如下图所示:

通过日志可以发现服务暂停会自动移除,恢复正常会自动添加进来。

后端的web访问就不在做测试了,可以在目录下放个简单的页面看访问情况。

如果其他检查都没错可以使用下边两个脚本直接安装ipvsadm和keepalived,安装完以后修改下BACKUP服务器上的状态和优先级。rar包里边的init.sh先初始化一下服务器,进行一些常规设置,用另外一个安装,需要先给ipvsadm-1.26.tar.gz和keepalived-1.2.9.tar.gz放到/usr/local/src下面。

install.rar