haproxy的算法——静态算法

1.简介

haproxy 的静态负载均衡算法,是指在分发请求时不依赖后端服务器的实时负载、连接数或响应时间,而是严格按照预先定义的固定规则进行调度的一类策略。这类算法的调度逻辑在配置后保持稳定,不会根据服务器状态动态调整,因此具有 predictable(可预测)和性能开销低的特点。

常见的静态算法包括:

  • static-rr(静态轮询):与 roundrobin 类似,但运行时无法修改权重,性能略高,适合权重固定的场景。
  • first(空闲优先):优先使用列表中靠前的服务器,仅当前一台满负荷时才启用下一台,完全按顺序调度,不考虑负载。

2.static-rr算法

static-rr 是静态轮询算法 ,根据配置的权重轮流分发请求,运行时不能动态修改权重,调度简单、性能较高,适用于后端服务器稳定不变的场景。

进入haproxy配置文件编写命令

设定算法种类(balance static-rr)以及权重大小(webserver1:weight 2;webserver2:weight 1)

保存退出,重启服务生效

测试:

检测是否支持热更新

3.first算法

  • 算法类型 :属于 HAProxy 的静态负载均衡算法,不根据后端服务器实时负载、响应时间动态调整。
  • 调度规则 :严格按照服务器在配置文件中的先后顺序分配请求,优先使用排在前面的服务器。
  • 分配方式 :前面的服务器连接数未达到上限时,所有新请求都发给它;只有当前一台满连接后,才会启用下一台服务器。
  • 特点:逻辑简单、性能开销小,但负载分配不均匀,容易出现前面服务器压力大、后面服务器空闲的情况。
  • 适用场景:适用于按顺序启用服务器、做备用机切换,或后端服务器性能、请求量稳定且无需均匀负载的环境。

进入haproxy配置文件编写命令,修改算法为first,保存退出,重启服务生效

在新的shell上执行持续访问。first 算法与权重无关,只按服务器在配置文件中的先后顺序选择,前面的优先被访问。

继续新建一个shell,继续访问。由于该主机默认最大连接数为3000,所以我们为了体现效果,提前在haproxy.cfg文件里的server webserver1 192.168.83.10:80 check inter 3s fall 3 rise 5 weight 2中添加 maxconn 1 限制一下(当然,这个在现实是不合理的),然后保存退出,重启服务生效,再去新的shell里测试连接。之前的那个shell要提前访问并且一直保持运行,然后这个新的shell再访问

之前的shell:

新的shell:

发现出现了webserver2的名字和ip,说明第一个 shell 的长连接持续占用 webserver1 的maxconn=1,导致第二个 shell 只能走 webserver2,这就体现了first 算法只认 "顺序 + maxconn 上限",优先占满第一个服务器再用第二个

相关推荐
小O的算法实验室13 小时前
2026年EAAI SCI1区TOP,基于LLM驱动的多群粒子群算法动态通信策略生成方法,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
虾..13 小时前
Linux 基于TCP实现服务端客户端通信(多进程/多线程版)
java·服务器·tcp/ip
小尔¥13 小时前
LNMP环境部署
运维·数据库·nginx·php
午彦琳13 小时前
leetcode hot 100_49,128
算法·leetcode·职场和发展
..过云雨13 小时前
【负载均衡oj项目】01. 项目概述及准备工作
linux·c++·html·json·负载均衡
郝学胜-神的一滴13 小时前
深度解析:Python元类手撸ORM框架,解锁底层编程魔法
数据结构·数据库·python·算法·职场和发展
报错小能手13 小时前
nginx集群聊天室(五)nginx配置tcp服务器负载均衡
服务器·tcp/ip·nginx
李恒-聆机智能专精数采13 小时前
从零开始了解数据采集技术篇(8)——为什么工业数据采集很难用“一站式平台”解决?从设备生态到系统架构的技术分析
运维·网络·数据库·数据分析·数据采集
报错小能手13 小时前
如何手撕集群聊天室项目?
linux·服务器
big_rabbit050213 小时前
[算法][力扣219]存在重复元素2
数据结构·算法·leetcode