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>- 可能存在某些服务器的负载过高问题 |
相关文章:
LVS负载均衡(LVS简介、三种工作模式、十种调度算法)
LVS简介 LVS(Linux Virtual Server)是一种基于Linux内核的高可用性负载均衡软件。它通过将客户端请求分发到多个后端真实服务器,提高系统性能和可靠性。LVS支持多种调度算法,如轮询、最少连接、源地址哈希等,用于决定…...
Vue响应式数据的实现原理(手写副作用函数的存储和执行过程)
1.命令式和声明式框架 命令式框架关注过程 声明式框架关注结果(底层对命令式的DOM获取和修改进行了封装) 2.vue2 Object.defineProperty()双向绑定的实现 <body><div id"app"><input type"text" /><h1>…...
内核进程的调度与进程切换
进程被创建到了链表中,如何再进行进一步的调用和调用? 进程调度 void schedule(void); 进程调度 switch_to(next); 进程切换函数 void schedule(void) {int i,next,c;struct task_struct ** p;/* check alarm, wake up any i…...
docker-rabbitmq 安装依赖
出现的问题如下: channel error; protocol method: #method(reply-code404, reply-textNOT_FOUND - no channel error; protocol method: #method<channel.close>(reply-code404, reply-textNOT_FOUND - no 查看rabbitmq 客户端是否存在如…...
(1)(1.9) HC-SR04声纳
文章目录 前言 1 连接到自动驾驶仪 2 参数说明 前言 HC-SR04 声纳是一种价格低廉但量程很短(最远只有 2m)的测距仪,主要设计用于室内,但也成功地在室外的 Copter 上使用过。极短的测距范围使其用途有限。 !Warning…...
06 MIT线性代数-列空间和零空间 Column space Nullspace
1. Vector space Vector space requirements vw and c v are in the space, all combs c v d w are in the space 但是“子空间”和“子集”的概念有区别,所有元素都在原空间之内就可称之为子集,但是要满足对线性运算封闭的子集才能成为子空间 中 2 …...
【每日一题Day360】LC1465切割后面积最大的蛋糕 | 贪心
切割后面积最大的蛋糕【LC1465】 矩形蛋糕的高度为 h 且宽度为 w,给你两个整数数组 horizontalCuts 和 verticalCuts,其中: horizontalCuts[i] 是从矩形蛋糕顶部到第 i 个水平切口的距离verticalCuts[j] 是从矩形蛋糕的左侧到第 j 个竖直切口…...
中国地名信息库
地名是社会基本公共信息,是历史文化的重要载体。 2014年至2018年,国家启动实施并完成了第二次全国地名普查工作,全国共计采集地名1320多万条,修测标绘地名图2.4万多幅,新设更新地名标志68万多块,普遍建立了…...
网络时代下的声音之路:如何在中央新闻媒体发布网评稿
在当今数字时代,信息传播已经变得更加便捷和广泛。各大中央新闻媒体平台为民众提供了一个发布观点、表达意见的平台。在这个背景下,撰写并发布网评稿成为了一种重要的社会参与方式。根据媒介易软文发稿平台的总结,下面是探讨如何在各大中央新…...
Selenium中WebDriver最新Chrome驱动安装教程
😏作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。 📡主页地址:【Austin_zhai】 🙆目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能,分享行业相关最新信息。…...
云原生Docker数据管理
目录 Docker的数据管理 数据卷 数据卷容器 容器互联 容器中管理数据主要有两种方式: 数据卷(Data Volumes)数据卷容器(Data Volume Dontainers) Docker的数据管理 数据卷 数据卷是一个供容器使用的特殊目录&a…...
endnote设置
问题1:参考文献的tab太长 首先要在endnote里面这样设置,file->output->edit "XXX" 保存之后,在word更新目录。 在word里面设置悬挂缩进 结果: Endnote参考编号与参考文献距离太远怎么调整 endnote 文献对齐方式…...
计算机网络整理-简称缩写【期末复习|考研复习】
文章目录 前言一、物理层1.1 FDM频分复用 Frequency-division multiplexing1.2 TDM时分复用 Time-division multiplexing1.3 WDM波分复用 Wavelength Division Multiplexing1.4 Hub 集线器1.5 FSK频移键控 Frequency-shift keying 二、数据链路层2.1 GBN回退N步协议 Go Back N …...
Flink Hive Catalog操作案例
在此对Flink读写Hive表操作进行逐步记录,需要指出的是,其中操作Hive分区表和非分区表的DDL有所不同,以下分别记录。 基础环境 Hive-3.1.3 Flink-1.17.1 基本操作与准备 1、上传依赖jar包到flink/lib目录下 cp flink-sql-connector-hive-…...
NSSCTF做题第9页(3)
[GKCTF 2020]CheckIN 代码审计 这段代码定义了一个名为ClassName的类,并在脚本的最后创建了一个ClassName类的实例。 在ClassName类的构造函数中,首先通过调用$this->x()方法获取了请求参数$_REQUEST中的值,并将其赋值给$this->code属性…...
从瀑布模式到水母模式:ChatGPT如何赋能软件研发全流程【文末送书五本】
从瀑布模式到水母模式:ChatGPT如何赋能软件研发全流程 前言内容简介购买链接作者简介专家推荐读者对象参与方式往期赠书回 🏘️🏘️个人简介:以山河作礼。 🎖️🎖️:Python领域新星创作者,CSDN实…...
设置使用LibreOffice作为默认程序打开word、excel等文档
以win7为例。打开控制面板,点击程序: 点击“设置默认程序”: 左侧选中LibreOffice,然后在右下方点击“选择此程序的默认值”: 然后根据自己的需要勾选就行了:...
创新领航 | 竹云参编《基于区块链的数据资产评估实施指南》正式发布!
10月25日,由深圳数宝数据服务股份有限公司和深圳职业技术大学提出,中国科学院深圳先进技术研究院、中国电子技术标准化研究院、中国(天津)自由贸易试验区政策与产业创新发展局、网络空间治理与数字经济法治(长三角&…...
【Docker】Linux网桥连接多个命名空间
veth实现了点对点的虚拟连接,可以通过veth连接两个namespace,如果我们需要将3个或者多个namespace接入同一个二层网络时,就不能只使用veth了。 在物理网络中,如果需要连接多个主机,我们会使用bridge(网桥&…...
ES6新特性:let关键字详解
文章目录 1 声明提升2 作用域3 重复声明 在JavaScript中,let 和 var 都是声明变量的关键字,但在用法和作用域方面有一些区别。 let 是ES6引入的新的声明变量的关键字,它与 var 相比,更加严格,语法更加规范,…...
Source Han Serif CN:开源中文字体的技术革命与实践指南
Source Han Serif CN:开源中文字体的技术革命与实践指南 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 价值定位:重新定义专业中文字体标准 在数字设计领域&a…...
零基础友好:借助快马生成的指导项目轻松完成anaconda安装与初体验
最近在学Python数据分析,被各种环境配置搞得头大。朋友推荐用Anaconda管理环境,但光是安装就卡了半天。后来在InsCode(快马)平台发现了个神器项目,像有个老师手把手教操作,分享下我的学习过程: 为什么选择Anaconda 刚开…...
忍者像素绘卷入门必看:Z-Image-Turbo与Stable Diffusion 16-Bit插件对比
忍者像素绘卷入门必看:Z-Image-Turbo与Stable Diffusion 16-Bit插件对比 1. 像素艺术创作新选择 在数字艺术创作领域,像素风格始终占据着独特地位。对于想要创作16-Bit复古游戏风格作品的艺术家来说,选择合适的工具至关重要。本文将对比分析…...
如何让老旧Mac重获新生?OpenCore Legacy Patcher终极改造指南
如何让老旧Mac重获新生?OpenCore Legacy Patcher终极改造指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher OpenCore Legacy Patcher是一款开源…...
5步打造清爽右键菜单:ContextMenuManager开源工具完全指南
5步打造清爽右键菜单:ContextMenuManager开源工具完全指南 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 当你在Windows系统中右键点击文件时&#…...
MySQL 中 count(*)、count(1) 和 count(字段名) 有什么区别?
一、快速结论(先看结论再看分析)方式作用效率一句话总结count(*)统计所有行数⭐⭐⭐⭐ 最高我是专业的!我为统计而生count(1)统计所有行数⭐⭐⭐⭐ 同样高效我是 count(*) 的马甲兄弟count(列名)统计该列非 NULL 的行数⭐⭐⭐ 较慢我挑剔&…...
一个关键词的SEO优化过程中需要注意什么
一个关键词的SEO优化过程中需要注意什么 在数字营销的世界里,搜索引擎优化(SEO)是一个核心的组成部分。其中,关键词优化是SEO策略的关键环节。对于一个关键词的SEO优化过程中,有许多细节需要注意,以确保最…...
假芯片识别与防范:工程师实战指南
1. 假芯片泛滥:半导体行业的隐秘危机最近在调试一块电路板时,我发现一个奇怪的现象:明明使用的是同型号的MCU,但部分板子的功耗异常偏高。经过一周的排查,最终发现问题出在芯片上——我们采购到了一批"套牌"…...
TSMaster安全算法实战:如何用DLL快速实现SeedKey解锁(附常见错误排查)
TSMaster安全算法实战:如何用DLL快速实现Seed&Key解锁(附常见错误排查) 在汽车电子诊断领域,安全访问机制(Seed&Key)如同车辆的电子钥匙,是保护ECU数据安全的重要屏障。作为深耕诊断协议…...
终极gsudo扩展功能开发指南:5个自定义插件与模块开发技巧
终极gsudo扩展功能开发指南:5个自定义插件与模块开发技巧 【免费下载链接】gsudo Sudo for Windows 项目地址: https://gitcode.com/gh_mirrors/gs/gsudo gsudo是Windows系统上的命令行权限提升工具,为开发者提供了类似Unix系统中sudo命令的功能。…...
