nginx

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > nginx > Nginx后端节点健康检查

Nginx后端节点健康检查实践

作者:东北甜妹

文章介绍了Nginx健康检查的重要性及其ginx自带健康检查的机制及其不足,并详细介绍了淘宝开发的check模块的配置方法及其优势,最后,针对不同ginx原ginx自带模块和Tengine给出了适用场景建议

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

想象一下,你是一个前台接待员(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页面)
配置灵活度一般

一句话总结:

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文