代理服务器-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 算法。

相关推荐
21号 125 分钟前
9.进程间通信
linux·运维·服务器
木子.李3474 小时前
排序算法总结(C++)
c++·算法·排序算法
Demisse5 小时前
[华为eNSP] OSPF综合实验
网络·华为
闪电麦坤956 小时前
数据结构:递归的种类(Types of Recursion)
数据结构·算法
工控小楠6 小时前
DeviceNet转Modbus TCP网关的远程遥控接收端连接研究
网络·网络协议·devicenet·profient
搬码临时工6 小时前
电脑同时连接内网和外网的方法,附外网连接局域网的操作设置
运维·服务器·网络
藥瓿亭6 小时前
K8S认证|CKS题库+答案| 3. 默认网络策略
运维·ubuntu·docker·云原生·容器·kubernetes·cks
Gaoithe6 小时前
ubuntu 端口复用
linux·运维·ubuntu
Gyoku Mint6 小时前
机器学习×第二卷:概念下篇——她不再只是模仿,而是开始决定怎么靠近你
人工智能·python·算法·机器学习·pandas·ai编程·matplotlib
纪元A梦6 小时前
分布式拜占庭容错算法——PBFT算法深度解析
java·分布式·算法