Keepalived + LVS

LVS+Keepalived实现高可用集群   

1.操作环境

操作系统平台:CentOS6.5    

软件:keepalived-1.2.12.tar.gz 

      Ipvsadm使用yum自带的安装

 

2.原理技术

LVS提 供负载均衡,keepalived提供健康检查,故障转移,提高系统的可用性!采用这样的架构以后很容易对现有系统进行扩展,只要在后端添加或者减少realserver,只要更改lvs的配置文件即可。Keepalived在这里主要用作RealServer的健康状态检查以及master主机和backup主机之间failover(故障转移)的实现

  单点故障:在公司整个业务流程中,某一点出现故障就会导致整个系统架构不可用,单点故障常发生在数据库、核心业务系统等。对此我们的解决办法是对核心业务系统进行高可用负载均衡。

 

3.架构图:

LVS+Keepalived实现高可用集群_第1张图片


拓扑图介绍
  keepalived--master和keepalived--backup两者之间通过vrrp协议利用虚拟IP进行通信,master主机对外接受请求并将请求转发至后方的realserver,backup主机只接受请求而不转发请求。某时刻当backup主机没有接受到master主机发送的信息时,于是发送vrrp通告信息并广播arp信息,宣称自己是master,如果收到其他主机发送的通告信息的优先级比自己的高,那么自己将继续转为backup,优先级别高的机器,此时就是新master主机,并接替原master主机的工作。

每个keepalived机器都对后方的realserver进行监控,只不过master负责将外部请求转发至后方的realserver,backup则不作该处理。

 

4.软件的安装

软件的下载

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


1>、keepalived的安装配置

# tar xf keepalived-1.2.12.tar.gz

# cd keepalived-1.2.12

# ./configure --sysconf=/etc --with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.x86_64

# make && make install

# ln -s /usr/local/sbin/keepalived /sbin/keepalived

# chkconfig --add keepalived

# chkconfig --level 2345 keepalived on


 注: --sysconf   指定Keepalived配置文件的安装路径。即路径为 
         /etc/keepalived/keepalived.conf
    --with-kernel-dir  指定使用源码中的头文件,即include目录。只有在使用LVS时,才使用到 --with-kernel-dir 参数,其他时候是不需要的。


2>、配置文件的更改

# vim keepalived.conf

 

! Configuration File for keepalived

global_defs {
   notification_email {
   }
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {   #定义一个vrrp组,组名唯一  
    state MASTER    #定义改主机为keepalived的master主机
    interface eth0      #监控eth0号端口  
    virtual_router_id 58  #虚拟路由id号为58,id号唯一,这个id决定了多播的MAC地址
    priority 150         #设置本节点的优先级,master的优先级 要比backup的优先级别高,数值要大
    advert_int 1         #检查间隔,默认为1秒
    authentication {
        auth_type PASS    #认证方式,密码认证
        auth_pass 1111    #认证的密码,这个密码必须和backup上的一致
    }
    virtual_ipaddress {    #设置虚拟的ip, 这个ip是以后对外提供服务的ip。
        192.168.2.100
    }
}

virtual_server 192.168.2.100 80 {   #虚拟主机设置,ip同上。
    delay_loop 2          #服务器轮询的时间间隔
    lb_algo rr           #lvs的调度算法
    lb_kind DR            #lvs的集群模式
    nat_mask 255.255.255.0
    persistence_timeout 50      #会话超时50s
    protocol TCP           #健康检查是用tcp还是udp

    real_server 10.68.2.200 80 {    #后端真实主机1
        weight 100                #每台机器的权重,0表示不给该机器转发请求,知道它恢复正常。
        TCP_CHECK {         #健康检查项目,以下
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port  80
        }
    }

    real_server 10.68.2.201 80 {       #后端真实主机2
        weight 100        #每台机器的权重,0表示不给该机器转发请求,知道它恢复正常。
        TCP_CHECK {       #健康检查项目,以下
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port  80
        }
    }
}

 

backup主机的配置基本同上,只有以下地方需要修改。
state BACKUP  #定义改主机为keepalived的backup主机,监控主master
priority 100  #设置本节点的优先级,数值要比master主机上的小      

 

3>、master和backup安装ipvsadm软件

# yum -y install ipvsadm

 

 

5.测试keepalived的故障漂移

首先,在192.168.2.10和192.168.2.11上同时启动keepalived,此时观察master主机和backup主机   

 # service keepalived restart

2.10

LVS+Keepalived实现高可用集群_第2张图片

2.11

LVS+Keepalived实现高可用集群_第3张图片

 

可以看出虚拟ip此时绑定在2.10--master上,然后停止2.10上keepalived服务

# service keepalived stop

2.10

LVS+Keepalived实现高可用集群_第4张图片

2.11

LVS+Keepalived实现高可用集群_第5张图片

 

通过查看2.11上的日志,可以看到2.11已经宣告自己是master了。并且虚拟ip也漂移到新的mater机器上。

# tail -fn 100 /var/log/messages

wKiom1ebMfuCLM2jAABqBv4bnIM311.png-wh_50

 以上的配置,keepalived的高可用功能已经实现。

 

 

6.realserver服务器配置

本例中,我在2.200和2.201上,分别安装了httpd,模拟两台web服务器。然后要在两台服务器上配置虚拟vip,使用以下脚本。

# service httpd restart

添加测试页面:

# cd /var/www/html/

[root@ser html]# ls

[root@ser html]# echo WEB1111 > index.html

 

# cd /var/www/html/

[root@ser2 html]# ls

[root@ser2 html]# echo WEB2222 > index.html

 

 

# vim realserver.sh

#!/bin/bash

#description: config realserver lo  and apply noarp

 

WEB_VIP=192.168.2.100  #虚拟vip,也就是虚拟ip

. /etc/rc.d/init.d/functions

 

case "$1" in

 

start)

   ifconfiglo:0 $WEB_VIP netmask 255.255.255.255 broadcast $WEB_VIP

  /sbin/route add -host $WEB_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"1" > /proc/sys/net/ipv4/conf/eth0/arp_ignore

   echo"2" > /proc/sys/net/ipv4/conf/eth0/arp_announce

   echo"1" > /proc/sys/net/ipv4/conf/default/arp_ignore

   echo"2" > /proc/sys/net/ipv4/conf/default/arp_announce

   sysctl -p>/dev/null 2>&1

   echo"RealServer Start OK"

   ;;

stop)

   ifconfiglo:0 down

   route del$WEB_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"0" > /proc/sys/net/ipv4/conf/eth0/arp_ignore

   echo"0" > /proc/sys/net/ipv4/conf/eth0/arp_announce

   echo"0" > /proc/sys/net/ipv4/conf/default/arp_ignore

   echo"0" > /proc/sys/net/ipv4/conf/default/arp_announce

   echo"RealServer Stoped"

   ;;

status)

       #Status of LVS-DR real server.

      islothere=`/sbin/ifconfig lo:0 | grep $WEB_VIP`

      isrothere=`netstat -rn | grep "lo:0" | grep $WEB_VIP`

       if [ !"$islothere" -o ! "isrothere" ];then

         #Either the route or the lo:0 device

         #not found.

         echo"LVS-DR real server Stopped."

       else

         echo"LVS-DR Running."

       fi

;;

*)

       #Invalid entry.

       echo"$0: Usage: $0 {start|status|stop}"

       exit 1

;;

esac

exit 0

 

 # chmod +x realserver.sh


   将此脚本分别在2.200和2.201上执行下。此时,我们在两台keepalived的主机上可以查看到如下相同信息。

# ./realserver.sh start

RealServer Start OK

 

# scp  [email protected]:/root/Desktop/realserver.sh .


查看信息:

   wKioL1ebMgyTennQAABAtg66CU8572.png-wh_50

 

7.测试

   此时,通过网页访问102.168.2.100,时,根据ipvsadm查询到的realserver主机的顺序,可以看出此时优先访问2.200

   LVS+Keepalived实现高可用集群_第6张图片

      而当我们将2.200这台机器的httpd的服务停掉,首先可以看到两台keepalived主机都会将2.200这台机器剔除,此时我们再次查询时ipvsadm,只可以看到一台web服务器,再次页面访问,这时就是在访问2.2018这台机器了。

# tail -fn 100 /var/log/messages

   wKiom1ebMiKg4MKzAAB2DlR-Qkc476.png-wh_50

   wKioL1ebMi-yRHqZAAA_RtSSc28547.png-wh_50

   LVS+Keepalived实现高可用集群_第7张图片

 

启动2.200机器后,keepalived又会自动将改服务器添加进来。

# tail -fn 100 /var/log/messages

wKioL1ebMkPSAGRxAAAkfdBuN1I794.png-wh_50

 

从上面的测试可知,lvs的负载均衡功能已经实现

 

遇到的问题:

    LVS+Keepalived实现高可用集群_第8张图片

问题原因:

      keepalived.conf配置文件real_server的IP地址有问题。