参考博客:https://www.cnblogs.com/wyzhou/p/9741790.html

了解LVS之前,先介绍一下负载均衡集群的概念。

背景:如果一台服务器承受过多的压力,那么服务可能会崩溃,所以应该让更多地服务器分摊这些压力,当一定数量的服务器作为一个整体对外提供服务,并且分摊压力时,那么我们可以称这些服务器为“负载均衡集群”。

那么负载均衡集群具体使用什么技术来实现呢?

实现方案大的方面可以分为两个方面:硬件方案  和  软件方案

硬件方案:就是直接购买相应的负载均衡设备(F5,Citrix)

软件方案:LVS、nginx、haproxy等软件实现。

此时引入LVS的概念:

LVS的全称是Linux virtual server,即Linux虚拟服务器。之所以是虚拟服务器,是因为LVS自身是个负载均衡器(director),不直接处理请求,而是将请求转发至位于它后端真正的服务器realserver上。

LVS有多种模式,不同模式下,实现负载均衡的方法也不同。

主要有三种模型:NAT、TUN 、DR 

LVS是四层(传输层tcp/udp)、七层(应用层)的负载均衡工具,只不过大众一般都使用它的四层负载均衡功能ipvs,而七层的内容分发负载工具ktcpvs(kernel tcp virtual server)不怎么完善,使用的人并不多

LVS起的作用:

LVS(一)理解LVS以及其三种模式

图中各个组成的含义:

A:客户端

B:LVS服务器,代表安装了LVS服务的服务器

C:真正处理用户请求的服务器们

LVS服务器和realserver们就形成了一个“负载均衡集群”

该图片的响应过程:

当用户端需要访问web服务时,那么这些请求就会发送到LVS服务器,LVS服务器中并没有安装httpd服务,此时它会向后端服务

器请求,当后端服务器处理完请求后,再将对应的响应报文返还给LVS,最后由LVS再返还给客户端。

所以LVS起的是调度器也叫(Director导演)的作用。

负载均衡集群的三层结构

一般来说,LVS集群采用三层结构,其主要组成部分为:

A、负载调度器(loadbalancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。

B、服务器池(serverpool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。

C、共享存储(sharedstorage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。

LVS软件的组成:ipvsadm ipvs

ipvsadm:LVS的管理工具,管理员通过ipvsadm定义或管理集群规则

ipvs:集成在内核中的框架,根据定义好的集群规则进行工作。

ipvs是集成在内核中的框架,可以通过用户空间的程序ipvsadm工具来管理,该工具可以定义一些规则来管理内核中的ipvs。就像iptables和netfilter的关系一样。(iptables之前学过,忘了的话可以参照之前的博客)。

LVS-ipvs三种模式的工作原理

首先要解释的是LVS相关的几种IP:

  • VIP: (virtual IP)LVS服务器上接收外网数据包的网卡IP地址
  • DIP: director IP,LVS服务器上转发数据包到realserver的网卡IP地址
  • RIP: realserver(常简称为RS)上接收Director转发数据包的IP,即提供服务的服务器IP
  • CIP: 客户端的IP
  • LVS(一)理解LVS以及其三种模式

 LVS的三种工作模式:

1、通过网络地址转换(NAT)将一组服务器构成一个高性能的、高可用的虚拟服务器,是VS/NAT技术。

2、在分析VS/NAT的缺点和网络服务的非对称性的基础上,提出了通过IP隧道实现虚拟服务器的方法VS/TUN(Virtual Server via IP Tunneling)

3、通过直接路由实现虚拟服务器的方法VS/DR(Virtual Server via Direct Routing),它们可以极大地提高系统的伸缩性

一、LVS/NAT模式:(最简单)

       客户端发送的请求到达Director后,Director根据负载均衡算法改写目标地址为后端某个RIP(web服务器池中主机之一)并转发给该后端主机,就像NAT(网络地址转换)一样

当后端主机处理完请求后,后端主机将响应数据交给Director,并由director改写源地址为VIP后传输给客户端。大多数商品化的IP负载均衡硬件都是使用此方法,如Cisco的LocalDirector、F5的Big/IP。

LVS(一)理解LVS以及其三种模式

如图所示:客户端的请求发往LVS主机,此时的IP为CIP,目标IP为LVS的VIP,当LVS收到客户端的请求报文时,会将请求报文中的CIP修改成后端某个服务器的RIP( Real IP ),此时报文自然分发到对应的realserver中,当对应的realserver处理完报文后会进行响应,此时源IP就是RIP,目标IP就是CIP,显而易见,CIP对realserver来说,肯定不在一个网络内,CIP是一个公网IP,此时就会将所有的realserver网关只想DIP,此时realserver处理完的报文会只想DIP,DIP就是LVS的内网IP,LVS接收到RIP源报文时,目标IP时CIP,此时LVS会将响应报文的源IP 改成VIP,目标IP时CIP,于是响应报文就会发往客户端,客户端接收到响应报文,即接收到想后端服务器请求的内容。

这就是LVS/NAT模型的全过程。

注意:LVS服务器将修改后的CIP具体发给那个RIP,就看LVS用的具体是哪种算法了。eg:轮询调度算法:即第一次将目标IP改成RIP1,第二次改成RIP2,第三次改成RIP3以此类推。

这种模式下:

  1. RIP和DIP一般处于同一私有网段中。但并非必须,只要它们能通信即可
  2. 各RealServer的网关指向DIP,这样能保证将响应数据交给Director。
  3. VS/NAT模式的最大缺点是Director负责所有进出数据:不仅处理客户端发起的请求,还负责将响应传输给客户端。而响应数据一般比请求数据大得多,调度器Director容易出现瓶颈。(也就是像7层负载的处理方式一样,但却没有7层负载那么"多功能")
  4. 这种模式配置起来最简单。

二、LVS/TUN模式

采用NAT技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。

为了解决这个问题,调度器把请求报文通过IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务响应报文比请求报文大许多,采用VS/TUN技术后,调度器得到极大的解放,集群系统的最大吞吐量可以提高10倍。

LVS(一)理解LVS以及其三种模式

VS/TUN模式的工作原理:

  • (1)IP隧道技术又称为IP封装技术,它可以将带有源和目标IP地址的数据报文使用新的源和目标IP进行第二次封装,这样这个报文就可以发送到一个指定的目标主机上;
  • (2)VS/TUN模式下,调度器和后端服务器组之间使用IP隧道技术。当客户端发送的请求(CIP-->VIP)被director接收后,director修改该报文,加上IP隧道两端的IP地址作为新的源和目标地址,并将请求转发给后端被选中的一个目标;
  • (3)当后端服务器接收到报文后,首先解封报文得到原有的CIP-->VIP,该后端服务器发现自身的tun接口上配置了VIP,因此接受该数据包
  • (4)当请求处理完成后,结果将不会重新交给director,而是直接返回给客户端。此时响应数据包的源IP为VIP,目标IP为CIP。

采用VS/TUN模式时的基本属性和要求:

  1. RealServer的RIP和director的DIP不用处于同一物理网络中,且RIP必须可以和公网通信。也就是说集群节点可以跨互联网实现。
  2. realserver的tun接口上需要配置VIP地址,以便接收director转发过来的数据包,以及作为响应报文的源IP。
  3.    director转发给realserver时需要借助隧道,隧道外层的IP头部的源IP是DIP,目标IP是RIP       (DIP——>RIP)
    realsever响应给客户端的IP头部是根据隧道内层的IP头分析得到的,源IP是VIP,目标IP是CIP(VIP<R>——>CIP)这样客户端就无法区分这个VIP到底是director的还是RS组中的
  4. director只处理入站请求,响应请求由realserver自己完成。

一般来说,VS/TUN模式会用来负载调度缓存服务器组,这些缓存服务器一般放置在不同网络环境,可以就近返回数据给客户端。在请求对象不能在Cache服务器本地命中的情况下,Cache服务器要向源服务器发请求,将结果取回,最后将结果返回给客户。

 

三、LVS/DR模式

VS/TUN模式下,调度器对数据包的处理是使用IP隧道技术进行二次封装。VS/DR模式和VS/TUN模式很类似,只不过调度器对数据包的处理是改写数据帧的目标MAC地址,通过链路层来负载均衡

VS/DR通过改写请求报文的目标MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同VS/TUN技术一样,VS/DR技术可极大地提高集群系统的伸缩性。这种方法没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连在同一物理网段上,以便使用MAC地址通信转发数据包。

VS/DR模式的工作原理:

  • (1)客户端发送的请求被director接收后,director根据负载均衡算法,改写数据帧的目标MAC地址为后端某RS的MAC地址,并将该数据包转发给该RS(实际上是往整个局域网发送,但只有该MAC地址的RS才不会丢弃)
  • (2)RS接收到数据包后,发现数据包的目标IP地址为VIP,而RS本身已经将VIP配置在了自身的某个接口上,因此RS会接收下这个数据包并进行处理
  • (3)处理完毕后,RS直接将响应报文响应给客户端。此时数据包源IP为VIP,目标IP为CIP

也就是说,客户端请求发送到LB上,源和目标IP为CIP:VIP,LB上有VIP和DIP,重新改写MAC地址后通过DIP发送给某个realserver,如RS1,此时源和目标IP还是CIP:VIP,但是目标MAC地址改写为RIP1所在网卡的MAC地址"RS1_MAC",RS1发现自身有VIP地址,所以收下此数据报文(所以在RS上必须配置VIP)。返回时,RS1根据路由表直接返回给客户端,此时,源和目标IP是VIP-->CIP。但由于流出接口为RIP所在网卡接口,因此源MAC地址为RIP所在接口的MAC地址。这一细节在考虑CIP、RIP不同网段时的配置时很重要。

LVS(一)理解LVS以及其三种模式

采用VS/DR模式时的基本属性和要求:

  1. RealServer的RIP和director的DIP必须处于同一网段中,以便使用MAC地址进行通信
  2. realserver上必须配置VIP地址,以便接收director转发过来的数据包,以及作为响应报文的源IP。
  3. realsever响应给客户端的数据包的源和目标IP为VIP-->CIP。
  4. director只处理入站请求,响应请求由realserver完成(这一点类似VS/TUN)

 

lvs-ipvs的三种模式比较

三种模式的比较如图所示:

LVS(一)理解LVS以及其三种模式

在性能上,VS/DR和VS/TUN远高于VS/NAT,因为调度器只处于从客户到服务器的半连接中,按照半连接的TCP有限状态机进行状态迁移,极大程度上减轻了调度器的压力(真正建立TCP连接的是RS和Client)。VS/DR性能又稍高于VS/TUN,因为少了隧道的开销

但是,VS/DR和VS/TUN的主要区别是VS/TUN可以跨网络实现后端服务器负载均衡(也可以局域网内),而VS/DR只能和director在局域网内进行负载均衡

性能:VS/DR > VS/TUN  > VS/NAT

LVS(一)理解LVS以及其三种模式

相关文章: