前言

   LVS是基于内核实现负载均衡的,在小编的上一篇演示中我们已经实现了LVS的NAT模式和DR模式,但是企业中只有负载均衡是不行的,如果一台负载均衡器楚翔了故障,那么就会导致整个集群的不可用,所以这里结合LVS我们通过keepalived这个神器来实现高可用。

   高可用:通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。

   首先我们来认识一下keepalived:

keepalived介绍

   1、功能:

      Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

   2、特点及优点:

      (a)配置文件简单:配置文件比较简单,可通过简单配置实现高可用功能

      (b)稳定性强:keepalived是一个类似于layer3, 4 & 7交换机制的软件,具备我们平时说的第3层、第4层和第7层交换机的功能,常用于前端负载均衡器的高可用服务,当主服务器出现故障时,可快速进行切换,监测机制灵活,成功率高。

      (c)成本低廉:开源软件,可直接下载配置使用,没有额外费用。

      (d)应用范围广:因为keepalived可应用在多个层面,所以它几乎可以对所有应用做高可用,包括LVS、数据库、http服务、nginx负载均衡等等

      (e)支持多种类型:支持主从模式、主主模式高可用,可根据业务场景灵活选择。

   3、keepalived功能实现方式

      keepalived基于模块来进行工作,在开启服务的时候会开启三个守护进程

   (a) 父进程:主要负责读取配置文件初始化、监控2个子进程等,监控WacthDog模块

   (b) 子进程1:负责监控vrrp Stack 模块,通过Netlink Reflector模块,控制内核中的netlink模块,实现vrrp协议的功能。

   (c) 子进程2:负责监控Cheackers模块,通过IPvs wrapper模块控制内核中的IPVS ,相当于代替了ipvsadm的功能,可以监控和负载后台服务器,负责健康监测功能。

   4、keepalived基于vrrp协议工作

    VRRP协议:

    VRRP(VirtualRouter Redundancy Protocol,虚拟路由冗余协

议)可以认为是实现路由器高可用的协议,简单的说,当一个路由器故障时可以由另一个备份路由器继续提供相同的服务。

   VRRP根据优先级来确定虚拟路由器中每台路由器的角色(Master

路由器或Backup路由器)。VRRP优先级的取值范围为0到255(数值越大表明优先级越高),可配置的范围是1到254,优先级0为系统保留给路由器放弃Master位置时候使用,255则是系统保留给IP地址拥有者使用。优先级越高,则越有可能成为Master路由器。当两台优先级相同的路由器同时竞争Master时,比较接口IP地址大小。接口地址大者当选为Master。

   5、配置文件:

   配置文件简单结构:

      1、全局配置 global_defs

      2、虚拟路由配置 vrrp_instance

      3、虚拟服务器配置 virtual_server


接下来进入展示环节:

一、基于keepalived实现LVS-nat模式的高可用

1、实验前准备及部署:

    关闭防火墙,关闭selinux

    客户端到VS之间的IP段为公网

       VS到RS之间的IP段为私网

2、客户端配置

客户端IP:172.17.0.0/16网段,例如:172.17.253.70

     客户端关闭防火墙、关闭selinux

   3、VS端配置

      (VS端即负载均衡器)

      VS端的VIP,172.17.252.60/16

      VS端的DIP,192.168.11.107/24

      在VS上:

      首先我们得安装keepalived和ipvsadm,ipvsadm不是用于部署LVS,LVS的实现在keepalived中就可以实现,ipvsadm只是我们借助ipvsadm这个命令来进行查看ipvs规则。

      关闭防火墙,开启路由转发:

      (1)修改内存参数:

         echo 1 > /proc/sys/net/ipv4/ip_forward

      (2)修改配置文件:

         vim /etc/sysctl.conf

           net.ipv4.ip_forward = 1

      3.1 VS1的配置

        编辑keepalived配置文件:

LVS-keepalived实现高可用_keepalived

3.2VS2的配置

        编辑keepalived配置文件

LVS-keepalived实现高可用_keepalived_02

   4、开启keepalived服务

      centos6:service keepalived start

      centos7:systemctl startkeepalived

      如果开启不了是配置文件的错误,语法有错

5、RS端配置:

      RS1 地址为:192.168.1.7

      RS2 地址为:192.168.1.9

      将路由指向DIP

      routeadd default gw 192.168.11.107 dev ens34

      开启web服务功能

      httpd或 nginx

6、可以进行测试了!

    实验结果图

LVS-keepalived实现高可用_keepalived_03


二、基于keepalived实现LVS-dr模式的高可用

 1、实验前准备:

     关闭防火墙、selinux

     实际的生产环境中的网络是:

     client--公网--VS---私网---RS

 但是在教室环境中,由于网卡的限制,所以只能配置同一个网段的IP

2、网络地址分配

        LVS-keepalived实现高可用_keepalived_04

3、客户端配置;

  关闭防火墙,关闭selinux

添加默认网关到VIP,这是在实验的环境中为了使数据包发往VS服务器所做的特殊操作,在真实的网络环境中,客户端是能够找到VIP的。

    route add default gw 192.17.1.17 dev ens34

4、VS端配置:

(1)VS1端配置:

    开启路由转发:

    echo 1 > /proc/sys/net/ipv4/ip_forward

   

    vim /etc/sysctl.conf

    net.ipv4.ip_forward = 1

    安装keepalived请自动yum安装

        编辑keepalived配置文件:

LVS-keepalived实现高可用_keepalived_05

启动keepalived;

       centos6 ;serverkeepalived start

       centos7 : systemctl start keepalived

可安装ipvsadm工具,使用ipvsadm命令进行查看ipvs规则

ip a 查看VIP绑定情况

   (2)VS2端配置:

    开启路由转发:

    echo 1 > /proc/sys/net/ipv4/ip_forward

   

    vim /etc/sysctl.conf

    net.ipv4.ip_forward = 1 VS2的配置

   VS2的配置文件跟VS1的配置文件几乎相同,只需要将一下几点进行修改就可以了,这里小编就不在进行配置文件展示了:

   不同点:

(1)虚拟路由中的stateBACKUP

(2)虚拟路由中的priority要比master中低

启动keepalived;

    centos6 ;serverkeepalived start

centos7 : systemctl start keepalived

5、RS端配置

    关闭防火墙,关闭selinux

    在回环网卡上配置VIP:

    ifconfig lo:1 192.17.1.17 netmask255.255.255.255 broadcast 192.17.1.17 up

    route add -host 192.17.1.17 dev lo

    配置arptable,将ARP广播关闭:

    echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore

    echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore

    echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

    echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce

    开启web服务:(以httpd示例)

    yum install httpd

    centos6 : server httpd start

    centos7 : systemctl start httpd

 

6、在客户端访问输入VIP地址进行访问测试

    curl http://192.17.1.17/

    可以用for循环测试:

    for i in $(seq 10) ; do curlhttp://192.17.1.17 ;done

结果展示:

    服务开启情况:

LVS-keepalived实现高可用_keepalived_06

LVS-keepalived实现高可用_keepalived_07

测试:

LVS-keepalived实现高可用_keepalived_08

停掉一个keepalived服务:

LVS-keepalived实现高可用_keepalived_09

查看另一台负载器是否接替了工作:

LVS-keepalived实现高可用_keepalived_10

停掉服务后测试:

LVS-keepalived实现高可用_keepalived_11