服务器架构(2)——LVS负载均衡集群+Keepalived配置lvs高可用(DR模式)

文章目录

  • 一、负载均衡基本概述
  • 二、LVS概述
    • 1. 工作过程
    • 2. 调度算法
    • 3. LVS核心组件与模块
    • 4.引入LVS-DR:示例搭载
  • 三、LVS 工作模式
    • 1. LVS-DR模式
    • 2. LVS-NAT模式
    • 3. LVS-TUN模式
  • 四、LVS管理软件—Keepalived
    • 1. Keepalived简介
    • 2. keepalived工作原理描述
    • 3. keepalived配置
      • 3.1 某台RealServer down
      • 3.2 LVS本身down

一、负载均衡基本概述

        在网站创立初期,一般都使用单台机器对台提供集中式服务,但随着业务量越来越大,无论性能还是稳定性上都有了更大的挑战。这时候我们就会想到通过扩容的方式来提供更好的服务。我们一般会把多台机器组成一个集群对外提供服务。
        然而,我们的网站对外提供的访问入口都是一个的,比如www.taobao.com。那么当用户在浏览器输入 www.taobao.com 的时候如何将用户的请求分发到集群中不同的机器上呢,这就是负载均衡在做的事情。
        负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。
        负载均衡构建在原有网络结构之上,它提供了一种透明且廉价有效的方法扩展服务器和网络设备的带宽、加强网络数据处理能力、增加吞吐量、提高网络的可用性和灵活性。
        常用负载均衡工具分为硬件和软件两种。软件负载均衡在互联网领域大量使用。常用的软件负载均衡软件有 Nginx、LVS、HaProxy 等软件负载解决的两个核心问题是:选谁、转发,其中最著名的是 LVS(Linux Virtual Server)。
服务器架构(2)——LVS负载均衡集群+Keepalived配置lvs高可用(DR模式)_第1张图片

二、LVS概述

        LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中。该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案。使用 LVS 技术要达到的目标是:通过 LVS 提供的负载均衡技术和 Linux 操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。

1. 工作过程

(1)当用户从客户端访问公司的外部负载均衡服务器,用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器。
(2)终端用户访问LVS调度器虽然会被转发到后端真实的服务器,但如果真实服务器连接的是相同的存储,提供的服务也是相同的服务,最终用户不管是访问哪台真实服务器,得到的服务内容都是一样的, 整个集群对用户而言都是透明的。
(3)根据LVS工作模式的不同,真实服务器会选择不同的方式将用户需要的数据发送到终端用户,LVS工作模式分为NAT模式,TUN模式,DR模式。

2. 调度算法

        LVS的调度算法决定了如何在集群节点之间分布工作负荷,当调度器收到来自客户端访问VIP的集群服务的入栈请求时,调度器必须决定那个集群节点应该处理请求。
        一般的网络服务,如http,mail,mysql等常用的LVS调度算法为基本轮询调度rr、加权最小连接调度wlc、加权轮询调度wrr。

算法名称 说明
rr 轮询调度(Round-Robin),将请求一次分配给不同的RS,也就是均摊,适用于处理真实服务器性能相差不大的情况
wrr 加权轮询调度(Weighted Round-Robin),根据不同RS的权值分配任务,权值较高的RS将优先获取任务,分配的连接数比权值低的RS更多,相同权值的RS获得相同数目的连接数
wlc 加权最小连接数调度(weighted leastconnection),会根据连接数和权值的不比值来算,最小比值的真实服务器将会获取下一个链接。

3. LVS核心组件与模块

        LVS已经集成到了linux内核模块中,但在整个LVS环境又分为内核层和用户层,内核层负责内核算法的实现,用户层需要安装ipsadm工具,通过命令将管理员需要的工作模式与实现算法传递给内核。

4.引入LVS-DR:示例搭载

示例说明:实验环境为RHEL7,LVS工作模式为DR模式
示例目的:用户在外部客户端访问一个IP地址(VIP),通过反复刷新网页,每次出现的网页不同则表示成功。网页的不同可以通过设置两台RS的默认发布页面来实现。

实验设备 调度器a 真实服务器2 真实服务器3 外部客户端
IP 192.168.1.136 192.168.1.102 192.168.1.103 192.168.1.104
主机名 servera server2 server3 workstation

为了便于观测实验,两台真实服务器上,更改RS的默认发布页面:
在这里插入图片描述
服务器架构(2)——LVS负载均衡集群+Keepalived配置lvs高可用(DR模式)_第2张图片
1. VS配置
(1)安装ipsadm工具:yum install -y ipvsadm
(2)给网卡上添加一个集群虚拟服务的IP地址,即VIP:ip addr add 192.168.1.100/24 dev ens33
服务器架构(2)——LVS负载均衡集群+Keepalived配置lvs高可用(DR模式)_第3张图片

(3)添加一个新的虚拟服务和tcp协议,并且指定调度算法:ipvsadm -A -t 192.168.1.100:80 -s rr
(4)往tcp虚拟服务里面添加真实服务器的IP,并且指定调度模式为直连路由:ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.102(192.168.1.103) -g
服务器架构(2)——LVS负载均衡集群+Keepalived配置lvs高可用(DR模式)_第4张图片
2. RS配置
(1)在两台真实服务器上 安装Apache服务,并且设定开启启动:yum install -y httpd;systemctl enable --now httpd
服务器架构(2)——LVS负载均衡集群+Keepalived配置lvs高可用(DR模式)_第5张图片
(2)在RS2和RS3上分别添加VIP到回环网卡上,可以响应接收客户端请求:ip addr add 192.168.1.100/24 dev ens33
服务器架构(2)——LVS负载均衡集群+Keepalived配置lvs高可用(DR模式)_第6张图片
服务器架构(2)——LVS负载均衡集群+Keepalived配置lvs高可用(DR模式)_第7张图片
(3)以上步骤完成后,两台RS和调度器上都存在相同的VIP,那么存在一个问题就是,怎么确保当客户访问VIP时,可以将客户端请求调度到调度器上,通过调度器转发到RS上,而不是客户端直接访问RS。
服务器架构(2)——LVS负载均衡集群+Keepalived配置lvs高可用(DR模式)_第8张图片
服务器架构(2)——LVS负载均衡集群+Keepalived配置lvs高可用(DR模式)_第9张图片
那么解决上面这个问题有两种方法:在内核层面做no VIP,修改内核参数;也可以直接用系统内核的自带工具arptables。 注意:arptables只针对arp协议。 这里采用自带工具arptables解决问题。
(4)首先在两台RS上分别安装arptables:yum install -y arptables
(5)两台RS上都添加一条策略,在RS上丢弃目标地址VIP,不允许VIP访问到RS上arptables -A INPUT -d 192.168.1.100 -j DROP
(6)再次添加一条策略,当VIP通过调度器访问到RS后,输出时,将源地址VIP转换为RS的真实地址arptables -A OUTPUT -s 192.168.1.100 -j mangle --mangle-ip-s 192.168.1.102(192.168.1.103)
在这里插入图片描述
在这里插入图片描述
搭建验证:访问192.168.1.100反复刷新网页,每次出现的网页不同则表示成功。
服务器架构(2)——LVS负载均衡集群+Keepalived配置lvs高可用(DR模式)_第10张图片
服务器架构(2)——LVS负载均衡集群+Keepalived配置lvs高可用(DR模式)_第11张图片

三、LVS 工作模式

术语说明:

名称 含义
DS Director Server。指的是前端负载均衡器节点。
RS Real Server。后端真实的工作服务器。
VIP 向外部直接面向客户端用户请求,作为用户请求的目标的IP地址。
DIP Director Server IP,主要用于和内部主机通讯的IP地址。面向真实服务器的IP
RIP Real Server IP,后端服务器的IP地址。
CIP Client IP,访问客户端的IP地址

1. LVS-DR模式

        VS/DR方式是通过改写请求报文中的MAC地址部分来实现的。调度器Director和服务器RealServer必需在物理上有一个网卡通过不间断的局域网相连。负载调度器中只负责调度请求,而服务器直接将响应返回给客户。Director的VIP地址对外可见,用于接收虚拟服务的请求报文。RealServer上绑定的VIP配置在各自Non-ARP的网络设备上,而RealServer的VIP对外是不可见的,只是用于处理目标地址为VIP的网络请求。
服务器架构(2)——LVS负载均衡集群+Keepalived配置lvs高可用(DR模式)_第12张图片
        VS/DR模式的工作原理:
        (1)用户向目标vip发出请求,Director接收,此时报文的源IP为CIP,目标IP为VIP;(2)Director接收后, VS根据负载均衡算法选择一台动态的RealServer,不修改也不封装IP报文,而是将数据帧的MAC地址改为选出的服务器的MAC地址,再将修改后的数据帧在与服务器组的局域网上发送;(3) RealServer在局域网中收到这个帧,拆开后发现目标IP(VIP)与本地匹配,于是处理这个报文,随后重新封装报文,发送到局域网;(4)如果用户与VS同一网段,那么用户将收到这个回复报文。如果跨了网段, 那么报文通过gateway/路由器经由Internet返回给用户。

2. LVS-NAT模式

        VS/NAT是一种最简单的方式,所有的RealServer只需要将自己的网关指向Director即可。VS/NAT 的优点是服务器可以运行任何支持TCP/IP的操作系统,它只需要一个IP地址配置在调度器上, 服务器组可以用私有的IP地址。
服务器架构(2)——LVS负载均衡集群+Keepalived配置lvs高可用(DR模式)_第13张图片

3. LVS-TUN模式

        VS/TUN技术对服务器有要求,即所有的服务器必须支持 “IP Tunneling” 或者“IP Encapsulation”协议。IP隧道(IP tunneling)是将一个IP报文封装在另一个IP报文的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址。
服务器架构(2)——LVS负载均衡集群+Keepalived配置lvs高可用(DR模式)_第14张图片
        在原有的IP报文外再次封装多一层IP首部,内部IP首部(源地址为CIP,目标IIP为VIP),外层IP首部(源地址为DIP,目标IP为RIP)。它的连接调度和管理与VS/NAT中的一样,只是它的报文转发方法不同。调度器根据各个服务器的负载情况,动态地选择一台服务器,将请求报文封装在另一个IP报文中,再将封装后的IP报文转发给选出的服务器;服务器收到报文后,先将报文解封获得原来目标地址为VIP的报文,服务器发现VIP地址被配置在本地的IP隧道设备上,所以就处理这个请求,然后根据路由表将响应报文直接返回给客户。


三种LVS负载均衡技术的优缺点归纳以下表:

指标 服务器操作系统 服务器网络 服务器数目(100M网络) 服务器网关 效率
VS/NAT 任意 私有网络 10~20 负载均衡器 一般
VS/TUN 支持隧道 局域网/广域网 100 自己的路由
VS/DR 多数(支持Non-arp) 局域网 大于100 自己的路由 最高

注意: 以上三种方法所能支持最大服务器数目的估计是假设调度器使用100M网卡,调度器的硬件配置与后端服务器的硬件配置相同,而且是对一般Web 服务。使用更高的硬件配置(如千兆网卡和更快的处理器)作为调度器,调度器所能调度的服务器数量会相应增加。当应用不同时,服务器的数目也会相应地改变。所以,以上数据估计主要是为三种方法的伸缩性进行量化比较。

四、LVS管理软件—Keepalived

1. Keepalived简介

        Keepalived软件起初是专门为LVS负载均衡软件设计的用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务的高可用解决方案软件。
        Keepalived软件主要是通过VRRP协议实现高可用功能的,VRRP是Virtual Router Redundancy Protocol(虚拟路由器冗余协议)的缩写。VRRP出现的目的就是为了解决静态路由单点故障问题的。
        Keepalived的三个重要功能:管理LVS负载均衡软件;实现LVS集群节点的健康检查;作为系统网络服务的高可用性(failover)。

2. keepalived工作原理描述

Keepalived高可用对之间是通过VRRP通信的,因此,我们从 VRRP开始了解起:
(1)VRRP,全称 Virtual Router Redundancy Protocol,中文名为虚拟路由冗余协议,VRRP的出现是为了解决静态路由的单点故障。
(2)VRRP是通过一种竟选协议机制来将路由任务交给某台 VRRP路由器的。
(3)VRRP用 IP多播的方式(默认多播地址(224.0_0.18))实现高可用对之间通信。
(4)工作时主节点发包,备节点接包,当备节点接收不到主节点发的数据包的时候,就启动接管程序接管主节点的开源。备节点可以有多个,通过优先级竞选,但一般 Keepalived系统运维工作中都是一对。
(5)VRRP使用了加密协议加密数据,但Keepalived官方目前还是推荐用明文的方式配置认证类型和密码。
        在 Keepalived 服务之间,只有作为主的服务器会一直发送 VRRP 广播包,告诉备它还活着,此时备不会枪占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性,接管速度最快可以小于1秒。

3. keepalived配置

3.1 某台RealServer down

问题: 在上述的LVS-DR示例搭建中,如果节点RS2中的Apache服务关闭后,怎么可以通过Keepalived软件实现健康检测,让系统通过邮件的方式接收到节点故障的问题呢?
解决办法:
(1)首先需要一台主机,一台备机,并且两台机子上,分别安装了keepalived软件,并且没有添加VIP(如果之前添加了,使用命令 ip addr del 删除);

实验设备 主机 备机 RS2 RS3
主机名 servera serverb server2 server3
IP 192.168.1.136 192.168.1.116 192.168.1.102 192.168.1.103

(2)安装完成后,配置主备机的主配置文件:
keepalived 的主配置文件是 /etc/keepalived/keepalived.conf ,配置情况如下(主机)

Configuration File for keepalived

global_defs {
     			//全局配置
   notification_email {
     		//定义报警收件人邮件地址
    root@localhost
       }
   notification_email_from keepalived@localhost	//定义报警发件人邮箱
   smtp_server 127.0.0.1					//本机邮箱服务器地址
   smtp_connect_timeout 30					//定义邮箱超时时间
   router_id LVS_DEVEL						//定义路由标识信息,同局域网内唯一
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
     			
    state MASTER		//指定keepalived节点的初始状态为MASTER
    interface ens33		//设定VRRP实例绑定的网卡接口为ens33,用户发送VRRP包
    virtual_router_id 51	//虚拟路由的ID,同一集群要一致
    priority 100		//定义优先级,按优先级来决定主备角色,优先级越大越优先 
    advert_int 1 		//主备通讯时间间隔
    authentication {
     		//配置认证
        auth_type PASS		//认证方式,此处为密码
        auth_pass 1111		//同一集群中的keepalived配置里的此处必须一致
    }
    virtual_ipaddress {
     		//配置要使用的VIP地址
        192.168.1.100
         }
}

virtual_server 192.168.1.100 80 {
     	//配置虚拟服务器
    delay_loop 6			//健康检查的时间间隔
    lb_algo rr				//lvs调度算法
    lb_kind DR				//lvs模式为DR
   # persistence_timeout 50		//持久化超时时间,单位是秒,注释掉
    protocol TCP			//TCP协议
    
    real_server 192.168.1.102 80 {
     	//定义真实处理请求的服务器 设定RS的IP和端口
      weight 1				//给服务器指定权重,默认为1
      TCP_CHECK {
     			//用于TCP检测
       connect_timeout 3		//连接超时时间
       nb_get_retry 3			//get尝试次数
       delay_before_retry 3		//在尝试之前延迟多长时间
      }
    }

    real_server 192.168.1.103 80 {
     	//定义RS3服务器
      weight 1
      TCP_CHECK {
     
       connect_timeout 3
       nb_get_retry 3
       delay_before_retry 3
      }
    }
}

服务器架构(2)——LVS负载均衡集群+Keepalived配置lvs高可用(DR模式)_第15张图片
(3)配置完成后,就可以开启keepalived服务:systemctl start keepalived.service
使用命令ipvsadm -ln可以查看主机地址和端口


测试验证: 当keepalived按照上述配置文件,配置并启动成功后,在RS2上停掉Apache服务,通过ipvsadm -ln 查看主机地址和端口,可以看出来RS2的IP的端口,并没有显示出来,并且主机上接收到一封邮件,通过mail可以查看邮件,邮件显示RS2[192.168.1.102]:80 - DOWN,说明keepalived成功实现了健康检测功能。
在这里插入图片描述
服务器架构(2)——LVS负载均衡集群+Keepalived配置lvs高可用(DR模式)_第16张图片
服务器架构(2)——LVS负载均衡集群+Keepalived配置lvs高可用(DR模式)_第17张图片
服务器架构(2)——LVS负载均衡集群+Keepalived配置lvs高可用(DR模式)_第18张图片

3.2 LVS本身down

如果当主机停掉了keepalived,此时用户从外部访问VIP是否会出现访问失败?
显然是不会的,Keepalived高可用是通过 VRRP 进行通信的, VRRP是通过竞选机制来确定主备的,主的优先级高于备,因此,工作时主会优先获得所有的资源,备机处于等待状态,当主机挂了的时候,备机就会接管主机的资源,然后顶替主机对外提供服务。


实验验证:还是上述的两台主备机,servera/serverb。两台RS正常运行。注意:备机上不要忘记安装ipvsadm。
服务器架构(2)——LVS负载均衡集群+Keepalived配置lvs高可用(DR模式)_第19张图片
(1)当主机挂了后,通过外部客户端访问VIP是正常访问的,备机接管了主机资源
服务器架构(2)——LVS负载均衡集群+Keepalived配置lvs高可用(DR模式)_第20张图片
服务器架构(2)——LVS负载均衡集群+Keepalived配置lvs高可用(DR模式)_第21张图片
服务器架构(2)——LVS负载均衡集群+Keepalived配置lvs高可用(DR模式)_第22张图片
(2)当重新开启主机服务后,资源又会重新回到主机上,这是因为主机的优先级在配置时,是高于备机的。
服务器架构(2)——LVS负载均衡集群+Keepalived配置lvs高可用(DR模式)_第23张图片
服务器架构(2)——LVS负载均衡集群+Keepalived配置lvs高可用(DR模式)_第24张图片
        在Keepalived服务正常工作时,主Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup节点自己还活着,当主Master节点发生故障时,就无法发送心跳消息,备节点无法检测到来自主Master节点心跳了,于是调用自身的接管程序,接管主Master节点的IP资源及服务。而当主Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。

你可能感兴趣的:(企业实战)