当前位置: 首页 > web >正文

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

    http://www.xdnf.cn/news/12448.html

    相关文章:

  • 7. 线性表的定义及特点
  • PyQt常用控件的使用:QFileDialog、QMessageBox、QTreeWidget、QRadioButton等
  • 护网行动面试试题(2)
  • go语言学习 第7章:数组
  • HarmonyOS运动语音开发:如何让运动开始时的语音播报更温暖
  • 【MySQL基础】数据库的备份与还原
  • 第三章支线一 ·原能之核:语法起源
  • Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
  • 【Python训练营打卡】day45 @浙大疏锦行
  • k8s下离线搭建elasticsearch
  • 力扣100-移动0
  • Jmeter如何进行多服务器远程测试?
  • Podman 和 Docker
  • 关于如何使用VScode编译下载keil工程的步骤演示
  • BugKu Web渗透之网站被hei(仅仅是ctf题目名称)
  • Three.js中AR实现详解并详细介绍基于图像标记模式AR生成的详细步骤
  • CSS中justify-content: space-between首尾贴边中间等距(两端元素紧贴左右边缘,中间元素等距均匀分布)
  • NLP学习路线图(二十七):Transformer编码器/解码器
  • 传输层:udp与tcp协议
  • 分布式微服务系统架构第144集:FastAPI全栈开发教育系统
  • 基于 Vue 和 Spring Boot 实现滑块验证码的机器验证
  • Linux编程:1、文件编程
  • AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月6日第100弹
  • pdf2zh 简明本地部署和api调用,以及离线部署总结
  • 行业案例 | ASOS 借助 Azure AI Foundry(国际版)为年轻时尚爱好者打造惊喜体验
  • 在Windows下利用LoongArch-toolchain交叉编译Qt
  • QuaggaJS用法详解
  • 分布式协同自动化办公系统-工作流引擎-流程设计
  • aardio 简单网页自动化
  • 命令行以TLS/SSL显式加密方式访问FTP服务器