一、keepalived软件简介

keepalived是基于vrrp协议实现高可用功能的一种软件,它可以解决单点故障的问题,通过keepalived搭建一个高可用的LVS负载均衡集群时,keepalived还能检测后台服务器的运行状态。

二、vrrp协议原理简介

vrrp(虚拟路由器冗余协议),是为了解决网络上静态路由出现的单点故障的问题,举个例子,如下图

通过keepalived搭建高可用的LVS负载均衡集群_LVS

主机A和B均在同一个局域网内,C和D均是该局域网的网关,即A和B想与外网通信,需指网关到C或D,那究竟指向C好还是指向D好呢?都不好!当指向C时,如果C出故障时,局域网内的主机就没法与外界通信了,指向D问题也是一样,vrrp这时候就有用了,在C和D之间运行vrrp协议,vrrp将C和D虚拟成一个设备E,对外提供一个虚拟ip地址,A和B将网关指向虚拟ip地址即可,在vrrp组内,将各成员分为MASTER和BACKUP(一个组内只能有1个MASTER,可以有多个BACKUP),MASTER就是实际上提供服务的节点,MASTER和BACKUP的选举通过优先级选举,优先级高的即为MASTER,VRRP运行时MASTER定时发送VRRP通告信息,表示MASTER工作正常,BACKUP只接收VRRP数据,不发送数据,如果一定时间内没有接收到MASTER的通告信息,各BACKUP将宣告自己成为MASTER,发送通告信息,重新进行MASTER选举状态。


三、实验部分

ip地址分配:

    VIP:192.168.56.110

    Director Server1 IP:192.168.56.101

    Director Server2 IP:192.168.56.102

    Realserver1 IP:192.168.56.103

    Realserver2 IP:192.168.56.104

LVS相关配置方案:

    模型:DR

    调度算法:rr(轮循)

安装配置过程:

通过keepalived搭建LVS高可用集群配置非常简单,lvs的配置和节点的监控均在keepalived配置文件中配置完成

1、安装前先检查/usr/src/kernels目录下有没有内核的源码,后面keepalived编译时要用到,如果没有,则先安装

yum install kernel-devel

2、编译安装keepalived

tar zxvf keepalived-1.2.23.tar.gz 
cd keepalived-1.2.23
./configure --sysconf=/etc --with-kernel-dir=/usr/src/kernels/2.6.32-642.4.2.el6.x86_64/
make && make install
ln -sv /usr/local/sbin/keepalived /sbin/keepalived    #创建链接(不创建的话启动/etc/init.d/keepalived脚本时会报错)

3、修改配置文件/etc/keepalived/keepalived.conf

#全局定义部分
global_defs {
   notification_email {
     root@lzs.com
     zsgg@lzs.com
   }                    #设置发生异常时向哪个邮箱发通知,可以设>置多个邮箱,每个一行,服务器上的sendmail服务必须开启
   notification_email_from keepalived@lzs.com   #设置邮件的发送方
   smtp_server 192.168.56.1    #设置smtp服务器的ip地址
   smtp_connect_timeout 30      #设置连接smtp服务器的超时时间
   router_id LVS_LZS            #keepalived服务器的标识,将显示在报警邮件的主题>中      
}

#定义vrrp实例
vrrp_instance VI_1 {
    state MASTER                #指定此主机的角色是MASTER,注意要大写
    interface eth0              #指定绑定的接口,即配置虚拟ip地址的接口
    virtual_router_id 51        #指定VRID,该标识为一个数字,同一个vrrp实例中的MASTER和BACKUP的VRID必须一致
    priority 100                #指定优先级,MASTER的优先级必须高于BACKUP
    advert_int 1                #指定MASTER发送通告信息的时间间隔
    authentication {            #设置同一个vrrp组中各节点的验证类型和验证密码,>即同一vrrp组下,各节点的验证类型和验证密码必须一致才能互相通信
        auth_type PASS          #设置验证类型,有PASS和HA两种
        auth_pass 1111          #设置验证密码,
    }
    virtual_ipaddress {         #设置虚拟ip地址,可多个
        192.168.56.110
        192.168.56.120
    }
}

#虚拟服务器定义(在这部分配置LVS)
virtual_server 192.168.56.110 80 {      #设置虚拟服务器的ip和端口,用空格隔开
    delay_loop 6                #每隔6秒对realserver进行健康状态检查
    lb_algo rr                  #设置调度算法
    lb_kind DR                  #设置LVS的类型,有DR、NAT和TUN
    persistence_timeout 50      #设置会话保持时间,用户在请求页面后,若在50s内有操作时,请求会一直分发到同一服务节点上,并重新开始计时
    protocol TCP                #指定转发协议类型,有UDP和TCP

    real_server 192.168.56.103 80 {     #配置realserver的ip和端口,用空格隔开
        weight 1                        #设置权重
        TCP_CHECK {                     #对realserver状态检查的设置
            connect_timeout 3           #3秒无响应时超时
            nb_get_retry 3              #表示重试的次数
            delay_before_retry 3        #表示重试的时间间隔
        }
    }
    real_server 192.168.56.104 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

    注意要点:keepalived启动时默认查找/etc/keepalived/keepalived.conf配置文件,若想指定配置文件,可”keepalived -f 配置文件 “启动。


4、将MASTER的配置文件复制到BACKUP上,并修改配置文件中的state和priority

state BACKUP
priority 70    #改得比MASTER小


5、配置realserver服务器

    1、编写启动脚本

vim /etc/init.d/lvs_rs

#! /bin/bash
VIP=192.168.56.110
case $1 in
start)
        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
        /sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP up
        ;;
stop)
        /sbin/ifconfig lo:0 down
        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 "usage:$0 {start|stop}"
        exit 1
        ;;
esac

    2、添加执行权限

chmod +x /etc/init.d/lvs_rs

    3、启动脚本

./etc/init.d/lvs_rs

6、启动MASTER和BACKUP上的keepalived服务

/etc/init.d/keepalived start


至此,搭建的LVS集群系统已正常运行了~~~~