代理服务器-LVS的3种模式与调度算法

作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

我们上一章介绍了Web服务器,其中以Nginx为主,本章我们来讲解几个代理软件:Squid,Haproxy,LVS,FRP(内网穿透)。

上一小节我们介绍了LVS的概念和部署,本小节来讲解LVS的工作模式和调度算法。本小节的内容都是理论知识,在很多地方其实都能搜索到大致相似的内容。

一、LVS 的 3 种工作模式

1. NAT 模式(Network Address Translation)

客户端请求:客户端发送请求到 VIP(Virtual IP),Director 接收请求后,修改目标 IP 为 Real Server 的 IP(DNAT),转发请求。

服务器响应:Real Server 处理请求后,将响应返回给 Director,Director 修改源 IP 为 VIP(SNAT),返回给客户端。

Real Server 的网关必须指向 Director 的 DIP(Director IP)。

Director 需开启 IP 转发(net.ipv4.ip_forward=1)。

2. DR 模式(Direct Routing)

客户端请求:Director 接收请求后,仅修改目标 MAC 地址为 Real Server 的 MAC,直接转发数据包。

服务器响应:Real Server 处理请求后,直接通过自己的网络接口(不经过 Director)返回响应给客户端。

Director 和 Real Server 必须在同一物理网络(同一广播域)。

Real Server 需配置 VIP 在 lo 接口,并抑制 ARP 响应。

3. TUN 模式(IP Tunneling)

客户端请求:Director 将请求封装在 IP 隧道(如 IPIP、GRE)中,发送给 Real Server。

服务器响应:Real Server 解封装请求后,直接响应客户端(不经过 Director)。

Real Server 需支持 IP 隧道协议。

Real Server 需配置 VIP 在隧道接口(如 tun0)。

二、LVS 的 10 种调度算法

下面的调度算法实际上和我们前面讲的Nginx服务器差不多,只是他们工作的网络层不一样。

1. 轮询调度(Round Robin, rr)

描述:依次将请求分配给每个后端服务器,循环进行。

适用场景:当所有服务器的处理能力大致相同时,适合使用此算法。

特点:简单、公平,但不考虑服务器当前负载情况。

2. 加权轮询调度(Weighted Round Robin, wrr)

描述:基于服务器权重进行轮询调度。权重越大,分配到的请求越多。

适用场景:服务器性能差异较大时,可以通过设置不同权重来优化资源利用。

特点:在轮询的基础上增加了对服务器处理能力的考量。

3. 最少连接调度(Least Connections, lc)

描述:将请求分配给当前连接数最少的服务器。

适用场景:适用于请求处理时间较长或服务器负载不稳定的情况。

特点:有助于平衡服务器之间的负载,特别是当请求处理时间变化较大时。

4. 加权最少连接调度(Weighted Least Connections, wlc)

描述:结合了最少连接和服务器权重两个因素进行调度。计算公式为:(current connections / weight),值最小的服务器被选中。

适用场景:当服务器性能差异较大且需要更精确地控制负载分布时。

特点:相比 lc 更加灵活,能更好地适应不同性能的服务器集群。

5. 基于局部性的最少连接调度(Locality-Based Least Connections, lblc)

描述:针对源地址进行调度,尝试将来自同一客户端的请求分配给同一个服务器,并优先选择连接数较少的服务器。

适用场景:适用于会话保持需求较高的应用,如 Web 应用程序。

特点:提高缓存命中率,减少跨服务器的数据传输。

6. 基于局部性的最少连接复用调度(Locality-Based Least Connections with Replication, lblcr)

描述:类似于 lblc,但在找不到合适的本地服务器时,会选择一个远程服务器并将其加入到本地服务器列表中。

适用场景:适合于高可用性和高扩展性的应用场景。

特点:增强了 lblc 的灵活性,能够更好地处理动态变化的流量模式。

7. 目标地址哈希调度(Destination Hashing, dh)

描述:根据目标地址(通常是客户端的 IP 地址)进行哈希运算,结果决定分配给哪个服务器。

适用场景:适用于需要会话保持的应用,确保相同客户端的请求总是被发送到同一台服务器。

特点:提供了较好的会话一致性,但可能导致负载不平衡。

8. 源地址哈希调度(Source Hashing, sh)

描述:根据源地址(通常是客户端的 IP 地址)进行哈希运算,结果决定分配给哪个服务器。

适用场景:与 dh 类似,适用于需要会话保持的应用。

特点:确保相同客户端的请求始终被发送到同一台服务器,但同样可能导致负载不平衡。

9. 最短预期延迟调度(Shortest Expected Delay, sed)

描述:选择 (当前连接数 + 1) / 权重 最小的服务器,目的是最小化新连接的预期延迟。

适用场景:适用于希望快速响应新请求的场景。

特点:相比 wlc 更注重新连接的延迟,而非平均负载。

10. 从不排队调度(Never Queue, nq)

描述:如果有一台服务器空闲,则直接选择该服务器;如果没有空闲服务器,则采用加权最少连接调度。

适用场景:适用于希望尽可能避免队列等待的情况。

特点:保证至少一台服务器上的即时响应,其他情况下则依赖于 wlc 算法。

相关推荐
Y1nhl11 分钟前
力扣_链表_python版本
开发语言·python·算法·leetcode·链表·职场和发展
JIAKSK25 分钟前
VitePress 接入百度统计:全面教程与优化指南
运维·数据可视化
qq_4017004127 分钟前
C语言中位运算以及获取低8位和高8位、高低位合并
c语言·开发语言·算法
en-route29 分钟前
HTTP cookie
网络·网络协议·http
CoovallyAIHub30 分钟前
YOLO模型优化全攻略:从“准”到“快”,全靠这些招!
深度学习·算法·计算机视觉
yqcoder33 分钟前
2. 你可以说一下 http 版本的发展过程吗
网络·网络协议·http
吓死羊了34 分钟前
设置nginx和tomcat开机自动启动
后端·node.js·tomcat
闻缺陷则喜何志丹35 分钟前
【BFS】 P10864 [HBCPC2024] Genshin Impact Startup Forbidden II|普及+
c++·算法·宽度优先·洛谷
网硕互联的小客服1 小时前
未来趋势:AI与量子计算对服务器安全的影响
运维·服务器·网络·网络安全·量子计算
MicroTech20251 小时前
微算法科技(NASDAQ: MLGO)探索Grover量子搜索算法,利用量子叠加和干涉原理,实现在无序数据库中快速定位目标信息的效果。
数据库·科技·算法