LVS负载均衡(LVS简介、三种工作模式、十种调度算法)

LVS简介

LVS(Linux Virtual Server)是一种基于Linux内核的高可用性负载均衡软件。它通过将客户端请求分发到多个后端真实服务器,提高系统性能和可靠性。LVS支持多种调度算法,如轮询、最少连接、源地址哈希等,用于决定请求的转发方式。它还提供了高可用性的机制,包括热备份和故障自动切换。LVS具有灵活的配置和扩展性,适用于各种网络环境和应用场景。通过实现负载均衡,LVS能够提供稳定、高效的服务,满足大规模系统的需求。

工作原理:

  • 当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间
  • PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链
  • IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链
  • POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器

组成部分:

  • ipvs(ip virtual server):一段代码工作在内核空间,叫ipvs,是真正生效实现调度的代码。
  • ipvsadm:另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)

三种工作模式

原生只有3种模式(NAT,TUN,DR), fullnat工作模式默认不支持

LVS是四层负载均衡,也就是说建立在OSI模型的第四层——传输层之上,传输层上有我们熟悉的TCP/UDP,LVS支持TCP/UDP的负载均衡。因为LVS是四层负载均衡,因此它相对于其它高层负载均衡的解决办法,比如DNS域名轮流解析、应用层负载的调度、客户端的调度等,它的效率是非常高的。

LVS的IP负载均衡技术是通过IPVS模块来实现的,IPVS是LVS集群系统的核心软件,它的主要作用是:安装在Director Server上,同时在Director Server上虚拟出一个IP地址,用户必须通过这个虚拟的IP地址访问服务。这个虚拟IP一般称为LVS的VIP,即Virtual IP。访问的请求首先经过VIP到达负载调度器,然后由负载调度器从Real Server列表中选取一个服务节点响应用户的请求。 当用户的请求到达负载调度器后,调度器如何将请求发送到提供服务的Real Server节点,而Real Server节点如何返回数据给用户,是IPVS实现的重点技术,IPVS实现负载均衡机制有几种,分别是NAT、DR、TUN及FULLNAT。

1.LVS-NAT模式

Network Address Transaction,简称NAT模式
类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,即作为客户机的访问入口,也是各节点回应客户机的访问出口
服务器节点使用私有IP地址,与负载调度器位于同一个物理网络,安全性要优于其他两种方式

NAT(Network Address Translation)是一种外网和内网地址映射的技术。NAT模式下,LVS需要作为RS的网关,当网络包到达LVS时,LVS做目标地址转换(DNAT),将目标IP改为RS的IP。RS接收到包以后,处理完,返回响应时,源IP是RS IP,目标IP是客户端的IP,这时RS的包通过网关(LVS)中转,LVS会做源地址转换(SNAT),将包的源地址改为VIP,对于客户端只知道是LVS直接返回给它的。

2.LVS-DR 模式

Direct Routing,简称DR模式
采用半开放式的网络结构,与TUN模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络
负载调度器与各节点服务器通过本地网络连接,不需要建立专用的IP隧道

LVS-DR(Direct Routing)模式是LVS负载均衡的一种实现方式,通过在前端负载均衡器和后端真实服务器之间建立虚拟IP地址和ARP代理,将请求直接路由到后端服务器上,避免了数据包的二次复制和转发,提高了系统的性能和可靠性。这种模式需要在后端服务器上配置虚拟IP地址和直接路由规则,并保证后端服务器之间的网络互通。

3.LVS-TUN模式 

IP Tunnel,简称TUN模式
采用开放式的网络结构,负载调度器仅作为客户机的访问入口,各节点通过各自的Internet连接直接回应客户机,而不再经过负载调度器
服务器节点分散在互联网中的不同位置,具有独立的公网IP地址,通过专用IP隧道与负载调度器相互通信

LVS-TUN(Tunneling)模式是LVS负载均衡的一种实现方式,通过在前端负载均衡器和后端真实服务器之间建立隧道连接,将客户端请求封装在隧道中传输到后端服务器上进行处理。这种模式需要在前端负载均衡器和后端服务器上配置隧道设备,并使用隧道协议进行数据传输。LVS-TUN模式适用于跨子网或跨网络的场景,可以实现灵活的负载均衡和高可用性,但会引入额外的网络开销和延迟。

三种工作模式优缺点

以下是LVS三种工作模式(LVS-NAT、LVS-DR、LVS-TUN)的优缺点对比表格:

模式                                    优点                                        缺点
LVS-NAT- 简单易配置,不需要对后端服务器进行额外配置- 性能较低,数据包需要经过两次NAT转发
- 支持跨子网负载均衡- 后端服务器的响应数据包需要经过前端负载均衡器再返回给客户端
- 可以隐藏后端服务器的真实IP地址- 单个NAT节点成为性能瓶颈
LVS-DR- 性能高,请求直接路由到后端服务器,避免了数据包的二次复制- 需要在后端服务器上配置虚拟IP地址和直接路由规则
- 后端服务器可以直接与客户端通信,提高响应速度- 后端服务器之间需要保证网络互通
- 可以支持大规模部署和高并发流量- 不支持跨子网负载均衡
LVS-TUN- 支持跨子网和跨网络负载均衡- 引入额外的网络开销和延迟
- 灵活配置,适用于复杂网络环境- 需要在前端负载均衡器和后端服务器上配置隧道设备及协议
- 可以实现灵活的负载均衡和高可用性- 隧道连接的建立和维护需要额外的管理和资源消耗

需要注意的是,选择合适的工作模式取决于具体的应用场景和需求,每种模式都有其适用的情况和限制。

十种调度算法

1.轮询调度

按照顺序依次分配任务,每个处理器或资源依次处理一个任务,然后再循环到下一个任务。

2.加权轮询调度

在轮询调度的基础上,为不同的处理器或资源设置不同的权重,以实现更精细的负载均衡。

3.最小连接调度

将任务分配给当前连接数最少的处理器或资源,以保证负载均衡。

4.加权最小连接调度

在最小连接调度的基础上,为不同的处理器或资源设置不同的权重,以实现更精细的负载均衡。

5.基于局部的最少连接调度

根据客户端IP地址和服务器IP地址的局部性原则,将任务分配给距离客户端最近、连接数最少的处理器或资源。

6.带复制的基于局部性的最少连接调度

在基于局部的最少连接调度的基础上,将任务复制到多个处理器或资源上,以提高可用性和容错性。

7.目标地址散列调度

根据客户端IP地址或请求的目标地址,将任务分配给特定的处理器或资源,以实现精细的负载均衡。

8.源地址散列调度

根据客户端IP地址或请求的源地址,将任务分配给特定的处理器或资源,以实现精细的负载均衡。

9.最短的期望延迟

是一种基于网络拓扑结构的调度算法。它通过计算每个服务器到客户端的期望延迟,并将请求分配给具有最短期望延迟的服务器来实现负载均衡。

10.最少队列调度

最少队列调度算法根据服务器的队列长度来进行任务分配。它将任务分配给当前队列长度最短的服务器,以实现负载均衡。这个算法的思想是假设队列长度越短,服务器的处理能力越强,因此将任务分配给队列长度最短的服务器可以更好地利用服务器资源。

十种调度算法的优缺点

下面是一个表格,用于表示LVS中常见的调度算法及其优缺点:

                  调度算法                             优点                            缺点
轮询调度 (Round Robin)- 简单、公平<br>- 易于实现- 不能根据服务器负载动态调整<br>- 可能导致某些服务器负载过高,而其他服务器负载较低
加权轮询调度 (Weighted Round Robin)- 可以为不同服务器设置不同权重,实现更精细的负载均衡<br>- 相对于轮询调度,更适合处理性能差异较大的服务器- 仍然无法根据服务器负载动态调整
最小连接调度 (Least Connection)- 根据服务器当前连接数分配请求,实现负载均衡<br>- 能够自动适应服务器的负载情况- 需要实时监测服务器连接数,增加了一定的开销<br>- 可能会因为服务器处理速度不同而导致负载不均衡
加权最小连接调度 (Weighted Least Connection)- 可以为不同服务器设置不同权重,实现更精细的负载均衡<br>- 能够自动适应服务器的负载情况- 需要实时监测服务器连接数,增加了一定的开销<br>- 仍然可能因为服务器处理速度不同而导致负载不均衡
基于局部的最少连接调度 (Locality-Based Least Connection)- 考虑到客户端和服务器之间的网络距离,减少网络延迟和丢包率<br>- 能够自动适应服务器的负载情况- 需要使用专门的网络测量工具和算法来计算网络距离,增加了一定的开销<br>- 仍然可能因为服务器处理速度不同而导致负载不均衡
带复制的基于局部性的最少连接调度 (Locality-Based Least Connection with Replication)- 考虑到客户端和服务器之间的网络距离,减少网络延迟和丢包率<br>- 能够自动适应服务器的负载情况<br>- 通过复制服务器,提高了可用性和容错性- 需要使用专门的网络测量工具和算法来计算网络距离,增加了一定的开销<br>- 需要维护复制服务器的同步和一致性
目标地址散列调度 (Destination IP Hash)- 根据请求的目标地址进行散列,将请求分配给对应的服务器,实现负载均衡<br>- 可以保证相同目标地址的请求始终分配到同一台服务器- 如果目标地址变化频繁,可能导致负载不均衡
源地址散列调度 (Source IP Hash)- 根据请求的源地址进行散列,将请求分配给对应的服务器,实现负载均衡<br>- 可以保证相同源地址的请求始终分配到同一台服务器- 如果源地址变化频繁,可能导致负载不均衡
最短的期望延迟调度 (Shortest Expected Delay Scheduling)- 考虑服务器之间的网络距离,减少网络延迟和丢包率<br>- 提高用户体验- 需要使用专门的网络测量工具和算法来计算期望延迟,增加了一定的开销
最少队列调度 (Least Queue Length Scheduling)- 将任务分配给队列长度最短的服务器,实现负载均衡<br>- 简单、易于实现- 不能考虑服务器的实际处理能力<br>- 可能存在某些服务器的负载过高问题

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

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

相关文章

利用MATLAB创建栅格地图(代码可复制)

先做一个声明&#xff1a;文章是由我的个人公众号中的推送直接复制粘贴而来&#xff0c;因此对智能优化算法感兴趣的朋友&#xff0c;可关注我的个人公众号&#xff1a;启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法&#xff0c;经典的&#xff0c;或者是近几年…

解决msvcp120.dll丢失的问题的5个方法,修复系统dll问题

在使用计算机的过程中&#xff0c;我们经常会遇到各种各样的动态链接库&#xff08;DLL&#xff09;文件。其中之一就是“msvcp120.dll丢失”。这个错误通常会导致某些应用程序无法正常运行。为了解决这个问题&#xff0c;我们需要找到合适的方法来修复丢失的msvcp120.dll文件。…

SpringSecurity分布式安全框架

Spring Security是一个基于Spring框架的安全框架&#xff0c;它提供了全面的安全解决方案&#xff0c;包括用户认证和用户授权等Web应用安全性问题。Spring Security可以轻松扩展以满足自定义需求&#xff0c;它的真正强大之处在于它可以轻松扩展以满足自定义要求。 对于分布式…

JavaWeb——IDEA操作:Project最终新建module

在project中创建新的module&#xff1a; 创建一个新的module很容易&#xff0c;但是它可能连接不上Tomcat&#xff0c;因此需要修改一些配置&#xff1a; 将以下地址修改为新module的地址

PROFINET通信介绍

S7-1200和汇川变频器的PROFINET通信应用&#xff0c;请参考下面文章链接&#xff1a; PN通信组态(汇川变频器和S7-1200PN通信)-CSDN博客文章浏览阅读1.2k次。ABB变频器的PN通信相关设置&#xff0c;请参看下面的文章链接博途PLC和ABB变频器PN通讯详解_abb 变频器 pn通信_RXXW_…

【JavaEE初阶】 线程安全的集合类

文章目录 &#x1f340;前言&#x1f332;多线程环境使用 ArrayList&#x1f6a9;自己使用同步机制 (synchronized 或者 ReentrantLock)&#x1f6a9;Collections.synchronizedList(new ArrayList);&#x1f6a9;使用 CopyOnWriteArrayList &#x1f38d;多线程环境使用队列&am…

echarts-进度条

echarts-进度条 option {title: {text:"xxxx统计",left: 1%,top: 0%,textStyle: {color: "#2E3033",fontSize:18,},},tooltip: {axisPointer: {type: "shadow",},},grid: {top: 9%,left: "12%",right:"22%",bottom:"0…

react笔记基础部分(组件生命周期路由)

注意点&#xff1a; class是一个关键字&#xff0c; 类。 所以react 写class, 用classname &#xff0c;会自动编译替换class 点击方法&#xff1a; <button onClick {this.sendData}>给父元素传值</button>常用的插件&#xff1a; 需要引入才能使用的&#xf…

如何使用vim粘贴鼠标复制的内容

文章目录 一、使用步骤1.找到要编辑的配置文件2.找到目标文件3.再回到vim编辑器 一、使用步骤 1.找到要编辑的配置文件 用sudo vim /etc/apt/sources.list编辑软件源配置文件 sudo vim /etc/apt/sources.listvim 在默认的情况下当鼠标选中的时候进入的 Visual 模式&#xff…

GitLab升级16.5.0后访问提示502

系统是兼容CentOS8的TencentOS3.1 GitLab原来的版本是16.4.1 使用yum升级时发现GitLab有新版本,决定升级。 升级过程无异常,出现升级成功的提示。 可是意外的时,访问站点时提示502. GitLab比较吃资源,启动的服务较多。之前也有等会就正常的情况。 这次没那么幸运,一…

Go语言入门心法(十四): Go操作Redis实战

Go语言入门心法(一): 基础语法 Go语言入门心法(二): 结构体 Go语言入门心法(三): 接口 Go语言入门心法(四): 异常体系 Go语言入门心法(五): 函数 Go语言入门心法(六): HTTP面向客户端|服务端编程 Go语言入门心法(七): 并发与通道 Go语言入门心法(八): mysql驱动安装报错o…

【ARM Cortex-M 系列 4 番外篇 -- 常用 benchmark 介绍】

文章目录 1.1 CPU 性能测试 MIPS 计算1.1.1 Cortex-M7 CPI 1.2 benchmark 小节1.3.1 Geekbenck 介绍 1.3 编译参数配置 1.1 CPU 性能测试 MIPS 计算 每秒百万指令数 (MIPS)&#xff1a;在数据压缩测试中&#xff0c;MIPS 每秒测量一次 CPU 执行的低级指令的数量。越高越好&…

D71X-16Q手柄蝶阀型号解析

D71X-16Q型号字母含义解析 D71X-16Q是德特森阀门常用的手柄蝶阀型号字母分别代表的意思是: D——代表阀门类型《蝶阀》 7——代表连接方式《对夹》 1——代表结构形式《中线》 X——代表阀座材质《橡胶》 -代表分隔键 16——代表公称压力《1.6MPA》 Q——代表阀体材料《…

美创科技列为IDC中国数据安全市场代表厂商

近日&#xff0c;国际权威IT咨询机构IDC发布《中国数据安全市场发展趋势&#xff0c;2023》报告&#xff0c;报告针对中国数据安全市场的发展现状进行调研&#xff0c;明确了最终用户数据安全建设的痛点、难点&#xff0c;阐述了市场中各技术服务提供商的服务方案和优势。 美创…

如何恢复u盘删除文件?2023最新分享四种方法恢复文件

U盘上删除的文件怎么恢复&#xff1f;使用U盘存储文件是非常方便的&#xff0c;例如&#xff1a;在办公的时候&#xff0c;会使用U盘来存储网络上查找到的资料、产品说明等。在学习的时候&#xff0c;会使用U盘来存储教育机构分享的教学视频、重点知识等。而随着U盘存储文件的概…

css步骤条

html 代码以及样式 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>css步骤条</title><style>.steps {display: flex;justify-content: space-between;padding: 0;margin: 20px 10px;lis…

数据结构笔记——树和图(王道408)(持续更新)

文章目录 传送门前言树&#xff08;重点&#xff09;树的数据结构定义性质 二叉树的数据结构定义性质储存结构 二叉树算法先中后序遍历层次展开法递归模拟法 层次遍历遍历序列逆向构造二叉树 线索二叉树&#xff08;难点&#xff09;定义线索化的本质 二叉树线索化线索二叉树中…

Elasticsearch分词器-中文分词器ik

文章目录 使用standard analysis对英文进行分词使用standard analysis对中文进行分词安装插件对中文进行友好分词-ik中文分词器下载安装和配置IK分词器使用ik_smart分词器使用ik_max_word分词器 借助Nginx实现ik分词器自定义分词网络新词 ES官方文档Text Analysis 使用standard…

react-typescript-demo

1.使用 Context 来存储数据

elasticSearch put全局更新和单个字段更新语法

1、如下&#xff1a;更新改类型未doc(文档)的全局字段数据 注意&#xff1a;如果你使用的是上面的语句&#xff0c;但是只写了id和title并赋值&#xff0c;图片上其他字段没有填写&#xff0c;执行命令后&#xff0c;则会把原文档中的其他字段都给删除了&#xff0c;你会发现查…