云原生高级-Haproxy
一、HAProxy 核心理论
1 HAProxy 简介
HAProxy(全称 High Availability Proxy,高可用代理)是一款开源、高性能的负载均衡与反向代理软件,由法国开发者 Willy Tarreau 于 2000 年使用 C 语言开发,专为高可用、高并发的网络服务架构设计。它是目前业界最主流的开源负载均衡器之一,支撑大量高流量网站与服务。
社区版官网:
2 核心功能
| 功能 | 说明 |
|---|---|
| 负载均衡 | 将大量并发请求智能分发到多台后端服务器,提升吞吐量与资源利用率 |
| 反向代理 | 作为客户端与服务端中间层,隐藏后端真实 IP,提供统一入口 |
| 高可用 | 通过健康检查实时监控后端状态,自动隔离故障节点,保证服务可用 |
| 流量控制 | 支持请求限速、连接数限制,防止后端服务过载 |
| 协议代理 | 同时支持 四层(TCP) 和 七层(HTTP/HTTPS) 代理,适用场景广 |
| 安全防护 | 提供 ACL 访问控制、IP 过滤、HTTP 头部清洗等安全能力 |
3 负载均衡与工作模式
3.1 负载均衡定义
负载均衡是将海量并发请求/流量,按策略均匀、智能地分发到多台后端服务器的技术,是分布式架构的核心能力。
3.2 四层 / 七层代理模式
HAProxy 最核心的特点是同时支持四层和七层代理:
- 四层(TCP)代理
工作在 OSI 传输层,基于 IP + 端口 转发流量,不解析应用层内容。
适合 MySQL、Redis、邮件、游戏等非 HTTP 服务,转发快、损耗低。
- 七层(HTTP/HTTPS)代理
工作在 OSI 应用层,能完整解析 HTTP 协议,可根据 URL、路径、Cookie、请求头做智能路由。
适合 Web 服务、API 网关,支持会话保持、SSL 卸载、灰度转发等高级功能。
3.3 常见负载均衡软件对比
四层(TCP)负载均衡
LVS:内核级、性能极强的重量级四层负载均衡
Nginx:轻量级四层负载(基于 upstream 模块)
HAProxy:高性能、通用型 TCP 代理
七层(HTTP)负载均衡
Nginx:Web 服务器 + 七层代理(基于 proxy_pass)
HAProxy:专注负载均衡,会话保持、健康检查、流量调度更强大
4 工作流程
客户端请求发送到 HAProxy
HAProxy 根据负载均衡算法选择一台健康的后端服务器
与后端建立连接并转发请求
接收后端响应并返回给客户端
持续健康检查,动态维护可用节点列表
二、HAProxy基础与进阶实验
笔记时间:2026-1-23
1 前置环境搭建
1.1 实验环境图
1.2 环境搭建
haproxy主机
1
2
3
4
5
6[root@haproxy ~]# vmset.sh haproxy eth0 172.25.254.100
[root@haproxy ~]# vmset.sh haproxy eth1 192.168.0.100 nogateway
[root@haproxy ~]# echo net.ipv4.ip_forward=1 > /etc/sysctl.conf
[root@haproxy ~]# sysctl -p
net.ipv4.ip_forward = 1webserver1
1
2
3
4
5[root@webserver1 ~]# vmset.sh webserver1 eth0 192.168.0.10 nogateway
[root@webserver1 ~]# dnf install httpd -y
[root@webserver1 ~]# echo webserver1 - 192.168.0.10 > /var/www/html/index.html
[root@webserver1 ~]# systemctl enable --now httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.webserver2
1
2
3
4[root@webserver2 ~]# vmset.sh webserver2 eth0 192.168.0.20 nogateway
[root@webserver2 ~]# echo webserver2 - 192.168.0.20 > /var/www/html/index.html
[root@webserver2 ~]# systemctl enable --now httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
1.3 环境验证
1 | [root@haproxy ~]# curl 192.168.0.10 |
2 安装及配置
2.1 安装
1 | #在调度器(双网卡主机中) |
2.2 参数详解
3 基础核心实验
笔记时间:2026-1-25
3.1 负载均衡核心算法实验
(1) 静态算法
static-rr
1 | [root@haproxy ~]# vim /etc/haproxy/haproxy.cfg |
first
1 | [root@haproxy ~]# vim /etc/haproxy/haproxy.cfg |
(2) 动态算法
roundrobin
1 | [root@haproxy ~]# vim /etc/haproxy/haproxy.cfg |
leastconn
1 | [root@haproxy ~]# vim /etc/haproxy/haproxy.cfg |
(3) 混合算法
source
1 | # 默认静态算法 |
uri
1 | #主备实验环境 |
url_param
1 | # 设定url_param算法 |
hdr
1 | [root@haproxy ~]# vim /etc/haproxy/haproxy.cfg |
3.2 基于cookie的会话保持
1 | [root@haproxy ~]# vim /etc/haproxy/haproxy.cfg |
3.3 HAProxy状态页
1 | [root@haproxy ~]# vim /etc/haproxy/haproxy.cfg |
4 进阶功能实验
笔记时间:2026-01-26
4.1 客户端IP透传配置
(1) 七层(HTTP) IP透传
环境搭建
1 | # Haproxy中 |
测试环境
1 | # client中 |
测试效果
1 | # client中 |
(2) 四层(TCP)IP透传
环境搭建
1 | # 在RS中把apache停止 |
测试环境
1 | # 启用nginx的四层访问控制 |
测试效果
1 | # client |
4.2 四层TCP负载均衡配置
环境搭建
1 | # 部署mariadb数据库 |
环境测试
1 | # client |
4.3 异常请求与错误页自定义
sorryserver的设定
正常的所有服务器如果出现宕机,那么客户将被定向到指定的主机中,这个当业务主机出问题时被临时访问的主机叫做 sorryserver
1 | # 在新主机中安装apache(可以用haproxy主机代替) |
(1) 自定义错误页面
当所有主机包括sorryserver都宕机了,那么haproxy会提供一个默认访问的错误页面,这个错误页面跟报错代码有关,这个页面可以通过定义来机型设置
1 | # 出现的错误页面 |
(2) 重定向错误到指定网站
1 | [root@haproxy ~]# vim /etc/haproxy/haproxy.cfg |
4.4 ACL访问控制规则配置
(1) 实验素材
1 | # 在浏览器或者curl主机中设定本地解析 |
(2) 设定基础的haproxy实验配置
1 | [root@Haproxy ~]# vim /etc/haproxy/haproxy.cfg |
(3) 基础acl示例
1 | #在访问的网址中,所有以.com 结尾的访问10,其他访问20 |
Haproxy全站加密
制作证书
1 | [root@Haproxy ~]# mkdir /etc/haproxy/certs/ |
全站加密
1 | [root@Haproxy ~]# vim /etc/haproxy/haproxy.cfg |








