高并发负载均衡---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)容易出现单点故障

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

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

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

    

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

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

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


一:负载均衡概述

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

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

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

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

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

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

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

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

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

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

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

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


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

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


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图示


 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对内可见对外隐藏

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可以部署在不同的局域网中。

设计图:


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负载均衡调度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/53234.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot+vue网红酒店客房预定系统的设计与实现_ui9bt

随着计算机技术发展,计算机系统的应用已延伸到社会的各个领域,大量基于网络的广泛应用给生活带来了十分的便利。所以把网红酒店预定管理与现在网络相结合,利用计算机搭建网红酒店预定系统,实现网红酒店预定的信息化。则对于进一步…

供水管网漏损监测,24小时保障城市供水安全

供水管网作为城市生命线重要组成部分,其安全运行是城市建设和人民生活的基本保障。随着我国社会经济的快速发展和城市化进程的加快,城市供水管网的建设规模日益增长。然而,由于管网老化、外力破坏和不当维护等因素导致的供水管网漏损&#xf…

电脑连接KONICA MINOLTA(柯尼卡美能达) 打印机及驱动安装

电脑系统:Windows 7 安装的打印机型号:Konica minolta bizhub 363 驱动下载:https://www.konicaminolta.com.cn/support/drivers/index.html 打印机配置好网络 1.打开控制面板,或点击桌面开始(WIN)&#x…

Webpack5新手入门简单配置

1.初始化项目 yarn init -y 2.安装依赖 yarn add -D webpack5.75.0 webpack-cli5.0.0 3.新建index.js 说明:写入下面的一句话 console.log("hello webpack"); 4.执行命令 说明:如果没有安装webpack脚手架就不能执行yarn webpack&#xff08…

47.Linux学习day01 基础命令详解1(很全面)

目录 一、Linux和Windows的区别 二、Linux系统目录结构 常见目录说明 三、Linux常见的基础命令 1.pwd 2.cd 3.ls 4.man 5. touch 6.mkdir 7. rmdir 今天正式学习了linux的一些基础操作和基础知识,以及linux和windows的区别。 一、Linux和Windows的区…

Your local changes to the following files would be overwritten by checkout

Git 之 Your local changes to the following files would be overwritten by checkout 今天在切换分支时遇到了这样一个问题: 首先翻译下: Your local changes to the following files would be overwritten by checkout 大致意思就是: 当…

HCIP---OSPF的MGRE实验

一、实验要求: 1、R6为ISP只能配置ip地址,R1-5的环回为私有网段 2、R1/4/5为全连的MGRE结构,R1/2/3为星型的拓扑结构,R1为中心站点 3、所有私有网段可以互相通讯,私有网段使用OSPF协议完成 二、实验步骤 &#xf…

Leetcode-每日一题【剑指 Offer 09. 用两个栈实现队列】

题目 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 示例 1: 输入: [&…

数据库的约束 详解

一、约束的概述 1.概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。 2.目的:保证数据库中数据的正确、有效性和完整性。 3.分类: 约束描述关键字非空约束限制该字段的数据不能为nullNOT NULL唯一约束保证该字段的所有数据都是唯一、不…

c51单片机16个按键密码锁源代码(富proteus电路图)

注意了:这个代码你是没法直接运行的,但是如果你看得懂,随便改一改不超过1分钟就可以用 #include "reg51.h" #include "myheader.h" void displayNumber(unsigned char num) {if(num1){P10XFF;P10P11P14P15P160;}else if…

【MySQL】事务与隔离级别

目录 一、事务的概念二、为什么要有事务三、引擎对事务的支持四、事务的提交方式五、事务的操作5.1 准备5.2 正常事务操作5.3 非正常事务5.4 总结 六、事务的隔离级别6.1 隔离性6.2 隔离级别6.3 隔离级别的查看6.4 设置隔离级别6.4.1 会话级别6.4.2 全局级别 6.5 隔离级别的具体…

CleanMyMac真的有必要买吗 2023年最新CleanMyMac和腾讯柠檬详细解析

在如今的电脑使用过程中,保持电脑干净整洁是一项重要的任务。而随着Mac电脑越来越受欢迎,Mac电脑清理软件也愈发流行。在众多的Mac电脑清理软件中,CleanMyMac是一款备受好评的软件。但是,很多人还在犹豫CleanMyMac有必要买吗&…