haproxy轮询分发核心是配置roundrobin或static-rr算法并定义至少两台健康后端服务器;roundrobin支持运行时权重调整但单机连接数限4128,static-rr权重需重启生效且无连接数限制。

HAProxy 实现后端服务轮询分发,核心在于配置正确的负载均衡算法和后端服务器列表。只要 backend 段中启用 roundrobin 或 static-rr,并定义至少两台健康后端服务器,请求就会按顺序轮流分发。
确认轮询算法类型
HAProxy 提供两种主流轮询方式,区别在于权重是否可动态调整:
-
roundrobin:动态轮询,支持运行时修改服务器权重(如用
set weight命令),适合需要灵活调优的场景;每台服务器最多接受 4128 个并发连接 - static-rr:静态轮询,权重在启动时固定,修改后必须重启 HAProxy 才生效;无单机连接数限制,适合稳定、高吞吐环境
二者均按 server 列表顺序循环分配新连接,不依赖响应时间或当前负载。
配置 backend 使用轮询
在 /etc/haproxy/haproxy.cfg 的 backend 段中,明确指定算法并列出后端节点:
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
backend web_servers
balance roundrobin
server web1 192.168.1.10:80 check
server web2 192.168.1.11:80 check
server web3 192.168.1.12:80 check
说明:
-
balance roundrobin必须写在server行之前 -
check启用默认健康检查(TCP 连通性),故障节点自动摘除 - 如需加权,可在 server 行末尾添加
weight 3(例如server web1 ... weight 3),表示该节点承担 3 倍于 weight=1 节点的流量
验证轮询是否生效
部署后可通过以下方式快速验证:
- 用 curl 多次访问 HAProxy 地址(如
curl http://haproxy-ip/),观察返回内容是否在不同后端页面间交替出现(建议各后端 index.html 写明服务器标识) - 查看 HAProxy 统计页(启用
stats后访问/haproxy?stats),观察各 server 的“Sessions”或“Requests”计数是否接近均等增长 - 检查日志:
tail -f /var/log/haproxy.log,确认请求被分发到不同 backend IP
注意事项与常见问题
轮询看似简单,但实际使用中容易忽略几个关键点:
- 所有 backend server 必须监听相同端口且服务正常;若某台宕机又未配置
check,它仍会参与轮询,导致部分请求失败 - HTTP 层轮询(七层)默认不保持会话,如需登录态一致,应配合
cookie或source算法,而非单纯依赖 roundrobin - 若后端服务器性能差异大,仅靠顺序轮询可能造成负载不均,此时应结合
weight参数人工干预,或改用leastconn等动态算法










