服务器 > 服务器 > 缓存

Nginx后端节点健康检查实践

24人参与 2026-04-16 缓存

一、先说结论:为什么要做健康检查?

想象一下,你是一个前台接待员(nginx),后面有三个办公室(后端服务器)处理业务。

如果有间办公室着火了,你还在不停地往那间办公室派人,结果人又跑回来告诉你去不了,这不就浪费了时间吗?

健康检查的目的就是:及时发现哪间办公室出问题了,暂时别往那里派人,等修好了再恢复。

二、nginx自带的“基础版”健康检查

1. 默认配置是什么样?

nginx最基础的配置长这样:

upstream myapp1 {
    server srv1.example.com;
    server srv2.example.com;
    server srv3.example.com;
}

但其实默认背后隐藏着这些参数:

upstream myapp1 {
    server srv1.example.com weight=1 max_fails=1 fail_timeout=10;
    server srv2.example.com weight=1 max_fails=1 fail_timeout=10;
    server srv3.example.com weight=1 max_fails=1 fail_timeout=10;
}

2. 自带健康检查怎么工作?

有两个关键机制:

① 故障转移(proxy_next_upstream)

② 健康检查(max_fails + fail_timeout)

3. 自带模块有什么问题?

举个生活中的例子:

总结缺点:

三、淘宝的“进阶版”健康检查

1. 这是什么?

淘宝团队开发了一个专门的模块:nginx_upstream_check_module,可以更智能地做健康检查。

在tengine(淘宝的nginx版本)里自带这个功能,普通nginx需要打补丁安装。

2. 配置示例

upstream cluster {
    server 192.168.0.1:80;
    server 192.168.0.2:80;
    # 重点在这里:主动健康检查
    check interval=5000 rise=1 fall=3 timeout=4000 type=http;
    check_http_send "head / http/1.0\r\n\r\n";
    check_http_expect_alive http_2xx http_3xx;
}

3. 参数都是什么意思?

4. 进阶版好在哪?

还是那个例子:

优势:

四、还可以直接使用tengine

如果不想打补丁,可以直接安装淘宝的tengine:

./configure --prefix=/usr/local/tengine --add-module=/path/to/ngx_http_upstream_check_module

配置是一样的,而且更稳定。

五、总结对比

对比项nginx原生淘宝check模块
检查方式被动(靠用户请求触发)主动(定时检查)
发现问题的速度慢(等超时)快(几秒内)
是否浪费请求会先发给坏节点完全避开坏节点
检查内容只能检查连接可检查具体页面
监控界面有(/status页面)
配置灵活度一般

一句话总结:

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

您想发表意见!!点此发布评论

推荐阅读

Nginx反向代理与缓存用法及说明

04-16

锐龙9 9950X3D2打出AMD最猛暴击! 双倍缓存X3D王者首发测评

04-24

缓存击穿中逻辑过期和单纯互斥锁的区别及说明

02-07

Nginx+Proxy_cache高速缓存配置

01-16

Nginx缓存清理实现方式

12-27

清空nginx缓存并强制刷新实现过程

12-27

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论