HAProxy 后端显示 status DOWN 表示健康检查连续失败达到配置阈值,导致流量被切断。修正配置需先确认后端服务可达,再调整 check 间隔与超时参数。
先说结论:状态 DOWN 意味着 HAProxy 无法在设定时间内收到后端的有效响应,需优先排查网络与服务状态。
- 先确认后端应用进程是否存活且监听端口正常
- 先处理防火墙或安全组是否拦截了检查请求
- 再验证 haproxy.cfg 中 inter、fall 与 timeout check 配置
命令速用版
# 查看 HAProxy 实时状态
echo "show stat" | socat stdio /var/run/haproxy.sock
# 测试后端端口连通性
curl -v http://后端 IP:端口/
# 检查配置文件语法
haproxy -c -f /etc/haproxy/haproxy.cfg
为什么会这样
HAProxy 标记后端为 DOWN 是因为健康检查失败次数超过了 fall 参数设定的阈值。
HAProxy 默认会按照配置的间隔(inter)向后端发送检查请求。如果后端没有在规定时间内响应,或者返回了不符合预期的状态码,检查计为失败。当连续失败次数达到 fall 设定值,HAProxy 将该后端状态置为 DOWN,不再转发流量。常见原因包括后端服务崩溃、端口未监听、网络防火墙拦截、检查路径配置错误或 SSL 协议不匹配。
分步处理
按以下顺序排查并修正配置,每一步完成后观察状态变化。
1. 确认后端服务状态
登录后端服务器,检查应用进程是否运行,端口是否监听。
命令示例:ss -tlnp | grep 端口号。
如果端口未监听,需启动后端应用。
2. 检查网络连通性
在 HAProxy 服务器上直接 curl 后端地址,确认能否通。
命令示例:curl -I http://后端 IP:端口/健康检查路径。
如果无法连通,检查服务器防火墙(iptables/firewalld)或云厂商安全组规则,确保 HAProxy 服务器 IP 被允许访问后端端口。
3. 调整健康检查配置
编辑 /etc/haproxy/haproxy.cfg,找到 backend 段落。
若检查过于频繁导致误判,增大 inter 值(单位毫秒)。
若允许更多失败次数,增大 fall 值。
若响应慢,增大 timeout check。
配置示例:option httpchk GET /health
http-check expect status 200
server web1 192.168.1.10:80 check inter 2000 fall 3 rise 2 timeout check 5s
4. 重载配置
语法检查通过后重载服务。
命令示例:systemctl reload haproxy 或 service haproxy reload。
怎么验证是否生效
执行状态查询命令,观察后端状态列是否变为 UP。
echo "show stat" | socat stdio /var/run/haproxy.sock | cut -d',' -f1,2,18
查看 HAProxy 日志,确认不再有检查失败报错。日志通常位于 /var/log/haproxy.log 或通过 journalctl -u haproxy 查看。
如果状态列显示 UP 且日志无连续错误,表示修正生效。
常见坑
- SSL 不匹配:后端是 HTTPS 但配置未加
ssl关键字,导致握手失败。 - 检查路径错误:配置了
option httpchk但路径返回 404,需确保路径存在且返回 200。 - 超时过短:后端业务逻辑耗时超过
timeout check,导致检查被判定为超时失败。 - 源地址限制:后端应用限制了只允许特定 IP 访问,未将 HAProxy 服务器 IP 加入白名单。
常见问题
为什么后端刚启动就显示 DOWN?
因为健康检查需要连续成功 rise 次才会标记为 UP。
HAProxy 防止抖动,默认需要连续成功多次才恢复流量。如果刚启动,需等待 rise 设定的次数完成后状态才会变绿。
如何临时禁用健康检查?
在 server 行末尾去掉 check 参数即可。
移除配置中的 check 关键字,HAProxy 将不再对该后端执行主动健康检查,但也就无法自动剔除故障节点。
status DOWN 和 status MAINT 有什么区别?
DOWN 是自动检测失败,MAINT 是手动维护模式。
DOWN 表示健康检查未通过,流量自动切断。MAINT 表示管理员手动将后端置于维护状态,通常用于发布更新,此时 HAProxy 不会发送健康检查。
参考来源
- HAProxy Technology, "HAProxy Configuration Manual", https://www.haproxy.com/documentation/