lvs+keepalived 高可用负载均衡模式分析

1. 前言

《keepalived 双机热备》这篇文章中,我写了利用keepalived 这个开源软件实现高可用的功能,以及keepalived 高可用所使用的协议——利用vrrp 协议,在高可用网络组内广播自己的优先级,优先级最高的就能抢占vip资源,充当MASTER 主机,提供服务。在今天这篇文章,我们来看看lvs 如何与keepalived 的高可用功能结合,实现对负载均衡调度器的高可用。

经过《lvs_nat 负载均衡模式及抓包分析》《lvs_dr 负载均衡模式分析》这里两篇文章的分析,我们已经对lvs的架构非常熟悉了。但是在这些架构中,lvs 很容易出现单点故障,所以需要对 lvs 调度器增加一个高可用的功能。前面介绍的 keepalived 软件就是一个很好的,实现高可用的软件。keepalived 最先是为了解决 lvs 对集群内的服务器没有监控功能而实现的,lvs 的集群内,如果服务宕机,客户端发过来的请求,它还是会按照调度算法将请求逐一发到后端服务。keepalived 不仅仅有 lvs 的功能,还可以对集群服务进行监控检测,如果发现服务器宕机了,keepalived就会将宕机的主机踢出集群,不再将客户端的请求发送到该主机。当主机恢复正常后,keepalived会重新将该主机添加都集群。

再经过发展,keepalived增加了vrrp协议,可以实现虚拟路冗余的功能。vrrp协议,就是实现我们今天要讲的 lvs + keepalived 高可用功能的关键协议。vrrp 的实现原理,可以翻看《keepalived 双机热备》这篇文章。

2. 具体配置

2.1 实验环境


今天我们要分析的重点就是架构图中用红色框圈出的 lvs 调度器层,通过keepalived 实现冗余。

ip地址分配:
客户端 : 192.168.188.111

dir1 : 192.168.188.108

dir2 : 192.168.188.109

rs1 : 192.168.188.107
rs2 : 192.168.188.110

vip : 192.168.188.120

说明: 在这个架构中我们仍然使用lvs dr 的负载均衡模式。由于后端的realserver 没有太多变化,所以,可以继续使用《lvs_dr 负载均衡模式分析》这篇文章的配置方法。而前端lvs 的功能则使用了 keepalived 软件。

2.2 配置realserver

2.2.1 在两台realserver 主机运行lvs_rs.sh 脚本

[[email protected] network-scripts]# cat /usr/local/sbin/lvs_rs.sh
#/bin/bash
vip=192.168.188.120
#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端
#参考文档www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html
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

两台realeserver 主机的 lvs_rs.sh 配置文件都一样

2.2.2 在两台lvs调度器上安装keepalived并配置keepalived软件

 yum  install  -y   keepalived 

 [root 11:57:22 @CentOS3 sbin] cat /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
        #备用服务器上为 BACKUP
        state MASTER
        #绑定vip的网卡为eth0,你的网卡和我的可能不一样,这里需要你改一下
        interface eth0
        virtual_router_id 51
        #备用服务器上为90
        priority 100
        advert_int 1
    authentication {
                auth_type PASS
                auth_pass hell>com

    }
    virtual_ipaddress {
                192.168.188.120      # 这个就是vip;如果有多个vip,支持多行隔开

    }

}
virtual_server 192.168.188.120  80 {
        #(每隔10秒查询realserver状态)
        delay_loop 5
        #(lvs 算法)
        lb_algo wlc  # wlc:最少连接数算法,因为实验的访问量本来就少,所以为了看效果,我们就选用轮询算法
        #(DR模式)
        lb_kind DR
        #(同一IP的连接60秒内被分配到同一台realserver)
        persistence_timeout 0
        #(用TCP协议检查realserver状态)
        protocol TCP

    real_server 192.168.188.107 80 {
                #(权重)
                weight 100
        TCP_CHECK {
                    #(10秒无响应超时)
                    connect_timeout 10
                    nb_get_retry 3
                    delay_before_retry 3
                    connect_port 80

        }

    }
    real_server 192.168.188.110 80 {
                weight 100
        TCP_CHECK {
                    connect_timeout 10
                    nb_get_retry 3
                    delay_before_retry 3
                    connect_port 80

        }

    }

}

说明: 在另一台用来充当 lvs 调度器备机的机器上安装keepalived软件,配置的时候,只需修改state 为BACKUP 和 priority 为90 即可。

3. 启动服务

3.1 dir1 调度器

为了防止以前的Ivs 规则,可以先执行

ipvsadm  -C   清除一些规则,
然后需要打开  ip 转发功能:
echo    1   /proc/sys/net/ipv4/ip_forward  

然后,启动keepalived
/etc/init.d/keepalived    start 

3.2 dir2 调度器

同样的做法

ipvsadm  -C   清除一些规则,
然后需要打开  ip 转发功能:
echo    1   /proc/sys/net/ipv4/ip_forward  

然后,启动keepalived
/etc/init.d/keepalived    start

3.3 realserver 服务器执行 lvs_rs.sh 脚本

/bin/bash     /usr/local/sbin/lvs_rs.sh

在两台realserver 主机上执行。

3.4 realserver 服务器启动nginx 服务


安装nginx ,修改nginx 服务默认html 页面,区分rs1 和rs2 不同即可,最后启动nginx

4. 测试结果

(1)在 dir1 上验证vip:

[root 12:13:37 @CentOS3 sbin] ip add show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:50:d5:63 brd ff:ff:ff:ff:ff:ff
    inet 192.168.188.108/24 brd 192.168.188.255 scope global eth0
    inet 192.168.188.120/32 scope global eth0
    inet6 fe80::20c:29ff:fe50:d563/64 scope link
       valid_lft forever preferred_lft forever

(2)在 dir1 上查看系统日志:

[root 12:14:35 @CentOS3 sbin] tail  /var/log/messages
Mar 30 10:50:49 CentOS3 Keepalived_vrrp[12055]: VRRP_Instance(VI_1) Received lower prio advert, forcing new election
Mar 30 10:50:50 CentOS3 Keepalived_vrrp[12055]: VRRP_Instance(VI_1) Entering MASTER STATE
Mar 30 10:50:50 CentOS3 Keepalived_vrrp[12055]: VRRP_Instance(VI_1) setting protocol VIPs.
Mar 30 10:50:50 CentOS3 Keepalived_vrrp[12055]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.188.120
Mar 30 10:50:50 CentOS3 Keepalived_healthcheckers[12054]: Netlink reflector reports IP 192.168.188.120 added
Mar 30 10:50:54 CentOS3 Keepalived_healthcheckers[12054]: TCP connection to [192.168.188.107]:80 failed !!!
Mar 30 10:50:54 CentOS3 Keepalived_healthcheckers[12054]: Removing service [192.168.188.107]:80 from VS [192.168.188.120]:80
Mar 30 10:50:55 CentOS3 Keepalived_vrrp[12055]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.188.120

可以看到 vip 192.168.188.120 已经绑定到dir1 的eth0 网卡了

(3)再来看看dir2 的情况:

[root 10:48:45 @CentOS3_02 ~] ip add show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:8e:cf:65 brd ff:ff:ff:ff:ff:ff
    inet 192.168.188.109/24 brd 192.168.188.255 scope global eth0
    inet6 fe80::20c:29ff:fe8e:cf65/64 scope link
       valid_lft forever preferred_lft forever

vip 并不在dir2 这台主机。

(4) 将dir1 的keepalived 关掉,vip 将会被 dir2 抢占,lvs 提供的负载均衡服务没有失效。

dir1  :
/etc/init.d/keepalived   stop

dir2 :
[root 12:53:33 @CentOS3_02 ~] tail /var/log/messages
Mar 30 10:50:51 CentOS3_02 ntpd[1422]: Deleting interface #20 eth0, 192.168.188.120#123, interface stats: received=0, sent=0, dropped=0, active_time=128 secs
Mar 30 10:51:29 CentOS3_02 Keepalived_healthcheckers[8111]: TCP connection to [192.168.188.107]:80 success.
Mar 30 10:51:29 CentOS3_02 Keepalived_healthcheckers[8111]: Adding service [192.168.188.107]:80 to VS [192.168.188.120]:80
Mar 30 12:56:22 CentOS3_02 Keepalived_vrrp[8113]: VRRP_Instance(VI_1) Transition to MASTER STATE
Mar 30 12:56:23 CentOS3_02 Keepalived_vrrp[8113]: VRRP_Instance(VI_1) Entering MASTER STATE
Mar 30 12:56:23 CentOS3_02 Keepalived_vrrp[8113]: VRRP_Instance(VI_1) setting protocol VIPs.
Mar 30 12:56:23 CentOS3_02 Keepalived_vrrp[8113]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.188.120
Mar 30 12:56:23 CentOS3_02 Keepalived_healthcheckers[8111]: Netlink reflector reports IP 192.168.188.120 added
Mar 30 12:56:25 CentOS3_02 ntpd[1422]: Listen normally on 21 eth0 192.168.188.120 UDP 123
Mar 30 12:56:28 CentOS3_02 Keepalived_vrrp[8113]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.188.120

或者dir2  :
[root 12:57:32 @CentOS3_02 ~] ip add show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:8e:cf:65 brd ff:ff:ff:ff:ff:ff
    inet 192.168.188.109/24 brd 192.168.188.255 scope global eth0
    inet 192.168.188.120/32 scope global eth0
    inet6 fe80::20c:29ff:fe8e:cf65/64 scope link
       valid_lft forever preferred_lft forever

可以看到,vip 已经被 dir2 抢占了。

(5)重新启动 dir1 的 keepalived 服务,vip 从新被 dir1 抢占绑定
验证方法同上一步,所以,截图就省略了。

5. 总结

通过实验,我们已经验证了,keepalived 具有高可用的功能,在本文的测试验证中已经证明。其实,keepalived 还有检测后端服务的健康情况的功能,如果将这次实验中的nginx 停掉,客户端的请求就会发到其中一台服务器,当nginx重新启动,客户端的请求又会均匀地转发到nginx 服务器。因为今天主要将 lvs + keepalived 的高可用功能,所以,对nginx 的测试就不在赘述了。大家可以在这个实验的基础上,尝试一下,看看结果如何。

原文地址:http://blog.51cto.com/hellocjq/2092894

时间: 2024-08-02 09:30:35

lvs+keepalived 高可用负载均衡模式分析的相关文章

(2)LVS+Keepalived高可用负载均衡架构原理及配置

1.keepalived 介绍2.keepalived 优缺点3.keepalived 应用场景4.keepalived 安装配置5.keepalived+lvs 高可用6.keepalived+nginx 高可用7.keepalived 切换原理8.性能优化9.常见故障 一.keepalived 介绍 1.keepalived 定义keepalived是一个基于VRRP(virtual route redundent protocol)协议来实现的LVS服务高可用方案,可以利用其来避免单点故障

Ubuntu构建LVS+Keepalived高可用负载均衡集群【生产环境】

1.环境说明: 系统版本:Ubuntu 14.04 LVS1物理IP:14.17.64.2   初始接管VIP:14.17.64.13 LVS2物理IP:14.17.64.3   初始接管VIP:14.17.64.14 真实web服务器IP:14.17.64.4-12 实现效果:去往14.17.64.13或14的报文,转发给14.17.64.4-12中的一台服务器处理,实现负载均衡. 要求1:当一台真实web服务器故障后,自动把该IP从负载均衡中踢除,恢复后自动加入集群. 要求2:当一台LVS服

LVS+Keepalived高可用负载均衡集群架构

实验环境: LVS和keepalived介绍: 1.keepalived的设计目标是构建高可用的LVS负载均衡群集,可以调用ipvsadm工具来创建虚拟服务器,管理服务器池,而不仅仅用来做双机热备. 使用keepalived构建LVS群集更加简便易用,主要优势体现在: 对LVS负载调度器实现热备切换,提高可用性: 对服务器池中的节点进行健康检查,自动移除失效节点,恢复后再重新加入. 2.在基于LVS+Keepalived实现的LVS群集结构中,至少包括两台热备的负载调度器,两台以上的节点服务器,

Ubuntu构建LVS+Keepalived高可用负载均衡集群【生产环境部署】

1.环境说明: 系统版本:Ubuntu 14.04 LVS1物理IP:14.17.64.2   初始接管VIP:14.17.64.13 LVS2物理IP:14.17.64.3   初始接管VIP:14.17.64.14 真实web服务器IP:14.17.64.4-12 实现效果:去往14.17.64.13或14的报文,转发给14.17.64.4-12中的一台服务器处理,实现负载均衡. 要求1:当一台真实web服务器故障后,自动把该IP从负载均衡中踢除,恢复后自动加入集群. 要求2:当一台LVS服

lvs+keepalived高可用负载均衡集群双主实现

项目说明 1.         使用LVS负载均衡用户请求到后端web服务器,并且实现健康状态检查 2.         使用keepalived高可用LVS,避免LVS单点故障 3.         集群中分别在LK-01和LK-02运行一个VIP地址,实现LVS双主 4.         用户通过DNS轮训的方式实现访问集群的负载均衡(不演示) 环境拓扑 环境介绍 IP地址 功能描述 LK-01 172.16.4.100 调度用户请求到后端web服务器,并且和LK-02互为备份 LK-02

LVS+Keepalived高可用负载均衡

一,环境配置 VIP:192.168.222.222 RIP:192.168.222.134 RIP:192.168.222.135 DR_MASTER:192.168.222.128 DR_SLAVE:192.168.222.129 二,DR配置 1,安装软件 yum install epel-release -y yum install ipvsadm -y yum install keepalived -y 2,keepalived配置 MASTER上面配置: #vim /etc/keep

搭建LVS+keepalived高可用负载均衡集群

重点:各节点之间同步时间 netdate time.windows.com 1.关闭防火墙和SELinux    service iptables stop   setenforce 0 2.环境规划 3.配置  1)DR1     安装ipvsadm     yum -y install ipvsadm     安装keepalived  yum -y install keepalived     修改keepalived配置文件 vim /etc/keepalived/keepalived.

LVS+Heartbeat高可用负载均衡

一,环境配置 VIP:192.168.222.222 RIP:192.168.222.134 RIP:192.168.222.135 DR_MASTER:eth0 192.168.222.128 eth1 172.16.0.1 (单网卡也行) DR_SLAVE:eth0 192.168.222.129 eth1 172.16.0.2 (单网卡也行) 二,DR配置 1,安装软件 yum install epel-release -y yum install ipvsadm -y yum insta

虚拟机 搭建LVS + DR + keepalived 高可用负载均衡

一:环境说明:   LVS-DR-Master:    10.3.0.82   LVS-DR-Backup:    10.3.0.70   VIP:                10.3.0.60   RealServer1:    10.3.0.69   RealServer1:    10.3.0.83   Centos:5.7    二:安装LVS和Keepalvied软件包   1. 下载相关软件包    mkdir /usr/local/src/lvs    cd /usr/loca