目录
一,Haproxy集群架构说明
架构说明
环境规划
二,安装HAProxy(以CentOS7.9为例)
1. 安装依赖
2. 上传并解压软件
2.1 安装 Lua
2.2 验证 Lua 安装
3. 安装 HAProxy
3.1 编译 HAProxy
3.2 安装 HAProxy
3.3 查看安装结果
三、核心配置HAProxy集群
1. 创建服务脚本
2. 优化执行文件路径
3. 创建运行HAProxy的用户
4. 配置HAProxy主配置文件
5. 启动HAProxy服务
6. 重启服务并检查状态
7. 开启HAProxy统计页面
7.1 在配置文件中添加统计页面配置
7.2 查看完整配置文件
7.3 重启服务使配置生效
7.4 测试统计页面访问
四、配置后端 Web 服务器
配置 Web1 容器(192.168.30.154)
1. 安装 Nginx
2. 启动并设置开机自启
3. 自定义 HTML 页面
4. 测试访问
配置 Web2 容器(192.168.30.155)
1. 安装 Nginx
2. 启动并设置开机自启
3. 自定义 HTML 页面
4. 测试访问
五、配置 NFS 服务器
1. 安装 NFS 服务
2. 创建共享目录
3. 准备图片文件并设置权限
3.1 放入图片文件
3.2 创建 Nginx 用户并设置权限
4. 配置 NFS 共享
5. 启动服务并设置开机自启
6. 验证共享配置是否生效
六、在两台 Nginx 服务器上挂载 NFS
1. 安装 NFS 客户端工具
2. 创建本地挂载点
3. 手动挂载测试
4. 验证挂载是否成功
5. 设置开机自动挂载
6. 重启 Nginx 服务
7. 修改 HTML 代码引用路径
7.1 修改 Nginx1 的 index.html
7.2 修改 Nginx2 的 index.html
8. 测试页面显示
七、HAProxy 日志配置
1. 备份配置文件
2. 配置 HAProxy 日志
3. 安装 rsyslog
4. 配置 rsyslog
5. 启动 rsyslog 服务
6. 创建日志目录
7. 查看日志
检验与测试
访问方式
Haproxy排除思路与查看日志
1. HAProxy 故障排除通用思路
一,Haproxy集群架构说明
架构说明

HAProXy部署在前置层,不处理业务逻辑,仅做七层(HTTP)或四层(TCP)转发; 后端 Web 服务器可为NginWApache/Tomcat等,需确保内容一致(建议配合NFS、rsync或CICD同步);
环境规划
|
角色 |
IP & 主机名 |
操作系统 |
|
Haproxy 集群 |
IP: 192.168.30.153 主机名: haproxycluster153 |
CentOS 7.9 (内核 3.10.0-1160.el7.x86_64) |
|
Web 容器 1 |
IP: 192.168.30.154 主机名: bjidc001ng154 |
CentOS 7.9 (内核 3.10.0-1160.el7.x86_64) |
|
Web 容器 2 |
IP: 192.168.30.155 主机名: bjidc001ng155 |
CentOS 7.9 (内核 3.10.0-1160.el7.x86_64) |
|
NFS服务器 |
IP:192.168.30.156 主机名:NFServer |
CentOS 7.9 (内核 3.10.0-1160.el7.x86_64) |
生产环境,一般推荐使用 KVM 虚拟机来单独做 Haproxy 负载均衡器。
在开始安装前,请确保已关闭防火墙并禁用 SELinux(测试环境建议):
# 停止并禁用 firewalld
systemctl stop firewalld
systemctl disable firewalld
# 临时关闭 SELinux
setenforce 0
# 永久禁用 SELinux(需重启生效)
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
二,安装HAProxy(以CentOS7.9为例)
1. 安装依赖
在 HAProxy 集群节点上,首先安装必要的编译依赖包:
yum -y install gcc pcre-devel openssl-devel zlib-devel readline-devel
2. 上传并解压软件
2.1 安装 Lua
上传 lua-5.3.6.tar.gz 到服务器,并查看当前目录文件:
[root@haproxycluster153 ~]# ls -lhrt
total 3.1M
-rw——-. 1 root root 1.5K Apr 11 11:00 anaconda-ks.cfg
-rw-r–r– 1 root root 2.8M Jun 16 02:30 haproxy-2.2.14.tar.gz
-rw-r–r– 1 root root 297K Jun 16 02:30 lua-5.3.6.tar.gz
解压 Lua 源码包并进入目录:
[root@haproxycluster153 ~]# tar xf lua-5.3.6.tar.gz
[root@haproxycluster153 ~]# cd lua-5.3.6
编译并安装 Lua 到 /usr/local/lua:
make linux ; echo $?
make install INSTALL_TOP=/usr/local/lua ; echo $?
2.2 验证 Lua 安装
检查安装目录及版本信息:
ll /usr/local/lua/
ll /usr/local/lua/bin/lua
/usr/local/lua/bin/lua -v

3. 安装 HAProxy
3.1 编译 HAProxy
解压 HAProxy 源码包并进入目录:
[root@haproxycluster153 ~]# tar xf haproxy-2.2.14.tar.gz
[root@haproxycluster153 ~]# cd haproxy-2.2.14
[root@haproxycluster153 haproxy-2.2.14]#
执行编译命令(启用 OpenSSL、ZLIB、Lua、PCRE 及 systemd 支持):
make -j $(nproc) TARGET=linux-glibc \\
USE_OPENSSL=1 \\
USE_ZLIB=1 \\
USE_LUA=1 \\
LUA_LIB=/usr/local/lua/lib/ \\
LUA_INC=/usr/local/lua/include/ \\
USE_PCRE=1 \\
USE_SYSTEMD=1 ; echo $?
3.2 安装 HAProxy
将编译好的 HAProxy 安装到指定目录:
make install PREFIX=/usr/local/haproxy ; echo $?
3.3 查看安装结果
检查安装目录下的文件:
ls -lhrt /usr/local/haproxy/

三、核心配置HAProxy集群
1. 创建服务脚本
cd /usr/local/haproxy/
cp -av /root/haproxy-2.2.14/examples/haproxy.init /etc/init.d/haproxy
chmod +700 /etc/init.d/haproxy
2. 优化执行文件路径
cp -av /usr/local/haproxy/sbin/haproxy /usr/sbin/
3. 创建运行HAProxy的用户
useradd haproxy -s /sbin/nologin
[root@haproxycluster153 ~]# id -u haproxy
1000
4. 配置HAProxy主配置文件
注意:配置文件中需要修改uid、gid以及后端Web服务器的IP地址。
[ ! -d /etc/haproxy ] && mkdir -pv /etc/haproxy
cat >/etc/haproxy/haproxy.cfg<<'EOF'
global
log 127.0.0.1 local0 info
maxconn 256
#chroot /usr/local/haproxy
uid 1000
gid 1000
daemon
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
option httpclose
option dontlognull
option forwardfor
option redispatch
option abortonclose
frontend http-in
bind *:80
default_backend servers
backend servers
option httpchk GET /index.html
balance roundrobin
server server1 192.168.30.154:80 check inter 2000 rise 2 fall 5
server server2 192.168.30.155:80 check inter 2000 rise 2 fall 5
EOF
5. 启动HAProxy服务
chkconfig –add /etc/init.d/haproxy
service haproxy start
6. 重启服务并检查状态
service haproxy restart
service haproxy status
ps aux | grep haproxy

7. 开启HAProxy统计页面
7.1 在配置文件中添加统计页面配置
编辑HAProxy配置文件,添加统计页面监听配置:
# vim /etc/haproxy/haproxy.cfg
listen stats
mode http
bind 0.0.0.0:9999
stats enable
log global
stats uri /status
stats auth haadmin:123com
7.2 查看完整配置文件
添加配置后,完整的配置文件内容如下:
vim /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local0 info
maxconn 256
#chroot /usr/local/haproxy
uid 1000
gid 1000
daemon
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
option httpclose
option dontlognull
option forwardfor
option redispatch
option abortonclose
# add haproxy status
listen stats
mode http
bind 0.0.0.0:9999
stats enable
log global
stats uri /status
stats auth haadmin:123com
frontend http-in
bind *:80
default_backend servers
backend servers
option httpchk GET /index.html
balance roundrobin
server server1 192.168.30.154:80 check inter 2000 rise 2 fall 5
server server2 192.168.30.155:80 check inter 2000 rise 2 fall 5
# check inter 2000 # 表示HAProxy服务器和节点之间的心跳频率(单位:毫秒)
# rise 2 # 表示连续两次心跳检测成功则认为节点可用
# fall 3 # 表示连续三次心跳检测失败则认为节点失效
7.3 重启服务使配置生效
service haproxy restart
7.4 测试统计页面访问
在浏览器中访问统计页面:
http://<haproxy-ip>:9999/status
请将 <haproxy-ip> 替换为您的HAProxy服务器实际IP地址。
输入认证信息:
- 用户名:haadmin
- 密码:123com
成功登录后,您将看到HAProxy的实时运行状态和统计信息页面。

四、配置后端 Web 服务器
配置 Web1 容器(192.168.30.154)
1. 安装 Nginx
yum install -y nginx
2. 启动并设置开机自启
systemctl start nginx
systemctl enable nginx
3. 自定义 HTML 页面
创建测试页面以区分后端服务器:
cat > /usr/share/nginx/html/index.html << 'EOF'
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>Web Server 154</title>
<style>
body {
text-align: center;
font-family: Arial;
background-color: #f2f2f2;
}
h1 {
color: #d9534f;
}
img {
width: 400px;
margin: 20px;
border: 2px solid #333;
}
</style>
</head>
<body>
<h1>Web Server 1 – 192.168.30.154</h1>
<p>HAProxy 负载均衡测试页面</p>
<!– 本地图片引用 –>
<img src="./001.jpg" alt="Image 1">
<img src="./002.jpg" alt="Image 2">
<!– 如果没有本地图片,用下面的 –>
<!–
<img src="https://picsum.photos/400/300?random=1">
<img src="https://picsum.photos/400/300?random=2">
–>
</body>
</html>
EOF
4. 测试访问
通过 HAProxy 服务器(192.168.30.153)访问,验证页面是否正常显示:
http://192.168.30.153
配置 Web2 容器(192.168.30.155)
1. 安装 Nginx
yum install -y nginx
2. 启动并设置开机自启
systemctl start nginx
systemctl enable nginx
3. 自定义 HTML 页面
创建另一个测试页面以区分服务器:
cat > /usr/share/nginx/html/index.html << 'EOF'
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>Web Server 155</title>
<style>
body {
text-align: center;
font-family: Arial;
background-color: #f2f2f2;
}
h1 {
color: #d9534f;
}
img {
width: 400px;
margin: 20px;
border: 2px solid #333;
}
</style>
</head>
<body>
<h1>Web Server 2 – 192.168.30.155</h1>
<p>HAProxy 负载均衡测试页面</p>
<!– 本地图片引用 –>
<img src="./001.jpg" alt="Image 1">
<img src="./002.jpg" alt="Image 2">
<!– 如果没有本地图片,用下面的 –>
<!–
<img src="https://picsum.photos/400/300?random=1">
<img src="https://picsum.photos/400/300?random=2">
–>
</body>
</html>
EOF
4. 测试访问
同样通过 HAProxy 服务器访问,验证第二个后端服务器页面:
http://192.168.30.153
多次刷新(按 F5 或 Ctrl+F5)观察页面变化,验证负载均衡是否生效。
五、配置 NFS 服务器
1. 安装 NFS 服务
执行以下命令安装 NFS 服务所需的软件包:
yum install -y nfs-utils rpcbind
2. 创建共享目录
创建用于存放 Nginx 图片文件的共享目录:
mkdir -p /data/nginx_images
3. 准备图片文件并设置权限
3.1 放入图片文件
将图片文件放入共享目录,并查看目录内容:
ll /data/nginx_images

3.2 创建 Nginx 用户并设置权限
为确保 Nginx 进程能够正常访问文件,需要创建 Nginx 用户并设置相应的目录权限:
# 创建 Nginx 系统用户(无家目录,禁止登录)
useradd -r -s /sbin/nologin nginx
# 将目录所有权授予 Nginx 用户和组
chown -R nginx:nginx /data/nginx_images
# 设置目录权限为 755(所有者可读写执行,组和其他用户可读执行)
chmod -R 755 /data/nginx_images
4. 配置 NFS 共享
编辑 NFS 配置文件 /etc/exports,定义共享目录和访问权限:
vim /etc/exports
在文件中添加以下配置:
/data/nginx_images 192.168.30.154(rw,sync,no_root_squash) 192.168.30.155(rw,sync,no_root_squash)
5. 启动服务并设置开机自启
启动 NFS 相关服务,并设置为开机自动启动:
# 启动 rpcbind 服务(NFS 依赖此服务)
systemctl start rpcbind
# 启动 NFS 服务
systemctl start nfs-server
# 设置 rpcbind 开机自启
systemctl enable rpcbind
# 设置 NFS 服务开机自启
systemctl enable nfs-server
6. 验证共享配置是否生效
执行以下命令验证 NFS 共享配置是否已正确生效:
exportfs -v

六、在两台 Nginx 服务器上挂载 NFS
1. 安装 NFS 客户端工具
在两台 Nginx 服务器上安装 NFS 客户端软件包:
yum install -y nfs-utils
2. 创建本地挂载点
在每台 Nginx 服务器上创建用于挂载 NFS 共享的本地目录:
mkdir -p /usr/share/nginx/html/images
3. 手动挂载测试
执行挂载命令,测试 NFS 共享是否可正常访问:
mount -t nfs 192.168.30.156:/data/nginx_images /usr/share/nginx/html/images
注意:如果挂载命令长时间无响应,通常表示网络或配置存在问题。请检查防火墙是否已关闭或已放行 NFS 相关端口。
4. 验证挂载是否成功
查看挂载点目录内容,确认 NFS 共享已成功挂载:
ls /usr/share/nginx/html/images/
![]()
5. 设置开机自动挂载
将挂载配置写入 /etc/fstab 文件,实现系统启动时自动挂载:
echo "192.168.30.156:/data/nginx_images /usr/share/nginx/html/images nfs defaults,_netdev 0 0" >> /etc/fstab
6. 重启 Nginx 服务
重启 Nginx 服务,确保服务能够识别新挂载的目录:
systemctl restart nginx
7. 修改 HTML 代码引用路径
此时,两台 Nginx 服务器的 /usr/share/nginx/html/images/ 目录均已指向同一个 NFS 共享目录。接下来需要修改每台服务器的 HTML 文件,正确引用图片路径。
7.1 修改 Nginx1 的 index.html
编辑 Nginx1 的 /usr/share/nginx/html/index.html 文件,添加或修改图片引用:
<img src="./images/1.1.png" alt="Image 1">
<img src="./images/1.2.png" alt="Image 2">

7.2 修改 Nginx2 的 index.html
编辑 Nginx2 的 /usr/share/nginx/html/index.html 文件,添加或修改图片引用:
<img src="./images/2.1.png" alt="Image 1">
<img src="./images/2.2.png" alt="Image 2">

8. 测试页面显示
完成以上配置后,进行页面访问测试:


七、HAProxy 日志配置
HAProxy 支持通过 rsyslog 将日志记录到指定的设备,便于集中管理和分析。
1. 备份配置文件
在进行配置修改前,建议先备份原始配置文件:
cp -av /etc/haproxy/haproxy.cfg /opt/haproxy/haproxy_cfg_v1.1.1
2. 配置 HAProxy 日志
编辑 HAProxy 主配置文件:
vim /etc/haproxy/haproxy.cfg
在配置文件中添加或修改以下内容:
global
# 日志核心配置
# 日志发送到本地 rsyslog 服务;使用 local0 日志设施;日志级别为 info 及以上
# 日志级别从低到高:debug < info < notice < warning < error < critical
# info 级别:记录所有正常请求、健康检查、连接事件;深度排错时可改为 debug
log 127.0.0.1 local0 info
# 进程与权限配置
maxconn 10240 # 最大并发连接数
uid 1000 # 运行 HAProxy 的系统用户
gid 1000 # 运行 HAProxy 的系统组
daemon # 接受 systemd/sysv 托管时必须注释
pidfile /var/run/haproxy.pid # PID 文件路径
nbproc 1 # 工作进程数
defaults
# 默认配置段 defaults
log global # 继承全局日志配置
mode http # 工作模式:http 七层代理
option httplog # 开启详细 HTTP 请求日志
option dontlognull # 不记录空连接,减少无效日志
option forwardfor # 向后端传递客户端真实 IP
option redispatch # 节点故障时自动重定向到健康节点
option abortonclose # 客户端断开时立即释放后端连接
option http-server-close # 服务端主动关闭连接,兼容长连接
option log-health-checks # 记录健康检查状态变更日志
# 超时配置
timeout connect 5s # 与后端建立 TCP 连接超时时间
timeout client 50s # 客户端空闲超时时间
timeout server 50s # 后端服务器响应超时时间
timeout http-request 10s # 客户端发送完整 HTTP 请求超时时间
timeout queue 1m # 请求在队列中等待的最长时间
# — 监控页面部分 (独立出来,互不干扰) —
listen stats
mode http
bind 0.0.0.0:9999 # 监控页面监听端口
stats enable # 开启状态统计
stats uri /status # 监控页面路径
stats auth haadmin:123com # 监控页面登录密码
stats refresh 30s # 页面自动刷新间隔
stats admin if TRUE # 开启管理权限,可手动上下线节点
log global # 继承全局日志配置
# — 前端监听部分 (负责接收用户请求) —
frontend http_front
bind *:80 # 监听 80 端口
default_backend servers # 将流量转发给名为 servers 的后端组
# — 后端服务器部分 (负责实际处理请求) —
backend servers
balance roundrobin # 调度算法:加权轮询
option httpchk GET /index.html # HTTP 健康检查,检测 index.html
# 健康检查参数:check 开启检查;inter 间隔 2 秒;rise 2 次成功判定可用;fail 5 次失败判定故障
server server1 192.168.30.154:80 check inter 2000 rise 2 fall 5 weight 1
server server2 192.168.30.155:80 check inter 2000 rise 2 fall 5 weight 1
配置完成后,检查语法是否正确:
haproxy -c -f /etc/haproxy/haproxy.cfg

3. 安装 rsyslog
在服务器上安装 rsyslog 服务:
yum -y install rsyslog
4. 配置 rsyslog
创建并编辑 HAProxy 专用的 rsyslog 配置文件:
vim /etc/rsyslog.d/haproxy.conf
添加以下配置内容:
# 1. 开启本地 UDP 514 端口监听 (HAProxy 默认通过 UDP 发送 rsyslog 日志)
# 仅绑定 127.0.0.1,避免对外暴露端口,提升安全性
$ModLoad imudp
$UDPServerAddress 127.0.0.1
$UDPServerRun 514
# 2. 配置 HAProxy 日志输出规则
# 匹配 local0 设施的所有等级日志,输出到指定日志文件
# & ~ 表示此配置后不再传递给其他日志规则,避免同时写入 /var/log/messages
local0.* /var/log/haproxy/haproxy.log
# 可选:分离警告及以上错误日志到单独文件,方便快速排查故障
#& ~
#local0.warning /var/log/haproxy/haproxy_error.log
#& ~
5. 启动 rsyslog 服务
重启 rsyslog 服务使配置生效,并验证端口监听状态:
systemctl restart rsyslog
ss -tulanp | grep rsyslog

6. 创建日志目录
创建 HAProxy 日志存储目录:
mkdir -pv /var/log/haproxy/
7. 查看日志
实时查看 HAProxy 日志输出,验证配置是否生效:
tail -f /var/log/haproxy/haproxy.log

检验与测试
访问方式
您可以通过以下地址访问结果样式图的预览页面:
-
主预览地址:http://192.168.30.153:9999/
- 该地址提供了完整的预览功能,包括样式切换、组件示例、实时效果对比等。
- 推荐在 Chrome、Edge 等现代浏览器中打开,以获得最佳体验。

-
备用访问地址:http://192.168.30.153
- 当主地址因端口或网络限制无法访问时,可使用此备用地址。
- 备用地址可能缺少部分高级功能,但核心样式预览功能保持完整。

Haproxy排除思路与查看日志
1. HAProxy 故障排除通用思路
遵循结构化的排查步骤,可以避免在复杂问题中迷失方向。
现象确认与影响评估
- 明确症状:准确描述问题现象,例如:“用户访问网站返回 503 错误”、“部分后端服务器健康检查失败”、“新配置发布后流量没有按预期分发”。
- 确定范围:判断是全局性故障(所有用户受影响)还是局部问题(特定地域、特定URL、特定客户端)。检查监控大盘,确认故障开始时间。
信息收集与初步假设
- 收集上下文:记录故障时间点、影响的 VIP(虚拟IP)或域名、客户端IP、相关的业务变更(如最近的配置发布、服务器扩容/下线)。
- 检查 HAProxy 状态:
- 使用 systemctl status haproxy 或 service haproxy status 检查进程是否在运行。
- 通过 HAProxy 的统计页面(如 http://<haproxy-ip>:<stats-port>/haproxy?stats)或 echo “show info” | sudo socat stdio /var/run/haproxy.sock 命令,查看运行状态、连接数、会话率等关键指标。
- 提出假设:基于现象,提出可能的原因,例如:“后端服务器池全部宕机”、“ACL规则匹配错误导致流量被阻断”、“SSL证书过期”。
分层深入排查
- 客户端/网络层:从客户端模拟请求,使用 curl -v 或 telnet 检查是否能连接到 HAProxy 的监听端口,网络链路是否通畅。
- HAProxy 配置层(核心):
- 语法检查:每次修改配置后,务必使用 haproxy -c -f /etc/haproxy/haproxy.cfg 验证配置文件语法。
- 配置回溯:对比当前配置与上一个稳定版本的配置,确认变更点。
- 重点检查:frontend/backend 定义、bind 端口、acl 规则、use_backend 指令、server 行定义(IP、端口、检查参数)、超时设置(timeout client, timeout server)。
- 后端服务层:
- 健康检查:确认 HAProxy 对后端服务器的健康检查(check)是否通过。在统计页面或使用 echo “show servers state” | sudo socat stdio /var/run/haproxy.sock 查看服务器状态(UP/DOWN)。
- 后端可达性:从 HAProxy 服务器本身,使用 telnet 或 curl 测试是否能直接访问后端服务器的服务端口。
- 后端性能:检查后端服务器自身的负载(CPU、内存、连接数)、应用日志是否有错误。
- 系统资源层:检查 HAProxy 所在主机的系统资源,如文件描述符限制(ulimit -n)、网络连接数、CPU和内存使用率。




