HAProxy 使用指南:从基础到实战部署
一、HAProxy简介
HAProxy(High Availability Proxy)是一款基于C语言开发的开源高性能代理软件,核心定位是"高可用"与"负载均衡",同时支持TCP(四层)和HTTP/HTTPS(七层)协议的应用代理,是企业级架构中常用的流量调度组件,能有效解决单服务器性能瓶颈、保障业务连续性。
1.1 核心功能与价值
-
高可用性保障:通过实时健康检查自动剔除故障后端节点(如服务器宕机、服务无响应);支持与 Keepalived 配合实现 "双机热备",避免 HAProxy 自身单点故障。
-
灵活负载均衡
:将客户端请求均匀分发到多台后端服务器,提供多种调度算法:
- 轮询(默认,适合后端性能一致场景);
- 加权轮询(按节点性能分配权重,性能强节点承担更多请求);
- IP 哈希(同一客户端 IP 固定转发到同一节点,实现会话保持);
- 最少连接数(请求优先分发到连接数最少的节点,适合后端性能不均场景)。
-
多协议代理能力
:
- 四层代理(TCP):基于 "IP + 端口" 转发,不解析应用层数据,适用于 MySQL、Redis、SSH 等非 HTTP 服务,转发效率高;
- 七层代理(HTTP/HTTPS):解析 URL、主机名、请求头、Cookie 等应用层信息,支持 SSL 终止(HTTPS 卸载)、请求重写、会话保持等高级功能。
-
安全防护作用:作为 "流量入口" 隔离后端服务器,避免后端节点直接暴露公网;支持 ACL(访问控制列表)限制非法 IP 访问,抵御简单 DDoS 攻击(如限制单 IP 请求频率)。
1.2 核心优势(为何选择 HAProxy)
- 高性能与高并发:采用 "事件驱动、单一进程模型",避免多进程 / 多线程的内存开销、锁竞争问题,单进程可支持数万并发连接,CPU / 内存使用率极低。
- 灵活扩展性:支持 Lua 脚本扩展(动态路由、对接服务发现)、自定义健康检查(基于 HTTP 状态码、数据库查询结果),适配复杂业务场景。
- 广泛兼容性:运行于 Linux、FreeBSD 等类 Unix 系统,兼容主流 Web 服务器(Nginx、Apache、Tomcat)、数据库(MySQL、PostgreSQL)及中间件(Redis、RabbitMQ),无需修改现有架构即可快速集成。
1.3 适用场景
- 高负载 Web 站点 :处理数万级并发(如电商大促、直播平台),需会话保持(用户登录状态)或七层路由(如
/api
转发到 API 服务器、/static
转发到静态资源服务器); - 微服务架构:作为 API 网关前置负载均衡,按请求头、路径分发流量到不同微服务节点;
- 数据库 / 中间件代理:通过四层代理实现 MySQL 主从负载均衡(读请求分发到从库)、Redis 集群入口调度。
1.4 行业认可度
HAProxy 因稳定性和高性能,被全球知名平台采用:
- 代码托管:GitHub、Bitbucket;
- 社交 / 内容平台:Stack Overflow、Reddit、Tumblr、Twitter;
- 云计算厂商:亚马逊 AWS、阿里云、腾讯云(部分负载均衡产品基于 HAProxy 二次开发)。
二、负载均衡技术分层(按 OSI 模型)
负载均衡的核心是 "将流量分发到多台服务器",按工作的网络层级(对应 OSI 模型)可分为二层、三层、四层、七层,整体规律为:层级越低,转发效率越高;层级越高,功能越灵活。
2.1 二层负载均衡(数据链路层)
- 工作原理:基于 "虚拟 MAC 地址(VIP-MAC)" 转发 ------ 负载均衡器对外暴露虚拟 MAC,客户端请求该 MAC 后,负载均衡器仅替换数据包的 "目标 MAC" 为后端真实服务器 MAC,后端处理后直接响应客户端(无需经过负载均衡器)。
- 关键特点:转发效率极高(仅处理数据链路层帧),但仅支持局域网内转发(MAC 地址不可跨网段),不感知 IP 和端口。
- 适用场景:局域网内低延迟、高吞吐业务(如数据库集群)。
- 典型产品:F5 BIG-IP(二层模式)、华为云 ELB(二层模式)。
2.2 三层负载均衡(网络层)
- 工作原理:基于 "虚拟 IP 地址(VIP)" 转发 ------ 负载均衡器对外暴露 VIP,客户端请求该 IP 后,负载均衡器替换数据包的 "目标 IP" 为后端真实 IP,后端处理后将响应返回给负载均衡器,再由负载均衡器替换 "源 IP" 为 VIP 后响应客户端。
- 关键特点:支持跨网段转发(IP 可路由),转发效率较高,但不感知端口和应用层数据,无法按端口区分服务。
- 适用场景:跨网段、对延迟敏感的非 HTTP 服务(如跨机房数据库备份集群)。
- 典型产品:LVS-DR 模式(Linux Virtual Server)、华为云 ELB(三层模式)。
2.3 四层负载均衡(传输层)
- 工作原理:基于 "IP + 端口(VIP:Port)" 转发 ------ 负载均衡器对外暴露 "VIP + 端口"(如 192.168.1.100:80),客户端请求后,负载均衡器按 "IP + 端口" 判断服务类型,替换 "目标 IP + 端口" 为后端真实地址,转发请求。
- 关键特点:支持 TCP/UDP 协议(覆盖绝大多数服务),转发效率接近三层,可按端口区分服务;但不感知应用层数据,无法实现精细化路由。
- 适用场景:需区分端口的 TCP/UDP 服务(如 MySQL 3306 端口、Redis 6379 端口、游戏 UDP 服务)。
- 典型产品:LVS-NAT 模式、F5 BIG-IP、HAProxy(四层模式)、Nginx(四层模式)。
2.4 七层负载均衡(应用层)
- 工作原理:基于 "应用层协议信息" 转发 ------ 负载均衡器解析 HTTP、HTTPS 等协议的内容(如 URL、主机名、请求头),按预设规则(如 URL=/api 转发到 API 服务器)将请求分发到后端节点。
- 关键特点:功能极灵活(支持 SSL 终止、请求重写、会话保持、静态资源缓存);但转发效率低于四层,对 CPU 性能要求较高。
- 适用场景:Web 服务、API 网关(如电商平台不同页面路由、HTTPS 服务卸载)。
- 典型产品:HAProxy(七层模式)、Nginx(七层模式)、Kong、APISIX。
三、HAProxy 安装部署
HAProxy 有两种安装方式:yum安装
(简单,适合快速部署)和源码安装
(灵活,可自定义功能和路径)。
3.1 yum 安装(快速部署)
适用于 CentOS/RHEL 系统,直接通过官方仓库安装:
java
[root@hrz1 ~]# yum -y install haproxy
- 安装后默认路径:
- 配置文件:
/etc/haproxy/haproxy.cfg
; - 二进制文件:
/usr/sbin/haproxy
; - 服务管理:通过
systemctl
直接管理(如systemctl start haproxy
)。
- 配置文件:
3.2 源码安装(自定义部署)
1. 安装HAProxy编译依赖
java
[root@hrz1 ~]# yum -y install make gcc pcre-devel bzip2-devel openssl-devel systemd-devel gcc-c++ zlib-devel lua
- 操作目的 :安装编译HAProxy所需的工具链 和依赖库(HAProxy需源码编译,依赖这些组件才能正常编译并启用核心功能)。
- 关键组件解释 :
make/gcc/gcc-c++
:编译工具链(make
用于解析Makefile,gcc
是C编译器,gcc-c++
是C++编译器,HAProxy部分代码依赖C++);pcre-devel
:Perl兼容正则表达式库(HAProxy的URL路由、Rewrite等功能依赖此库);openssl-devel
:SSL/TLS加密库(启用HAProxy的HTTPS代理、SSL终止功能);zlib-devel
:数据压缩库(支持HAProxy对HTTP响应进行gzip压缩);bzip2-devel
:bzip2压缩格式支持库(辅助压缩功能);systemd-devel
:systemd服务管理库(让HAProxy支持被systemd托管,实现开机自启、平滑重启);lua
:Lua脚本支持(HAProxy可通过Lua脚本扩展复杂业务逻辑,如动态路由);
- 参数
-y
:自动确认所有安装提示(无需手动输入y
确认)。
2. 创建HAProxy专用系统用户
java
[root@hrz1 ~]# useradd -r -M -s /sbin/nologin haproxy
# 验证用户(输出uid、gid即正常)
[root@hrz1 ~]# id haproxy
uid=988(haproxy) gid=982(haproxy) 组=982(haproxy)
- 操作目的 :创建一个非登录、无家目录的系统用户,用于运行HAProxy进程(遵循"最小权限原则",避免用root直接运行服务,降低安全风险)。
- 参数含义 :
-r
:创建"系统用户"(UID范围通常在1000以下,区别于普通用户);-M
:不创建用户家目录(HAProxy无需家目录存储数据);-s /sbin/nologin
:指定用户登录shell为/sbin/nologin
(禁止该用户通过SSH或终端登录系统);haproxy
:用户名(与服务名一致,便于管理)。
3. 查看HAProxy源码包
java
[root@hrz1 ~]# ls
haproxy-2.1.3.tar.gz
- 操作目的 :确认HAProxy源码压缩包(
haproxy-2.1.3.tar.gz
)已存在于当前目录(后续需解压编译)。 - 注:
2.1.3
是HAProxy的稳定版本,需确保压缩包未损坏(可通过md5sum
校验)。
4. 解压HAProxy源码包
java
[root@hrz1 ~]# tar -xzvf haproxy-2.1.3.tar.gz
- 操作目的 :将源码压缩包解压到当前目录,生成编译所需的源码目录(
haproxy-2.1.3
)。 - 参数含义 :
-x
:执行"解压"操作;-z
:处理gzip
格式的压缩包(.tar.gz
后缀的包需此参数);-v
:显示解压过程(打印每个文件的解压信息,便于排查异常);-f
:指定要解压的文件(必须放在参数最后,后跟文件名)。
6. 进入HAProxy源码目录
java
[root@hrz1 ~]# cd haproxy-2.1.3/
- 操作目的:进入解压后的源码目录(所有编译命令需在此目录执行,因Makefile位于该目录下)。
7. 清理残留编译文件
java
[root@hrz1 haproxy-2.1.3]# make clean
- 操作目的 :清理源码目录中可能残留的"旧编译产物"(如
.o
目标文件、二进制文件),避免影响本次编译(尤其适用于重新编译的场景)。
8. 编译HAProxy(核心步骤)
java
[root@hrz1 haproxy-2.1.3]# make -j $(grep 'processor' /proc/cpuinfo |wc -l) \
> TARGET=linux-glibc \
> USE_OPENSSL=1 \
> USE_ZLIB=1 \
> USE_PCRE=1 \
> USE_SYSTEMD=1
- 操作目的:根据系统环境和需求,编译生成HAProxy二进制文件(启用SSL、压缩、正则、systemd支持)。
- 关键参数拆解 :
-j $(grep 'processor' /proc/cpuinfo |wc -l)
:
并行编译(-j
指定编译线程数),括号内命令用于"自动获取CPU核心数"(如4核CPU则用4线程,大幅提升编译速度);TARGET=linux-glibc
:指定目标系统为"Linux + glibc库"(适配绝大多数Linux发行版,如CentOS、RHEL);USE_OPENSSL=1
:启用OpenSSL支持(HAProxy可处理HTTPS流量、配置SSL证书);USE_ZLIB=1
:启用zlib支持(对HTTP响应进行gzip压缩,减少网络带宽占用);USE_PCRE=1
:启用PCRE正则支持(实现URL路由、域名匹配等复杂转发规则);USE_SYSTEMD=1
:启用systemd支持(HAProxy可被systemd管理,支持平滑重启、状态监控);
- 注:
\
是Linux命令换行符,用于将长命令拆分行显示,不影响执行逻辑。
9. 安装HAProxy到指定目录
java
[root@hrz1 haproxy-2.1.3]# make install PREFIX=/usr/local/haproxy
- 操作目的 :将编译好的HAProxy文件(二进制、配置模板、文档等)安装到
/usr/local/haproxy
目录(自定义安装路径,便于管理,避免与系统默认文件混淆)。 PREFIX
含义 :指定"安装前缀目录",安装后目录结构如下:/usr/local/haproxy/sbin/haproxy
:HAProxy主二进制文件;/usr/local/haproxy/share
:文档、示例配置等;/usr/local/haproxy/man
:man手册(man haproxy
可查看帮助)。
10. 复制HAProxy二进制到系统路径
java
[root@hrz1 haproxy-2.1.3]# cp haproxy /usr/sbin/
- 操作目的 :将源码目录中编译好的
haproxy
二进制文件,复制到/usr/sbin/
(系统默认的"系统命令路径",后续可直接在任意目录执行haproxy
命令,无需输入完整路径)。
11. 配置HAProxy所需内核参数
java
[root@hrz1 haproxy-2.1.3]# vim /etc/sysctl.conf //编辑内核参数配置文件
[root@hrz1 haproxy-2.1.3]# sysctl -p // 生效内核参数
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
- 操作目的:修改Linux内核参数,确保HAProxy正常工作(负载均衡依赖IP转发和非本地IP绑定)。
- 参数解释 :
net.ipv4.ip_nonlocal_bind = 1
:允许HAProxy绑定"非本地IP"(如虚拟IP/VIP,用于高可用场景,如Keepalived+HAProxy);net.ipv4.ip_forward = 1
:开启IP转发功能(HAProxy需将客户端请求"转发"到后端Web服务器,不开启则无法转发);
sysctl -p
:立即加载/etc/sysctl.conf
中的配置(无需重启系统即可生效)。
12. 创建HAProxy配置文件目录,编写HAProxy主配置文件(核心配置)
java
[root@hrz1 haproxy-2.1.3]# mkdir /etc/haproxy
[root@hrz1 haproxy-2.1.3]# vim /etc/haproxy/haproxy.cfg
以下是配置文件内容的逐段解释 (HAProxy配置分为global
、defaults
、listen
三大块,逻辑上从全局到局部继承):
四、HAProxy 配置解析
HAProxy 配置文件采用五段式结构 (global
、defaults
、frontend
、backend
、listen
),各段落职责明确且支持配置继承,默认配置文件路径为/etc/haproxy/haproxy.cfg
(源码安装需手动创建)。
4.1 配置文件整体结构
段落 | 归属 | 核心作用 | 配置优先级 |
---|---|---|---|
global |
全局设定 | 进程级参数(与操作系统资源、日志基础配置相关),不被其他段落继承 | 仅作用于 HAProxy 进程,唯一 |
defaults |
代理设定 | 默认规则模板,被frontend /backend /listen 继承 |
其他段落参数 > defaults |
frontend |
代理设定 | 前端请求入口(接收客户端请求,按规则匹配后端) | 自定义规则,指向backend |
backend |
代理设定 | 后端服务集群(管理真实服务器,含健康检查、负载均衡算法) | 接收frontend 转发的请求 |
listen |
代理设定 | frontend+backend 组合体(适合简单场景,如监控页面、单集群转发) |
自身包含 "接收 + 转发" 逻辑 |
4.2 各段落详细配置(附示例)
4.2.1 global
段:全局进程级配置
作用:配置 HAProxy 进程的基础环境,修改后需重启 HAProxy 生效。
ini
global
log 127.0.0.1 local0 info # 日志:本地127.0.0.1的local0设备,级别info
maxconn 20480 # 全局最大并发连接数(按服务器性能调整,4核8G建议20000-50000)
pidfile /var/run/haproxy.pid # PID文件路径(systemd管理需依赖)
user haproxy # 运行HAProxy的用户(对应步骤2创建的haproxy用户)
group haproxy # 运行HAProxy的用户组
daemon # 后台守护进程模式(生产环境必配)
# nbproc 2 # 可选:进程数(多核服务器设为CPU核心数,提升并发)
-
日志级别说明(从低到高,生产环境常用info):
级别名称 代码 描述 emerg
0 系统不可用(如进程崩溃) alert
1 必须立即处理的事件(如所有后端故障) crit
2 关键事件(如单个后端集群故障) err
3 错误事件(如健康检查失败、连接超时) warning
4 警告事件(如连接数接近阈值) notice
5 普通但重要的事件(如服务启动 / 重载) info
6 有用信息(如请求日志、转发记录) debug
7 调试信息(不建议生产使用)
4.2.2 defaults
段:默认规则模板
作用:定义通用配置,被其他段落继承,减少重复配置。
ini
defaults
mode http # 默认协议模式(http=七层,tcp=四层,health=废弃)
log global # 继承global段日志配置
option dontlognull # 不记录空连接日志(客户端连后未发请求断开,减少冗余)
option httpclose # 每次请求后关闭TCP连接(兼容HTTP/1.0,HTTP/1.1用`option http-keep-alive`)
option httplog # 记录HTTP详细日志(含请求方法、URL、状态码等)
# option forwardfor # 可选:添加X-Forwarded-For头(后端服务器获取客户端真实IP)
option redispatch # 后端故障时,自动重分发请求到健康节点
balance roundrobin # 默认负载均衡算法(轮询)
# 超时配置(单位默认ms,可显式指定s/m/h)
timeout connect 10s # 连接后端超时(10秒未连通则视为后端不可用)
timeout client 10s # 客户端与HAProxy空闲超时(10秒无请求则断开)
timeout server 10s # 后端响应HAProxy超时(10秒无响应则视为超时)
timeout check 10s # 健康检查超时(10秒无响应则视为节点故障)
maxconn 60000 # 每个frontend/backend的最大并发(不超过global的maxconn)
retries 3 # 连接失败重试次数(3次失败则标记节点不可用)
-
时间单位说明(超时参数专用):
单位后缀 含义 换算关系 示例(5 秒) us
微秒 1us = 1/1000000 秒 不常用 ms
毫秒(默认) 1ms = 1/1000 秒 timeout connect 5000ms
s
秒 1s = 1000ms timeout connect 5s
m
分钟 1m = 60s timeout tunnel 10m
h
小时 1h = 60m timeout http-keep-alive 1h
d
天 1d = 24h 不常用
4.2.3 frontend
段:前端请求入口
作用:HAProxy 的 "流量入口",监听指定端口,按 ACL 规则转发到对应后端。
ini
frontend http_80_in # 前端节点名称(自定义,如"http_80_in"表示HTTP 80端口入口)
bind 0.0.0.0:80 # 监听地址与端口(0.0.0.0=所有网卡,80=HTTP默认端口)
mode http # 协议模式(与后端保持一致,此处为七层Web服务)
log global # 继承全局日志配置
option forwardfor # 启用X-Forwarded-For头(后端需信任HAProxy IP才能获取真实客户端IP)
# 示例:ACL规则(按域名匹配转发)
acl is_www hdr(host) -i www.example.com # 匹配Host=www.example.com的请求
acl is_api hdr(host) -i api.example.com # 匹配Host=api.example.com的请求
# 转发规则
use_backend www_back if is_www # 匹配is_www则转发到www_back后端
use_backend api_back if is_api # 匹配is_api则转发到api_back后端
default_backend default_back # 未匹配任何规则时,转发到default_back后端
-
ACL 规则常用匹配条件:
匹配条件 示例 作用 域名(Host) acl is_www hdr(host) -i www.example.com
匹配指定域名请求 URL 路径 acl is_static path_beg -i /static /img
匹配 URL 以 /static
或/img
开头的请求客户端 IP acl allow_ip src 192.168.100.0/24
匹配指定网段客户端 请求方法 acl is_post method POST
匹配 POST 请求(如表单提交)
4.2.4 backend
段:后端服务集群
作用:管理真实服务器集群,定义节点 IP、健康检查、权重等。
ini
backend www_back # 后端集群名称(需与frontend的use_backend对应)
mode http # 协议模式(与前端一致)
option redispatch # 后端故障时重分发请求
balance source # 负载均衡算法(源IP哈希,实现会话保持)
option httpchk GET /index.html # HTTP健康检查(访问/index.html判断节点健康,需后端存在该文件)
# 后端节点配置:格式=server 节点名 IP:端口 [选项]
server web1 192.168.100.20:80 cookie 2 weight 3 check inter 2000 rise 2 fall 3
server web2 192.168.100.30:80 cookie 1 weight 1 check inter 2000 rise 2 fall 3
# server web3 192.168.100.40:80 backup # 可选:备份节点(仅主节点全故障时启用)
- 节点选项说明:
cookie N
:分配 Cookie 值(配合balance source
实现会话保持);weight N
:权重(默认 1,权重比 = 请求分配比,如 web1 权重 3、web2 权重 1,则 web1 接收 3/4 请求);check
:启用健康检查;inter 2000
:健康检查间隔(2000ms=2 秒);rise 2
:节点故障后,连续 2 次检查正常则标记为 "健康";fall 3
:节点连续 3 次检查失败则标记为 "故障";backup
:标记为备份节点。
4.2.5 listen
段:前端 + 后端组合体
作用:同时包含 "请求接收" 和 "后端转发",适合简单场景(如监控页面、单集群转发),是 HAProxy 1.3 前的唯一配置方式。
ini
listen admin_stats # 组合配置名称(如"admin_stats"表示监控页面)
bind 0.0.0.0:8189 # 监听端口(监控页面访问端口,避免与业务端口冲突)
stats enable # 启用监控功能
mode http # 协议模式(监控页面为Web服务)
log global # 继承全局日志配置
stats uri /haproxy_stats # 监控页面访问路径(完整URL:http://HAProxy_IP:8189/haproxy_stats)
stats realm Haproxy\ Statistics # 登录提示信息(\转义空格)
stats auth admin:admin # 登录账号密码(格式:用户名:密码,可配置多个)
stats admin if TRUE # 登录后可手动下线/上线后端节点(便于维护)
stats refresh 30s # 监控页面自动刷新间隔(30秒)
五、HAProxy 服务管理与日志配置
5.1 创建 systemd 服务文件(实现开机自启)
源码安装的 HAProxy 需手动创建 systemd 服务文件
java
[root@hrz1 haproxy-2.1.3]# vim /usr/lib/systemd/system/haproxy.service
以下是服务文件内容的逐段解释(systemd通过此文件管理HAProxy的启动、停止、重载):
ini
[Unit]
Description=HAProxy Load Balancer # 服务描述(`systemctl status haproxy`时显示)
After=syslog.target network.target # 服务启动依赖:在syslog(日志服务)和network(网络服务)之后启动(确保依赖服务就绪)
[Service]
# 启动前检查:验证haproxy.cfg配置文件语法是否正确(-c:检查配置,-q:安静模式,仅报错不输出正常信息)
ExecStartPre=/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c -q
# 启动命令:-Ws:以systemd兼容模式运行(支持平滑重启),-f:指定配置文件,-p:指定PID文件
ExecStart=/usr/local/haproxy/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid
# 重载命令:发送USR2信号给HAProxy主进程(实现"平滑重载配置",不中断现有连接)
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.target # 服务安装目标:在"多用户模式"(系统正常运行模式)下启用(开机自启的关键)
5.2 重新加载systemd配置(让服务文件生效)
java
[root@hrz1 haproxy-2.1.3]# systemctl daemon-reload
- 操作目的 :systemd仅在启动时加载服务文件,修改或新增服务文件后,需执行此命令"重新扫描服务文件",否则
systemctl
无法识别新的haproxy.service
。
5.3 配置HAProxy日志输出(单独记录日志)
bash
# 编辑rsyslog配置文件(系统日志服务,HAProxy日志需通过rsyslog写入文件)
$ModLoad imuxsock # 加载"本地系统日志支持模块"(处理通过logger命令或本地设备发送的日志)
$ModLoad imjournal # 加载"systemd日志支持模块"(读取systemd管理的服务日志)
local0.* /var/log/haproxy.log # 关键配置:将local0设备的所有日志(HAProxy日志)写入/var/log/haproxy.log
- 操作目的 :让HAProxy的日志单独存储到
/var/log/haproxy.log
(避免与系统日志混合,便于后续排查问题)。 - 注:此配置通常添加到
/etc/rsyslog.conf
或/etc/rsyslog.d/
目录下的自定义文件(如haproxy.conf
)。
5.4 重启rsyslog服务(让日志配置生效)
java
[root@hrz1 haproxy-2.1.3]# systemctl restart rsyslog
- 操作目的:重启系统日志服务,使"HAProxy日志输出到单独文件"的配置生效。
5.5 启动HAProxy并设置开机自启
java
[root@hrz1 haproxy-2.1.3]# systemctl restart haproxy.service // 重启HAProxy服务(首次启动等同于启动)
[root@hrz1 haproxy-2.1.3]# systemctl enable haproxy.service // 设置HAProxy开机自启(系统重启后自动运行)
- 验证启动状态 :可执行
systemctl status haproxy.service
,若显示active (running)
则表示服务正常运行。
19.网页测试


5.6 查看HAProxy日志(验证服务正常工作)
bash
[root@hrz1 haproxy-2.1.3]# vim /var/log/haproxy.log
# 日志内容示例
Sep 23 18:26:06 localhost haproxy[65774]: 192.168.100.1:50012 [23/Sep/2025:18:26:06.958] webcluster webcluster/rs1 0/0/0/1/1 200 235 - - --NI 2/2/0/0/0 0/0 "GET / HTTP/1.1"
Sep 23 18:26:07 localhost haproxy[65774]: 192.168.100.1:50013 [23/Sep/2025:18:26:07.375] webcluster webcluster/rs2 0/0/1/0/1 200 235 - - --NI 2/2/0/0/0 0/0 "GET / HTTP/1.1"
Sep 23 18:26:07 localhost haproxy[65774]: 192.168.100.1:50014 [23/Sep/2025:18:26:07.775] webcluster webcluster/rs1 0/0/1/0/1 200 235 - - --NI 2/2/0/0/0 0/0 "GET / HTTP/1.1"
Sep 23 18:26:08 localhost haproxy[65774]: 192.168.100.1:50015 [23/Sep/2025:18:26:08.062] webcluster webcluster/rs2 0/0/1/1/2 200 235 - - --NI 2/2/0/0/0 0/0 "GET / HTTP/1.1"
- 日志字段逐段解释 (以第一条日志为例):
Sep 23 18:26:06
:日志时间;localhost
:HAProxy服务器主机名;haproxy[65774]
:HAProxy进程名及PID;192.168.100.1:50012
:客户端IP和端口(发起请求的客户端);[23/Sep/2025:18:26:06.958]
:请求接收时间;webcluster webcluster/rs1
:请求所属集群(webcluster)及转发的后端服务器(rs1,即192.168.100.20);0/0/0/1/1
:时间统计(单位:毫秒),依次为:客户端到HAProxy时间/HAProxy到后端连接时间/后端响应时间/HAProxy到客户端响应时间/总时间;200
:HTTP状态码(200表示请求成功);235
:响应数据大小(单位:字节);"GET / HTTP/1.1"
:客户端请求(方法GET,路径/,协议HTTP/1.1);
- 日志验证结论:客户端(192.168.100.1)的请求被轮询分发到rs1和rs2,状态码均为200,说明HAProxy负载均衡功能正常。
进程名及PID;
-
192.168.100.1:50012
:客户端IP和端口(发起请求的客户端); -
[23/Sep/2025:18:26:06.958]
:请求接收时间; -
webcluster webcluster/rs1
:请求所属集群(webcluster)及转发的后端服务器(rs1,即192.168.100.20); -
0/0/0/1/1
:时间统计(单位:毫秒),依次为:客户端到HAProxy时间/HAProxy到后端连接时间/后端响应时间/HAProxy到客户端响应时间/总时间; -
200
:HTTP状态码(200表示请求成功); -
235
:响应数据大小(单位:字节); -
"GET / HTTP/1.1"
:客户端请求(方法GET,路径/,协议HTTP/1.1);
- 日志验证结论:客户端(192.168.100.1)的请求被轮询分发到rs1和rs2,状态码均为200,说明HAProxy负载均衡功能正常。