Linux 7 生产环境安装 HaProxy
前言
本文主要介绍如何在 Linux 环境中安装 HaProxy,适用于 CentOS、Debian、Ubuntu 等 Linux 发行版。
HaProxy 介绍
HaProxy 概述
HAProxy(High Availability Proxy)是一款开源、高性能的负载均衡器和代理服务器,广泛应用于 Web 服务、数据库等场景。其主要特点如下:
高性能
- 支持每秒处理数十万连接
- 内存和 CPU 使用效率高
多协议支持
- HTTP / HTTPS(第 7 层)
- TCP(第 4 层)
- 支持同时代理多种协议
高可用与容错
- 支持热重启、主从 HA(高可用)配置
- 支持会话保持(Stickiness)
丰富的负载均衡算法
- RoundRobin、Least Connections、Source IP Hash 等
- 可灵活配置健康检查(Health Check)
监控与统计
- 内置统计页面
- 支持
syslog日志和第三方监控集成
多线程、多进程支持(从 HAProxy
2.0开始)- 支持单进程 + 单线程、单进程 + 多线程、多进程 + 单线程、多进程 + 多线程
- 可以根据 CPU 核心优化性能
典型的应用场景
- Web 服务器的负载均衡(Tomcat、Apache 等)
- 数据库代理(MySQL、PostgreSQL)
- HTTPS/TCP 服务的反向代理
HaProxy 对比 Nginx
| 特性 | HAProxy | Nginx |
|---|---|---|
| 定位 | 专业的高性能负载均衡器与代理服务器 | Web 服务器 + 反向代理 + 负载均衡 |
| 主要协议支持 | TCP(第 4 层)、HTTP/HTTPS(第 7 层) | HTTP/HTTPS(第 7 层)、部分 TCP/UDP 支持(依赖 Stream 模块) |
| 负载均衡算法 | RoundRobin、Least Connections、Source IP Hash、URI Hash 等 | RoundRobin、Least Connections、IP Hash |
| 多进程 / 多线程 | 单进程 / 多线程、多进程 / 多线程(从 2.0 版本开始支持) | 多进程 + 单线程(Worker 模式,多进程多 Worker) |
| 健康检查 | 内置灵活健康检查(TCP/HTTP) | 仅 HTTP 健康检查,需要配置 proxy_pass + health_check(Nginx Plus 支持更多) |
| 性能特点 | 极低延迟,适合高并发 TCP/HTTP 负载均衡 | 高并发 HTTP 服务,静态资源处理优秀 |
| 会话保持 | 支持会话保持(源 IP、Cookie 等) | 支持 IP Hash、Cookie 等 |
| 监控与统计 | 内置统计页面,可集成 Prometheus | 需第三方模块或 Nginx Plus 才有可视化监控 |
| 适用场景 | 高并发 TCP/HTTP 负载均衡、数据库代理 | Web 服务反向代理、静态文件服务、HTTP/HTTPS 负载均衡 |
| 配置复杂度 | 配置文件直观但灵活性高,需要理解 TCP/HTTP 模式区别 | 配置易用,HTTP/HTTPS 支持更丰富,模块化灵活 |
选择建议
- 如果目标是高性能 TCP 或 HTTP 负载均衡,尤其是数据库代理,推荐 HAProxy。
- 如果目标是 Web 服务器 + HTTP 反向代理 + 静态内容服务,或者已经有 Nginx 架构,使用 Nginx 更方便。
HAProxy 的进程和线程模型
HAProxy 从 2.0 版本开始支持多线程模式,但多进程模式与多线程模式有一些限制,需要注意:
| 配置模式 | nbproc | nbthread | 描述 | 注意事项 |
|---|---|---|---|---|
| 单进程 + 单线程 | 1 | 1 | 最基础模式,性能有限,适合低并发或测试环境 | 简单稳定,几乎没有兼容问题 |
| 单进程 + 多线程 | 1 | > 1 | 利用多线程提升单进程的并发处理能力 | 推荐 Systemd 环境下使用,避免启用 HaProxy 的 daemon 配置项 |
| 多进程 + 单线程 | > 1 | 1 | 多进程模式,利用多核 CPU | 每个进程独立,无法共享全局连接,Systemd 环境下通常不用 HaProxy 的 daemon 配置项 |
| 多进程 + 多线程 | > 1 | > 1 | 每个进程内可启动多个线程 | 仅在特定场景使用,配置复杂,很多功能受限制(如 stats socket 配置项) |
nbproc配置项:- 用于指定 HAProxy 启动的进程数,适合多核 CPU 利用。
- Systemd 环境下建议配置
nbproc = 1,因为 Systemd 已经管理了 HaProxy 进程的生命周期。
nbthread配置项:- 用于指定每个进程的线程数,多线程模式可以提高单进程的并发性能。
- 必须搭配
nbproc ≥ 1使用。 - Systemd 环境下,推荐使用单进程 + 多线程模式,即
nbproc = 1+nbthread > 1。
daemon配置项:- 当 HAProxy 由 Systemd 管理时,不应该启用
daemon,否则可能导致 PID 和日志管理冲突。
- 当 HAProxy 由 Systemd 管理时,不应该启用
限制与注意事项:
- 多线程模式下,每个线程共享全局配置和监听端口,可显著减少资源占用。
- 多进程模式下,
stats socket、pidfile、chroot等功能需要额外注意权限和路径。
HaProxy 安装
版本说明
| 软件 | 版本 | 安装方式 |
|---|---|---|
| HaProxy | 2.8.5 | 源码编译安装 |
安装概述
| 安装说明 | 路径 |
|---|---|
| HaProxy 的安装路径 | /usr/local/sbin/haproxy |
| HaProxy 的配置文件 | /etc/haproxy/haproxy.cfg |
| HaProxy 的 PID 文件 | /var/lib/haproxy/haproxy.pid |
| HaProxy 的 Socket 文件 | /var/lib/haproxy/stats |
| HaProxy 的 Systemd 服务配置文件 | /usr/lib/systemd/system/haproxy.service |
HaProxy 的安装方式
- HaProxy 有两种安装方式,一种是通过 YUM 安装,另一种是通过源码编译安装。
- YUM 安装:适合快速搭建、生产环境要求稳定版本、无需特定新功能的场景。
- 源码安装:适合追求最新特性、高性能优化、或者需要自定义编译选项的场景。
安装步骤
编译安装
安装依赖软件包
1 | # CentOS系统安装软件包 |
下载 HaProxy 源码包(官网下载地址)
1 | # 下载源码包 |
下载 HaProxy 源码包
1 | # 解压源码包 |
编译源码与安装
1 | # 进入源码包的解压目录 |
创建用户
创建 HaProxy 用户与用户组
1 | # 创建用户组 |
配置服务
配置 Systemd 管理 HaProxy 服务
1 | # 创建系统配置文件,添加以下配置内容 |
1 | [Unit] |
创建 HaProxy 的运行目录
1 | # 创建运行目录 |
创建 HaProxy 的配置目录
1 | # 创建配置目录 |
创建 HaProxy 的配置文件
1 | # 创建配置文件,添加以下配置内容 |
1 | #--------------------------------------------------------------------- |
HaProxy 配置文件的使用说明
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
maxconn | 全局 / 前端 / 后端 | 2000 | 最大连接数,控制 HAProxy 可以同时处理的并发连接数。 |
nbthread | 全局 | 1 | 指定每个进程使用的线程数。多线程模式可提高单进程并发性能。 |
nbproc | 全局 | 1 | 指定 HAProxy 启动的进程数。多进程模式用于多核优化,但 Systemd 环境下不推荐与 daemon 配合使用。 |
daemon | 全局 | 禁用 | 是否后台运行。Systemd 管理时通常禁用,HAProxy 由 Systemd 控制前后台。 |
mode | defaults/frontend/backend | http | 连接模式,可选 http 或 tcp。 |
balance | backend | roundrobin | 负载均衡算法,可选 roundrobin、leastconn、source 等。 |
stats auth | listen | 设置统计页面认证用户名和密码,例如 admin:admin。 | |
stats refresh | listen | 10s | 统计页面刷新时间,单位秒。 |
stats realm | listen | HTTP Basic Auth 的 realm 名称,显示在认证弹窗中。 | |
stats uri | listen | / | HaProxy 统计页面访问 URI,例如 /admin?stats。 |
Haproxy 的配置建议
maxconn+nbthread可以提升单进程的并发性能。- 当使用 Systemd 管理 HaProxy 时,建议配置
nbproc = 1+nbthread > 1+ 不启用 daemon,这是最稳定和高效的配置方式。
启动服务
设置开机自启动 HaProxy 服务
1 | # 更新系统配置 |
立刻启动 HaProxy 服务
1 | # 启动HaProxy |
管理服务
管理 HaProxy 服务
1 | # 查看HaProxy的运行状态 |
当 HaProxy 的配置文件发生变更后,可以执行热加载(也叫平滑重载,不会中断现有连接),让配置文件生效
1 | # 热加载HaProxy配置文件 |
验证服务
浏览器通过 http://192.168.1.191:1080/admin?stats 访问 HaProxy 的统计页面,默认的登录用户名和密码是 admin / admin;如果可以正常访问(如下图所示),则说明 HaProxy 可以正常运行

