首页/网络/网络排障速查/负载均衡健康检查与真实源 IP 排查

负载均衡健康检查与真实源 IP 排查

后端『时而有时而无』的故障常出在健康检查:检查路径/端口不对、阈值太敏感、或真实源 IP 被 NAT 掉导致后端日志看不到客户端。

网络排障速查网络更新于 2026-10-13

健康检查为什么会引发故障

后端出现「时好时坏、部分请求 502」时,问题往往出在负载均衡的健康检查而不是后端整体:检查路径或端口配错、阈值过于敏感(一次探测失败就摘除)、检查频率过高把慢启动的服务打挂。另一类高频问题是真实源 IP:四层转发会改写源地址,后端日志里只能看到负载均衡的地址,需要靠 X-Forwarded-For 或代理协议来透传。

基本信息

适用组件Nginx upstream、HAProxy、云 SLB/CLB、K8s readinessProbe
检查项检查间隔、超时、健康与不健康阈值、检查路径与端口、协议
源 IP 透传七层用 X-Forwarded-For,四层需代理协议或会话保留(RFC 7239 定义 Forwarded 头)
后端配合Nginx 需 real_ip 模块与可信代理配置才能取到真实客户端地址
观测入口负载均衡侧健康状态 + 后端实例日志分实例统计

典型使用场景

  • 排查「部分请求 502」:先按后端实例维度拆分日志,确认是否集中在单个节点
  • 健康检查频繁摘除节点:核对检查路径是否真的能反映应用可用性
  • 后端日志里全是负载均衡地址:确认源 IP 透传配置是否正确
  • 服务发布后短暂不可用:确认摘除与恢复阈值是否适合慢启动的应用
  • 健康检查把服务打挂:评估探测频率与并发对后端的额外压力

核对与验证

核对与验证
# 从后端视角模拟健康检查(在每台后端上分别执行)
curl -v --connect-timeout 2 http://127.0.0.1:8080/healthz
# 后端日志里确认真实源 IP 是否透传
tail -f /var/log/nginx/access.log | head -20
# 分实例统计错误:确认问题是否集中在某台后端
for f in /var/log/nginx/access.log; do awk '{print $1}' $f | sort | uniq -c | sort -rn | head; done
# 检查配置里的探测参数(以 Nginx 为例)
# upstream backend { server 10.0.0.5:8080 max_fails=3 fail_timeout=30s; }

检查项与常见坑

检查项正常做法常见坑
检查路径使用能反映依赖状态的专用接口只探测静态页,依赖已挂仍判健康
检查类型七层检查可发现应用错误仅 TCP 端口检查,应用返回 500 仍算健康
健康阈值连续失败 N 次再摘除一次失败立即摘除,网络抖动即引发抖动式切换
检查间隔与频率间隔与超时匹配业务响应时间频率过高把慢启动服务打挂
源 IP 透传七层用 XFF,四层用代理协议从未配置,后端风控与限流全部失效
排查「部分请求正常、部分 502」时,先按后端实例维度拆分日志:问题通常集中在某一台节点上,而不是负载均衡整体故障。

易错点

  • 健康检查通过就认为后端健康:端口通不等于业务接口可用,依赖故障时仍会被判为健康
  • 阈值设置过敏感:一次探测失败就摘除节点,网络轻微抖动引发反复切换,故障面被放大
  • 只看负载均衡的监控不看后端日志:漏掉单实例异常这一最常见原因
  • 不配置源 IP 透传:后端风控、限流与日志审计全部基于错误来源,安全与统计同时失效

数据来源与参考

  • nginx 文档:ngx_http_proxy_module(real_ip/forwarded)
  • RFC 7239:Forwarded 头

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌