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

HAProxy 学习总结

工具介绍

HAProxy(High Availability Proxy)是一个高性能、高可用的代理与负载均衡软件。它本质上就是一个高性能的“流量调度中心”,通过代理技术接收客户端请求,再利用负载均衡算法把流量分配到多台后端服务器,从而实现高并发、高可用与高扩展性。

注:Nginx 虽然也提供四/七层的负载均衡能力,但在性能和灵活度上,HAProxy 都比 Nginx 更强。

2、配置结构

HAProxy 默认的配置文件是/etc/haproxy/haproxy.cfg,它的语法结构如下:

global # 针对 HAProxy 程序的配置 defaults # 默认配置(frontend/backend/listen 的公共配置区域) frontend http-in # 前端入口(用于接收客户端请求) backend servers-out # 后端服务器池(用于处理客户端请求) listen http-in # frontend + backend 的合体写法

注:(1)frontend 与 backend 通常都是配合出现的,不像 listen 是可以单独存在的。(2)可以放在 defaults 处的指令,也可以放在 frontend/backend/listen 处,一条指令可以在这四个地方重复出现,但在优先级上default < frontend < backend

3、调度算法

HAProxy 支持的调度算法非常丰富,完全可以满足各种场景中的需求,如下:

  • roundrobin(轮询):按顺序一个个分配,保证任务能被均匀分配。同样也可以结合 weight 参数进行权重分配。【适合 HTTP 请求均匀场景】
  • static-rr(静态轮询):和 roundrobin 类似,但不会动态调整权重影响分配。【注:后端服务器增加/减少不会立刻重新平衡,而 roundrobin 则对此比较敏感。】
  • leastconn(最少连接):谁连接少,就给谁,优先选择“最闲”的服务器。【适合长连接的 TCP 请求,如 SSH、MYSQL 等】
  • first(顺序优先):从上往下用,满了才换下一个,不太关心均衡。
  • sticky:永远优先第一台,直到它挂掉再切换下一台。【适合日志系统的场景】
  • hash(通用哈希):对某个“字段”做 hash,让同 hash 的请求尽量使用同一台服务器去处理,不频繁变动。【适合缓存命中优化】
  • source(源 IP 哈希):针对源 IP 的 hash,让来自同一个客户端 IP 的请求都由同一台服务器处理。
  • uri(按 URL hash):针对 URI 的 hash,让同一个 URL 的请求都由同一台服务器处理。【适合缓存命中优化】
  • url_param(按 URL 参数):针对URI+参数的 hash,让同一个链接的请求都由同一台服务器处理。【适合用户登录优化】
  • hdr(name):针对 HTTP 请求头中的某个参数进行的 hash。【适合用户登录优化】
  • random:随机选服务器。
  • rdp-cookie:基于远程桌面 cookie。【适合 Windows RDP 场景】
  • log-hash:专门用于日志 backend。【适合日志系统的场景】

4、应用场景

以下关于 HAProxy 各种使用场景的配置示例中, global 和 defaults 的配置并非重点,我们只需把关注点集中在 frontend 和 backend 即可。

4.1、七层代理 - HTTP

global log 127.0.0.1 local2 ...... defaults mode http log global ...... frontend webser bind *:80 default_backend app backend app balance roundrobin server app1 192.168.1.1:80 check server app2 192.168.1.2:80 check

4.2、四层代理 - TCP/UDP

global log 127.0.0.1 local2 ...... defaults mode tcp log global ...... frontend mysql bind *:3306 default_backend mysqlservers backend mysqlservers balance leastconn server dbsrv1 192.168.1.1:3306 check port 3306 intval 2 rise 1 fall 2 maxconn 300 server dbsrv2 192.168.1.2:3306 check port 3306 intval 2 rise 1 fall 2 maxconn 300

注意:TCP 模式下的roundrobin,并不是“每个数据包轮询一次”,而是“每个连接轮询一次”。

4.3、转发规则 - ACL

global log 127.0.0.1 local2 ...... defaults mode http log global ...... frontend webservs bind *:80 acl url_static path_beg -i /static /images /javascript /stylesheets acl url_static path_end -i .jpg .gif .png .css .js .html acl url_php path_end -i .php acl host_static hdr_beg(host) -i img. imgs. video. videos. ftp. image. download. use_backend static if url_static or host_static use_backend dynamic if url_php default_backend dynamic backend static balance roundrobin server node1 192.168.1.1:80 check maxconn 3000 backend dynamic balance roundrobin server node2 192.168.1.2:80 check maxconn 1000

4.4、状态管理 - Stats

global log 127.0.0.1 local2 ...... defaults mode http log global ...... listen statistics bind *:8080 # 自定义监听端口 stats enable # 启用基于程序编译时默认设置的统计报告 stats auth admin:admin # 统计页面用户名和密码设置 stats uri /admin?stats # 自定义统计页面的 URL,默认为/haproxy?stats stats hide-version # 隐藏统计页面上 HAProxy 的版本信息 stats refresh 30s # 统计页面自动刷新时间 stats admin if TRUE # 如果认证通过就做管理功能,可以管理后端的服务器 stats realm Hapadmin # 统计页面密码框上提示文本,默认为 Haproxy\Statistics

Stats 管理页支持的动作:

  • Set state to READY:正常模式。若后端服务正常,则此操作后,后端
http://www.jsqmd.com/news/1067230/

相关文章:

  • CS16S:01
  • 低成本创业辅助软件客观梳理
  • 无损FLAC音乐怎么变成MP3?一篇讲清楚flac转mp3操作步骤
  • 安全审计系统有哪些?2026年5大安全审计软件功能详解,最新分享
  • 独立研究者开发的土耳其语“形态大脑“
  • Childhood,23款童年卡牌游戏复刻
  • RAG 检索质量从 60% 到 90%:混合检索 + 重排序的完整实践
  • 基于知识图谱的百科知识问答系统:Django+Neo4j 智能问答平台项目实战
  • 从Copilot到Agent——我的开发工作流正在被颠覆的技术文章大纲
  • 隐性隐私泄露
  • 全网最全!2026AI论文平台榜单(覆盖 99% 毕业论文需求)
  • 12.1.1 质量属性概念 (续) - 运行期质量属性
  • 92-Java 多线程编程
  • Milvus架构与核心原理
  • LangChain 实战:Structured Chat ReAct 智能体原理与实现(对比 ZeroShot ReAct)
  • 《B4501 [GESP202603 四级] 山之谷》
  • 轻集料混凝土哪家强?LC5.0型厂家这样选才靠谱
  • 基于 Harmony 7.0 应用的手写签名应用首页实现
  • API中转站搭建完整教程:从零部署专属New API服务为什么自建API中转站
  • 电商支付资损风险防控测试实战:从优惠叠加漏洞到大促零故障的完整路径
  • 车载开发|致远ZCAN设备Python ctypes完整封装库解析
  • .NET 高级开发 | 设计、实现一个事件总线框架
  • 大数据需要掌握哪些主流大数据工具框架
  • 两个关于数据库的简单项目系统
  • [MSCKF-VIO]零空间投影:消除特征位置不确定性
  • 【AI Daily】AI日报 2026-06-22
  • GLM-5.2实测:国产模型追上GPT梯队,但千万别直接切主力
  • 职场必备Excel神器 自动生成各类表格样例数据
  • React 可拖拽列宽 + 点击行选中 ProTable 封装笔记
  • 和AI一起搞事情#3:Claude Teammate 游戏开发翻车实录