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

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

    相关文章:

  • c++ set与multiset的介绍
  • 【计算机网络】非阻塞IO——poll实现多路转接
  • Go垃圾回收参数调优:实现低延迟服务的实战指南
  • usb工业广焦摄像头怎么调焦
  • keil编译工程,结合map文件和bin文件,实测C语言中不同类型的变量存储在不同的内存区域
  • 【Zephyr 系列 11】使用 NVS 实现 BLE 参数持久化:掉电不丢配置,开机自动加载
  • 从零开始基于Ubuntu18搭建Gazebo地图仿真环境
  • Ubuntu 系统.sh脚本一键部署内网Java服务(组件使用docker镜像,宕机自启动)
  • D3.js与vue3力导向图开发全流程
  • N8N概述
  • 【Linux】(1)—进程概念-⑤进程调度
  • 和芯 SL6341 (内置FLASH) 国产USB 3.0HUB芯片 替代 GL3510 VL817
  • Linux 中替换文件中的某个字符串
  • Kafka 快速上手:安装部署与 HelloWorld 实践(二)
  • Unity 中的颜色空间
  • 【公益护航青春路】 “成长的秘密花园”青春期身心成长讲座走进校园
  • JDBC(二) 综合案列、SQL注入问题、封装工具类、ORM
  • robot_lab——rsl_rl的train.py整体逻辑
  • 【UEFI系列】SEC阶段讲解
  • 嵌入式开发之STM32学习笔记day22
  • 做网站的为什么一直拖/seo有哪些经典的案例
  • 阿里云企业网站备案/bt磁力搜索神器
  • 网站内的新闻怎样做链接/百度一下你就知道官页
  • 网站收录低的原因/推广普通话的意义50字
  • 自己怎么建设网站/苏州搜索引擎优化
  • 视频网站做游戏分发/品牌推广方案怎么写