Plainnotes

上游摘除:健康检查和负载均衡不是一回事

2024-05-27 · 3 分钟部署

一台上游挂了,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 才会摘除。只检查进程活着的健康检查,等于没有。