一、背景

Keepalived详细介绍请点击        

    随着你的网站业务量的增长你网站的服务器压力越来越大?需要负载均衡方案!商业的硬件如F5又太贵,你们又是创业型互联公司如何有效节约成本,节省不必要的浪费?同时实现商业硬件一样的高性能高可用的功能?有什么好的负载均衡可伸张可扩展的方案吗?答案是肯定的!有!我们利用LVS+Keepalived基于完整开源软件的架构可以为你提供一个负载均衡及高可用的服务器。
1、LVS+Keepalived          

    LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。目前有三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR),十种调度算法(rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)。
2、Keepalvied
    Keepalived主要使用vrrp协议,Keepalived在这里主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现。

3、VRRP

    VRRP(VirtualRouterRedundancyProtocol,虚拟路由冗余协议)是一种容错协议。通常,一个网络内的所有主机都设置一条缺省路由,这样,主机发出的目的地址不在本网段的报文将被通过缺省路由发往路由器RouterA,从而实现了主机与外部网络的通信。当路由器RouterA坏掉时,本网段内所有以RouterA为缺省路由下一跳的主机将断掉与外部的通信产生单点故障。VRRP就是为解决上述问题而提出的,它为具有多播组播或广播能力的局域网(如:以太网)设计。

    VRRP将局域网的一组路由器(包括一个Master即活动路由器和若干个 Backup即备份路由器)组织成一个虚拟路由器,称之为一个备份组。这个虚拟的路由器拥有自己的IP地址10.100.10.1(这个IP地址可以和备份组内的某个路由器的接口地址相同,相同的则称为ip拥有者),备份组内的路由器也有自己的IP地址(如Master的IP地址为 10.100.10.2,Backup的IP地址为10.100.10.3)。局域网内的主机仅仅知道这个虚拟路由器的IP地址10.100.10.1, 而并不知道具体的Master路由器的IP地址10.100.10.2以及Backup路由器的IP地址10.100.10.3.[1]它们将自己的缺省路由下一跳地址设置为该虚拟路由器的IP地址10.100.10.1.于是,网络内的主机就通过这个虚拟的路由器来与其它网络进行通信。如果备份组内的 Master路由器坏掉,Backup路由器将会通过选举策略选出一个新的Master路由器,继续向网络内的主机提供路由服务。从而实现网络内的主机不间断地与外部网络进行通信。

LVS-DR+Keepalived主从高可用负载均衡集群_第1张图片 LVS-DR+Keepalived主从高可用负载均衡集群_第2张图片


二、安装与配置

1、注意事项

    大家在做下面的操作之前应该已经了解了LVS-DR模型负载均衡如何搭建,这里我就不在重述,大家可以参见我的博文http://wangzan18.blog.51cto.com/8021085/1631060,上面那篇博文大家只需查看realserver的配置及启动脚本,director不需要做任何配置,只需要按照下面的要求安装keepalived即可,因为LVS的高可用是由keepalived实现的,这里我们接着上章的内容进行高可用配置。

服务器 IP VIP
LVS-MASTER 192.168.0.21 192.168.0.8
LVS-SALVE 192.168.0.22 192.168.0.8
Realserver1 192.168.0.23 192.168.0.8
Realserver2 192.168.0.24 192.168.0.8

实现集群的前提:时间同步,这里采用cron任务计划实现;

2、keepalived的安装

    没有特殊需求的可以使用yum直接安装,我也是推荐大家直接用yum安装,我这里介绍一下通过源码安装最新版本,下载相关软件包,主备节点都要下载;

wget http://www.keepalived.org/software/keepalived-1.2.16.tar.gz
tar xf keepalived-1.2.16.tar.gz 
cd keepalived-1.2.16
./configure --prefix=/usr/local/keepalived --sysconfdir=/etc
make
make install
ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/

3、在master上配置keepalived.conf

# cat /etc/keepalived/keepalived.conf     配置文件中,可分为三个部分:

global_defs            #全局配置部分
vrrp_instance VI_1     #vrrp实例,用来定义虚拟路由组
virtual_server 
192.168.200.100 443    #虚拟服务部分,用来定义LVS相关配置的
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
     notification_email {          
     root@localhost           #通知收件人邮箱
   }
   notification_email_from keepalived@localhost
   smtp_server 172.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL       
}  
vrrp_script chk_schedown {                       #定义该vrrp脚本,来实现手动转移IP地址,待会演示效果  
    script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"#如果有这个文件,则返回1,否则返回0  
    interval 2 
    weight -2               #优先级减2  
}   
vrrp_instance VI_1 {
    state MASTER              #在备份服务器上面改为BACKUP
    interface eth0            #定义配置在哪个端口上 
    virtual_router_id 51      #虚拟路由组ID号
    priority 100              #优先级,备份服务上将100改为99
    advert_int 1              #每隔1秒进行通告
    authentication {          #实现认证
        auth_type PASS        #采用字符认证
        auth_pass 1111        #认证密钥
    }
    virtual_ipaddress {
        192.168.0.8           #如果有多个VIP,继续换行填写
        
    }
    track_script {            #健康检查脚本
    chk_schedown
    }
}
virtual_server 192.168.0.8 80 {
    delay_loop 6              #设置健康检查的时间间隔
    lb_algo rr                #设置负载调度算法
    lb_kind DR                #LVS-DR模型
#   persistence_timeout 50    #会话保持时间
    protocol TCP

    real_server 192.168.0.23 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            }
            connect_timeout 3        #表示无响应超时时间
            nb_get_retry 3           #表示重试次数
            delay_before_retry 1     #表示重试间隔
        }

    real_server 192.168.0.24 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            }
            connect_timeout 3     
            nb_get_retry 3  
            delay_before_retry 1
        }
    }

按照提示把BACKUP的keepalived配置好,重启keepalived即可。

service keepalived start
tail -f /var/log/messages      //查看启动的日志

LVS-DR+Keepalived主从高可用负载均衡集群_第3张图片

# PS:这里说的LVS.并不是用ipvsadm软件配置.而是直接用keepalived的virtual_server配置项控制的.
# 安装ipvsadm只是可以看到负载状况.其实只需要keepalived也可以实现负载均衡集群.

LVS-DR+Keepalived主从高可用负载均衡集群_第4张图片至此LVS的HA集群搭建完毕。


                             LVS-DR+Keepalived主从高可用负载均衡集群_第5张图片