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 上限",优先占满第一个服务器再用第二个