上游摘除:健康检查和负载均衡不是一回事
一台上游挂了,nginx 还在往上打流量,直到 max_fails 次失败才摘除。默认 max_fails=1、fail_timeout=10s,意味着失败一次后 10 秒内不再尝试——这个默认值对低频服务够用,对高频服务会放大故障。
主动健康检查要商业版或者 OpenResty。开源版只能靠被动标记,加上:
upstream app {
server 10.0.1.5:8080 max_fails=3 fail_timeout=30s;
server 10.0.1.6:8080 max_fails=3 fail_timeout=30s;
}
注意 fail_timeout 同时是“摘除时长”和“统计窗口”,语义容易混。
健康检查端点要检查依赖,别只返回 200。数据库连不上时,应用应该让 /healthz 返回 503,nginx 才会摘除。只检查进程活着的健康检查,等于没有。