前言

通过本文,简单了解原生模块和健康检查模块的优缺点
然后,希望让我劝你选择健康检查模块

Nginx健康检查模块安装

安装教程请绕道此处:Nginx使用upstream_check_module模块实现后端节点健康检查功能 另外,我的模块正确安装检验方式是:有nginx转发两台服务器,当其中一台服务器挂掉的情况下,nginx可以把情况都转发给健康的服务器。

注意:nginx.conf配置里需要加上proxy_next_upstream off;,这样可以防止nginx自主错误转发,引起“假验证成功”!

nginx开启健康检查 nginx健康检查模块_Nginx


nginx开启健康检查 nginx健康检查模块_服务器_02

原生模块与健康检查模块运行机制分析

nginx开启健康检查 nginx健康检查模块_nginx开启健康检查_03

ngx_http_upstream_module
健康检查方式

被动检查,通过统计最大容忍错误次数,标记该后端服务器不可用

举例
upstream name {

server 192.168.57.110:8080 max_fails=1 fail_timeout=10s;

server 192.168.57.101:8080 max_fails=1 fail_timeout=10s;

}
说明

server 192.168.57.110:8080 max_fails=1 fail_timeout=10s;该后端服务器最大错误1次,错误超时时间为10s。
通过指令proxy_next_upstream、fastcgi_next_upstream和 memcached_next_upstream来配置,可以使得,我们遇到不健康模块时,转发到下一台服务器。
这种情况Nginx无法主动识别后端节点状态,后端即使有不健康节点, 负载均衡器依然会先把该请求转发给该不健康节点,然后再转发给别的节点,这样就会浪费一次转发,而且自带模块无法做到预警。So 此时使用第三方模块 nginx_upstream_check_module模块

upstream_check_module
健康检查方式

主动探测,按设置的心跳时间,主动发起心跳。通过统计最大容忍错误次数,剔除该后端服务器

举例
upstream name {

server 192.168.57.207:8090;

server 192.168.57.85:80;

check interval=3000 rise=2 fall=5 timeout=1000 type=http;

}
参考

模块开发文档:戳我进

总结

我们知道,如果我们使用原生检查方式,遇到错误,不会隔离服务器,而是错误请求转发到健康机器上,而使用主动的健康检查模块,我们可以轻松剔除异常服务器,完全隔离掉风险的发生!