关键在于配置“感知状态+执行动作”的健康检查机制,即通过探测→判定→屏蔽→试探→恢复闭环实现自动隔离与重接入,需按协议选TCP/HTTP检查、合理设阈值与间隔,并确保网络可达。

要让负载均衡在后端节点异常时自动隔离、恢复时自动重新接入,关键不是靠人工干预,而是配置一套能“感知状态+执行动作”的健康检查机制。不同平台实现方式略有差异,但核心逻辑一致:探测 → 判定 → 屏蔽 → 试探 → 恢复。
明确健康检查类型与适用场景
根据后端服务协议和可观测需求选择检查方式:
- TCP 检查:只验证端口是否监听(三次握手成功),开销最小,适合通用 TCP 服务或仅需确认进程存活的场景;
-
HTTP/HTTPS 检查:发送 HEAD 或 GET 请求,校验返回状态码(默认仅 2XX/3XX 视为健康),适合 Web 应用,建议单独提供
/health接口并固定返回 200; - 避免误配:不要把 4XX(如 404、429)或 5XX(如 500、503)加入健康状态码范围,否则会掩盖真实故障。
配置关键判定参数防止误剔或迟滞
健康检查不是越敏感越好,需平衡稳定性与响应速度:
- 健康阈值(Healthy Threshold):连续成功多少次才认为节点恢复?建议设为 2~3 次,避免单次网络抖动导致误判;
- 不健康阈值(Unhealthy Threshold):连续失败多少次才踢出?建议设为 2~3 次,太低易误杀,太高延迟隔离;
- 检查间隔(Interval):通常设为 5~10 秒,过短增加后端压力,过长影响故障发现时效;
- 超时时间(Timeout):单次探测等待响应时长,应略大于后端正常响应耗时,一般 3~5 秒为宜。
确保探测请求能真正抵达后端
健康检查失败,80% 情况不是服务问题,而是网络策略拦截:
- 确认后端服务器安全组/ACL 入方向放行健康检查源 IP —— 阿里云 CLB 默认使用 100.64.0.0/10 网段,不是负载均衡 VIP;
- 若后端在 IDC 或混合云环境,还需检查防火墙、SNAT 设备是否放通该源网段;
- HTTP 检查时,确认后端服务监听了健康检查端口,并能响应指定路径(如
/health)和域名(如设置了 Host 头)。
Nginx 自建场景需补充被动容错策略
开源 Nginx 不支持主动探测,依赖被动检查,必须配合以下配置才能实现“自动隔离”效果:
- 在
upstream块中为每个 server 设置max_fails=2 fail_timeout=30s,表示 30 秒内失败 2 次即标记不可用,30 秒后重试; - 全局启用
proxy_next_upstream error timeout http_500;,确保 upstream 出现错误时自动换节点重试,而非直接报错; - 搭配
max_conns限制单节点并发连接数,防止某台机器因连接堆积而雪崩,间接提升整体稳定性。

















