news 2026/6/23 11:47:06

HAProxy 学习总结

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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:正常模式。若后端服务正常,则此操作后,后端
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 11:33:40

电脑屏幕如何实时监控?分享五个监控屏幕的方法,轻松搞定

你有没有遇到过这种情况——想看看员工上班到底有没有摸鱼&#xff0c;或者远程办公时想确认对方是不是真的在干活&#xff1f;电脑屏幕监控其实没那么复杂&#xff0c;今天就给大家分享五个实用方法&#xff0c;从专业软件到系统自带工具都有&#xff0c;总有一款适合你。第一…

作者头像 李华
网站建设 2026/6/23 11:26:52

从“不可能三角”到模块化突围:2026年区块链开发的技术范式转型

燃链科技&#xff1a;从“不可能三角”到模块化突围&#xff1a;2026年区块链开发的技术范式转型 2026年的区块链开发&#xff0c;早已不再是简单地“搭一条链”或“写几个智能合约”。随着Web3应用走向大规模落地&#xff0c;开发者正面临一个全新的技术拐点&#xff1a;如何在…

作者头像 李华
网站建设 2026/6/23 11:22:21

AI应用安全:JNDI注入与无文件内存马攻击的深度解析与防御

1. 项目概述&#xff1a;当AI应用遇上无文件攻击最近在分析一些新型攻击案例时&#xff0c;我发现一个趋势越来越明显&#xff1a;攻击者正在将传统的渗透技术&#xff0c;与新兴的AI应用场景进行结合&#xff0c;创造出更具隐蔽性和持久性的攻击链。这次要拆解的“利用JNDI注入…

作者头像 李华
网站建设 2026/6/23 11:15:33

Trae与Skill:Go原生智能任务执行体与可部署技能单元解析

1. Trae 是什么&#xff1f;先别急着装&#xff0c;搞清它和 Skill 的真实关系 Trae 这个名字最近在 Go 开发者圈里突然密集出现&#xff0c;但翻遍 GitHub、官方文档甚至中文技术社区&#xff0c;你很难找到一份清晰、不带营销话术的定义。我花了三天时间&#xff0c;把所有能…

作者头像 李华
网站建设 2026/6/23 11:12:03

卫星通信导论学习

一、卫星通信系统概论卫星通信——利用卫星作为中继站转发或反射无线电波&#xff0c;实现两个或多个地球站之间&#xff08;或地球站与航天器之间&#xff09;通信的方式。1.1 卫星轨道低轨轨道——简称LEO轨道&#xff0c;轨道高度500~1500km。中轨轨道——简称MEO轨道&#…

作者头像 李华