高并发负载均衡---LVS

这篇具有很好参考价值的文章主要介绍了高并发负载均衡---LVS。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

一:负载均衡概述

二:为啥负载均衡服务器这么快呢?

​编辑

2.1 七层应用程序慢的原因

2.2 四层负载均衡器LVS快的原因

三:LVS负载均衡器的三种模式

3.1 NAT模式

 3.1.1 什么是NAT模式

3.1.2 NAT模式实现LVS的缺点

3.1.3 NAT模式的注意事项

3.2 DR模式 

3.2.1 什么是MAC欺骗?

3.2.2 为什么Real Server需要处于同一个局域网内?

3.2.3 如何实现VIP的对内可见,对外隐藏

3.2.4 为什么DR模式要快

3.3 TUN隧道模式

3.3.1 实现原理

3.3.2 优缺点

四:Real Server调度算法 

4.1 如何监控每台Real Server的负载情况?

4.2 客户端长连接



前言

     在互联网发展早期,由于用户量较少,业务需求也比较简单。对于软件应用,我们只需要一台高配置的服务器,把业务所有模块全单机部署,这样的软件架构模式称为单体架构模式。

     随着用户量的增加,客户端请求的并发量越来越大,在这个过程中单体架构会产生两个问题。

1)单机的硬件资源是有限的,哪怕使用高配置服务器,其硬件资源仍然会称为瓶颈,随着客户端请求并发量越来越大,但单机性能的上涨受限,进而使得软件的性能逐渐下降,访问延迟越来越高。

2)容易出现单点故障

高并发负载均衡---LVS,高并发负载均衡,负载均衡,lvs,高并发

      为了解决上述的问题,我们引入了将应用进行分布式集群化部署的架构,分为两种水平架构部署和垂直架构部署。

1)水平架构部署:应用程序分片集群化部署,例如Redis的分片集群。实现高性能和高拓展。

2)垂直架构部署:为了解决单点故障问题,一般会对应用程序进行主备/主从架构,例如Redis的主从。

    

高并发负载均衡---LVS,高并发负载均衡,负载均衡,lvs,高并发

      但是新的架构设计有两个问题亟待解决:

 1)客户端的请求如何均匀的分发到多台目标服务器上呢?

 2)如何检测每台目标服务器的健康状态,避免客户端向已经宕机的服务器发起请求导致请求失败呢?如何支持目标服务器进行动态的上下线呢?


一:负载均衡概述

     为了解决前言中提到的两个问题,于是引入了负载均衡技术的设计。简单来说负载均衡的核心目的就是做分治,将客户端的请求均匀的分发到多台目标服务器上,并支持目标服务器动态上下线的功能。 

    由于进行了分治处理,目标服务器多台的性能得到了释放,因此能够接受更大的客户端请求并发,实现了高并发负载均衡的目标。

    那负载均衡的具体实现是什么呢?

  首先实现负载均衡的可能方式有两种:

1)客户端层面做负载均衡。

2)把负载均衡功能解耦出来单独部署成一个单独的负载均衡服务器。

    首先第一种方案,在客户端层面做负载均衡显然是不可取的,因为每一台Real Server服务器都有一个提供服务的RIP,如果让客户端记录所有的Real Server对应的RIP显然是非常荒谬的。

    比如想象这样一件事,百度的网页放在了多台Tomact目标服务器上部署,比如今天突然百度新上线了一台Tomcat服务器,难道要打电话给所有使用百度的用户,告诉他们新的Tomact服务器的IP地址,让后让他们去访问新的Tomcat服务器?这显然是不对的。

     第二种方案显然是可行的,其基础设计图如下:

高并发负载均衡---LVS,高并发负载均衡,负载均衡,lvs,高并发

       注意:在这种设计模型下,客户端其实根本就不知道后端服务器集群是否使用了负载均衡,这对客户端都是透明的,客户端只要向后端服务器集群暴露的统一流量入口VIP发起请求就行了,其内部是如何进行请求分发的,对客户端来根本就不重要。

     此时我们再想一个问题,Real Server为啥要集群化部署呢?还不是因为单台Real Server扛不住很高的并发因此需要集群化部署。那么疑问就来了,为啥单台Real Server抗不住的并发,需要多台Real Server才能抗住的并发,单台负载均衡服务器就能抗住?

问题:为啥负载均衡服务器这么快呢?


二:为啥负载均衡服务器这么快呢?

     负载均衡服务器的功能是将客户端的请求均匀的分发给目标服务器,其是否快的根本原因就是在于计算机接受请求数据包->处理请求数据包->发出响应数据包的这个过程是否是足够快。

高并发负载均衡---LVS,高并发负载均衡,负载均衡,lvs,高并发


2.1 七层应用程序慢的原因

   

      如上图所示应用程序服务器例如Tomcat等,是属于应用层的服务器,属于OSI七层的服务器。

  在应用层的应用程序进程在跨主机跨进程进行通信的时候,首先需要在传输控制层通过三次握手建立长连接,且请求数据包需要通过网络IO到用户空间的应用程序进程当中,在进行处理。这个过程涉及到以下几个耗时的步骤:

  1)内核网络协议栈接受数据包时涉及到的中断,CPU拷贝。

  2)用户态的应用程序进程通过网络IO去读取Sockt缓冲区的数据时,涉及到 中断,用户态内核态的切换,CPU拷贝

  3)用户态的应用程序进程处理数据包,进行业务逻辑处理的耗时

  4)用户态的应用程序进程发出响应数据包的时候,涉及到的一系列的中断,上下文切换,CPU拷贝的代价。

上述原因就是应用程序服务器慢的原因。


2.2 四层负载均衡器LVS快的原因

    首先LVS在逻辑上到了四层但又没有到四层,逻辑上到了四层是LVS只是看了一下请求报文中的目标地址和端口。如果是LVS负载均衡服务器的IP地址和端口号就进行负载,否则就不进行处理。

  之所以需要看请求报文中的目标地址和端口号的本质目的就是,一台计算机上有很多端口号,但只有负载均衡器监听的端口号才需要进行处理。

  之所以说LVS又没到四层的原因是,LVS在传输控制层不需要进行三次握手,只是看了一下端口号。

    LVS的性能快在是基于四层的且不需要建立连接。相较于七层应用程序进程来说快太多了,可以看成LVS就是只做了数据包的转发,不需要对数据包进行修改,所以很快。

       但是一定要注意的是使用LVS负载均衡服务器的时候,Real Server必须是镜像,也就是提供完全一样的服务。

    因为LVS仅仅只是四层负载均衡服务器,其没有涉及到应用层,甚至都不知道应用层使用的是HTTP还是FTP等。因此自然也不能根据HTTP请求的报文信息来决定把请求分发到哪个目标服务器上。所以Real Server必须是镜像的

     但基于七层负载的Nginx,因为其是基于应用层的负载均衡,可以根据HTTP请求的报文信息来决定把请求分发到哪个目标服务器上,比如Cookie,消息体,RequestHeader等。因此Nginx的目标服务器可以是提供不一样的服务的,Nginx可以根据HTTP请求报文的信息来进行负载。


三:LVS负载均衡器的三种模式

    我们已经讲了为什么要有负载均衡,也讲了负载均衡的作用以及四层负载均衡LVS为什么快,现在开始思考LVS如何实现呢?

3.1 NAT模式

NAT模式实现LVS图示

高并发负载均衡---LVS,高并发负载均衡,负载均衡,lvs,高并发


 3.1.1 什么是NAT模式

   所谓NAT模式,其实是(Network Adress Transfer) 网络地址转换协议的缩写。其原理用一句话说就是在数据报文即将发出去之前对数据报文的IP地址和端口号进行修改。


3.1.2 NAT模式实现LVS的缺点

1. NAT网络地址转换协议是网络层处理的,性能比数据链路层MAC欺骗要慢。

2. LVS负载均衡服务器是后端服务器高并发流量的入口,频繁的进行NAT网络地址转换会消耗CPU的性能,并且还需要消耗内存空间存放地址映射关系。

3. 无论是客户端发给服务器的请求,还是服务器给客户端的响应都需要经过LVS,会对LVS造成过大的压力,大大消耗LVS的网络带宽;而且请求的数据包和响应的数据包的大小是不对称的,因此会使得LVS的吞吐量进一步下降。

     这里着重讲一下上述第三点的原理

      首先负载均衡机制的核心目的是让客户端的请求合理均分地分发给多台目标服务器上。其本质地目的是用多台目标服务器均摊客户端请求流量,以便能够承载更大地并发。那么目标服务器地响应应该由目标服务器直接返回给对应的客户端即可。这样LVS只需要承担客户端请求的网络带宽,而目标服务器响应的网络带宽由多台目标服务器共同承担,自然LVS的吞吐量就上升了。

       请求和响应数据包大小不对称很常见,比如我们打开网页请求百度的主页。在这个情景下,请求数据包很小,但是响应数据包确实整个页面的文字和图片,响应数据包比请求数据包大很多,而请求和响应数据包都经过LVS,这种不对称,会进一步降低LVS的吞吐量。


3.1.3 NAT模式的注意事项

   在使用NAT的模式的时候要注意,Real Server的默认网关要设置为LVS负载均衡服务器。否则NAT模式会失效。

       看看3.1的图例Real Server处理完客户端的数据包后,会封装(RIP->CIP)的响应数据包,如果默认网关不配置成LVS负载均衡服务器,这个响应数据包很可能不经过LVS负载均衡器将数据包转换为(VIP->CIP),就直接返回给客户端。但客户端发出的请求数据包确是(CIP->VIP),因此(RIP->CIP)的数据包会被直接丢弃。

       Real Server响应数据包在NAT模式下必须要经过LVS服务器做S-NAT之后,由LVS负载均衡器将数据包返回给客户端,


3.2 DR模式 

     DR模式的提出本质上是为了解决NAT模式存在的问题,其思想是既然NAT的模式目标服务器的响应需要经过LVS负载均衡服务器导致其吞吐量下降,那DR模式下目标服务器的响应就直接返回给客户端达到减轻LVS压力的目的,从而提高LVS的吞吐量。

   为了实现DR模式,涉及到的重要技术就是 MAC欺骗VIP对内可见对外隐藏

高并发负载均衡---LVS,高并发负载均衡,负载均衡,lvs,高并发

DR模式重要的几个特点: 

1.  LVS负载均衡服务器做基于数据链路层的MAC欺骗。

2.  每台Real Server都具有VIP,但是对内可见,对外隐藏。

3.  同一台LVS负载均衡服务器所负载的多台Real Server需处于和LVS负载均衡服务器在同一个局域网内。

4.  Real Server的响应不经过LVS负载均衡服务器,会直接返回给客户端。


3.2.1 什么是MAC欺骗?

    如上图所示LVS服务器接收到(CIP->VIP)的数据包之后,其并没有做D-NAT转换,修改其IP到某一台RIP。而是通过Real Server调度算法,选择一台目标服务器,根据其RIP通过arp协议获取到RIP对应的MAC地址,封装到当前数据包的MAC头上。

     客户端请求的目标地址就是VIP,就是LVS负载均衡服务器本身,本应当接收包,但是却通过修改MAC地址到另一台Real Server的MAC地址而将数据包转发出去的过程称为MAC欺骗。

重点:MAC欺骗是基于二层数据链路层的技术,其速度要比基于四层的NAT技术要快。


3.2.2 为什么Real Server需要处于同一个局域网内?

      在进行LVS部署的时候,需要注意同一台LVS负载均衡服务器所负载的多台Real Server需处于同一个局域网内

  其原因是LVS负载均衡服务器在进行MAC欺骗时,会通过Real Server调度策略选择一台Real Server的RIP,然后通过arp协议获取此RIP对应的MAC地址

   这里要注意arp协议是局域网内部的基于交换机的广播协议,所以自然要求多台Real Server和LVS负载均衡服务器在同一个局域网内部。


3.2.3 如何实现VIP的对内可见,对外隐藏

     因为需要达到目标服务器直接向客户端返回响应的目的,所以目标服务器返回的数据包应该是 (VIP->CIP),也就是说目标服务器Real Server 需要具备VIP的网络接口。

      但是互联网中自然不能出现多个相同的VIP地址,所以只有负载均衡器LVS,能够将VIP暴露到公网中,而每一个Real Server都应该知道自己有VIP,但不能将VIP暴露出去。

那么如何实现VIP的对内可见,对外隐藏呢?

      修改Linux内核参数

目录 /proc/sys/net/ipv4/conf/*interface*/

arp_ignore:定义网卡接收到ARP请求时的响应级别:

     0: 只要本地的所有网络接口配置了相应的地址,就给予响应,返回相应地址所对应的网卡的MAC地址。

     1:仅在请求的目标网络接口上查找ARP请求相应的地址,如果有就返回此网卡的MAC地址。

arp_announce: 定义网络接口连接互联网时向外通告时的通告级别

     0:将本地所有网络接口上的任何地址向外通告;

     1:试图仅向目标网络通告与其网络匹配的地址;

     2:仅将连接互联网的网卡上配置的所有地址进行通告

需要进行配置 arp_ignore=1 arp_announce=2

arp_ignore=1 的含义是 网络接口接收ARP请求后,不将其它网络接口的地址暴露出去。

arp_annouce=2 的含义是 当前网络接口连接互联网后,不会将其它网络接口的地址通告出去。

注意一台计算机可能有多个interface,只需配置 RIP所在的interface即可。

同时还要注意需要在Real Server里创建Loopback网卡的网络接口做为VIP,也就是VIP要配置到Loopback网卡上。

其根本原因是Looback网卡是内核应用程序模拟的网卡,不是物理网卡,不会连接互联网主动通告,也不会接收ARP请求。


3.2.4 为什么DR模式要快

     上面讲过NAT模式,这里讨论DR模式为什么要比NAT模式快,其原因主要有以下几点:

1. DR模式是基于二层数据链路层的MAC欺骗,而NAT模式是基于四层的网络地址转换协议,因此DR模式比NAT模式更快,更节省CPU资源。

2. DR模式下目标服务器的响应不会经过LVS负载均衡服务器,大大减轻了LVS负载均衡服务器的网络带宽压力,节约了网卡资源,提升了吞吐量。、


3.3 TUN隧道模式

     每一种新技术的诞生,很多时候都是为了解决旧技术存在的痛点。学习新技术时,先了解技术的发展历史,理解旧技术的痛点在哪,学习新技术就能游刃有余。

        DR模式的痛点:

        DR模式虽然相较于NAT模式性能有较大的提升,但是其限制LVS服务器需要和所有的Real Server在同一个局域网中。无法突破地域的限制

       TUN隧道模式目的就是突破地域的限制,使得LVS服务器和所有的Real Server可以部署在不同的局域网中。

设计图:

高并发负载均衡---LVS,高并发负载均衡,负载均衡,lvs,高并发


3.3.1 实现原理

     如上图可以知道在TUN隧道模式下,LVS负载均衡服务器在转发数据包前通告Real Server调度算法选择一台Real Server,且在目标数据包外层再封装一个(VIP->RIP)的数据包。这种情况可以理解为"数据包背着数据包"

     在这种情况下外层数据包是由(VIP->RIP),因此不需要做基于二层数据链路层的MAC欺骗,直接将数据包转发给Real Server,因此LVS服务器和Real Server自然不需要在同一个局域网内部署


3.3.2 优缺点

优点:

    相较于DR模式,突破了地域的限制,LVS服务器可以和Real Server部署在不同的局域网中,提高了部署的灵活性。

缺点:

    TUN隧道模式的性能肯定是比NAT模式要高的,但其性能比DR模式要慢。因为这种"数据包背着数据包",使得数据包更大,在高并发的场景下其会消耗更多的网络带宽,网卡资源会成为其性能瓶颈。


四:Real Server调度算法 

     

LVS(Linux Virtual Server)主要有以下几种实现调度算法:

静态调度算法:只基于算法本身进行调度

  1. 轮询调度算法(Round Robin)

  2. 加权轮询调度算法(Weighted Round Robin)

  3. 源地址哈希算法 sh

  4. 目标地址哈希算法 dh

动态调度算法:根据各个Real Server的负载情况和算法来进行调度。优先调度负载程度最轻的Real Server

  1. 最少连接数调度算法(Least Connection)

  2. 加权最少连接数调度算法(Weighted Least Connection)

  3. 最短期望延迟算法(Shortest Expected Delay Scheduling) sed

  4. 最少队列算法(Never Queue Scheduling) nq

  5. 基于局部的最少连接算法:

  6. 带复制的基于局部的最少连接算法(Locality-Based Least Connections with Replication) lblcr

  7. FO算法(Weighted Fail Over) fo

  8. OVF算法(Overflow-connection) ovf

    每种调度算法的详情可见:LVS的12种Real Server调度算法


4.1 如何监控每台Real Server的负载情况?

    在使用动态调度算法的时候,需要监控各个Real Server的负载情况,比如连接数指标,那么LVS负载均衡器是如何知道每台Real Server上建立了多少长连接呢?

   其实很简单,客户端的握手报文会发送给LVS负载均衡器,因此LVS负载均衡器自然知道哪个客户端想要与哪台Real Server握手,LVS服务器监听到客户端发来的ACK包,就知道连接建立成功,于是连接数+1统计就可以。

注意:在DR模式和TUN隧道模式下,Real Server的响应数据包会直接发回给客户端,不会经过LVS服务器,因此三次握手的全过程并不能完全监控到,四次握手也是如此。


4.2 客户端长连接

     首先一定要明白的一点是LVS负载均衡服务器不会与客户端建立连接,也不会与Real Server建立连接,真正建立连接的是客户端与目标服务器。

    思考一个问题:客户端每发送的数据包都会经过Real Server调度算法进行负载均衡均分到多台Real Server吗?

    回答:在使用长连接时,LVS负载均衡服务器只会把客户端的长连接通过Real Server调度算法均摊到Real Server,让每台Real Server都分摊到一定量的客户端长连接。但连接建立后,客户端所有数据报文虽然也会发送给LVS服务器,但是此时LVS服务器如果判断当前客户端与Real Server已经建立过长连接,就会直接转发请求到目标Real Server,不会再进行Real Server负载均衡调度。文章来源地址https://www.toymoban.com/news/detail-637151.html

到了这里,关于高并发负载均衡---LVS的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • LVS负载均衡集群之LVS-NAT集群

    目录 一、什么是集群? 1.1、集群(cluster)的含义 1.2、问题 1.3解决方法 二、集群分类 2.1、负载均衡集群(Load Balance Cluster) 2.2、高可用集群(High Availability Cluster) 2.3、高性能运算集群 (High Performance Computer Cluster) 三、负载集群的架构 3.1、负载均衡的结构 第一层,负载调度器(L

    2024年02月13日
    浏览(36)
  • Linux lvs负载均衡

    Linux Virtual Server(LVS)是一个基于Linux内核的开源软件项目,用于构建高性能、高可用性的服务器群集。LVS通过将客户端请求分发到一组后端服务器上的不同节点来实现负载均衡,从而提高系统的可扩展性和可靠性。 LVS的核心组件: IPVS(IP Virtual Server):IPVS是LVS的核心模块,

    2024年02月14日
    浏览(63)
  • LVS 负载均衡集群

    集群(Cluster)是一组相互连接的计算机或服务器,它们通过网络一起工作以完成共同的任务或提供服务。集群的目标是通过将多台计算机协同工作,提高计算能力、可用性、性能和可伸缩性,适用于大量高并发的场景。 负载均衡器:减少响应延迟,提供并发处理能力 高可用

    2024年02月12日
    浏览(38)
  • 4.LVS负载均衡集群

    群集的含义 Cluster,集群、群集 由多台主机构成,但对外只表现为一个整体,只提供一个访问入口 (域名或IP地址),相当于一台大型计算机 多台服务器干一样的事叫集群,多台服务器各司其职叫分布式 解决方法 使用价格昂贵的小型机、大型机(纵向扩展) 使用多台相对廉价

    2024年02月09日
    浏览(94)
  • LVS负载均衡集群

    -A:添加虚拟服务器 -D:删除整个虚拟服务器 -s:指定负载调度算法(轮询:rr、加权轮询:wrr、最少连接:lc、加权最少连接:wlc) -a:表示添加真实服务器(节点服务器) -d:删除某一个节点 -t:指定 VIP地址及 TCP端口 -r:指定 RIP地址及 TCP端口 -m:表示使用 NAT群集模式

    2023年04月26日
    浏览(64)
  • LVS---负载均衡

    集群:为解决某个特定问题将多个计算机组合起来形成一个单系统   垂直扩展 :向上扩展,增加单个机器的性能。升级硬件。硬件升级是由瓶颈的 水平扩展 :向外扩展,增加设备。并行的运行多个服务,通过网络和算法,来调度服务分配的的问题。 负载均衡集群 :local blan

    2024年02月08日
    浏览(34)
  • 【LVS负载均衡群集】

    Cluster,集群、群集 由多台主机构成,但对外只表现为一个整体,只提供一个访问入口(域名或IP地址),相当于一台大型计算机 问题 * 互联网应用中,随着站点对硬件性能、响应速度、服务稳定性、数据可靠性等要求越来越高,单台服务器已经无法满足负载均衡及高可用的要求

    2024年02月08日
    浏览(43)
  • LVS负载均衡群集

    1.1企业群集应用概述 群集的含义 Cluster,集群、群集 由多台主机构成,但对外只表现为一个整体,只提供一个访问入口(域名或IP地址),相当于一台大型计算机。 问题 互联网应用中,随着站点对硬件性能、响应速度、服务稳定性、数据可靠性等要求越来越高,单台服务器已经

    2024年02月08日
    浏览(77)
  • LVS 负载均衡群集

    本章展示: 了解群集的结构与工作模式 了解 LVS 负载均衡群集原理 学会配置 NFS 共享服务 学会构建 LVS-NAT 负载均衡群集 1.1 LVS 群集应用基础 群集的称呼来自于英文单词“Cluster”,表示一群、一串的意思,用在服务器领域则表 示大量服务器的集合体,以区分于单个服务器。

    2024年01月16日
    浏览(51)
  • LVS负载均衡-DR

    1.DR模式中每台主机都有一个VIP地址 虚拟网址放在lo网卡上(回环网卡) arp_ignore=1 Arp_announce=2 系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址 2.内核参数修改   3.vim /etc/rc.conf   开机自启动   Chmod +x /etc/rc.d/rc.conf 4.实验 五台虚拟机(两台web服务虚拟

    2023年04月25日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包