nginx主动检测被动监测

被动检测

Nginx 将请求传递给 Upstream Server处理时,默认会根据单位时间、失败次数,判定 Upstream Server 是否故障

相关参数:

  • fail_timeout
    • 该时间范围内,产生 max_fails 次数的失败后,Nginx 会认为该 Upstream Server 故障,并将其摘除相同的时间
    • 默认值:10s
  • max_fails
    • 失败的最大次数,设置为 0 则为不使用摘除逻辑
    • 默认值:1
    • 具体什么为失败,见 proxy_next_upstream
  • proxy_next_upstream
    • 指定何种什么情况下,Nginx 应将请求交给下一个 Upstream Server
    • 默认值:error、timeout
    • 其它可选值:invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | non_idempotent | off
  • 其它参数见 Nginx 文档:ngx_http_upstream_module

###

主动检测

Nginx 主动检测 Upstream Server 是否正常,需要安装淘宝的 nginx_upstream_check_module

检测方式:Nginx 定期检测 Upstream Server,可考虑以下方式

  • TCP:检测 Upstream Server 的 IP + 端口是否存活

  • HTTP:

    • HEAD:check_http_send "HEAD / HTTP/1.0\r\n\r\n";
    • GET:check_http_send "HEAD / HTTP/1.1\r\n Host: $host\r\n\r\n Connection: keep-alive\r\n\r\n";

    重要提示:当后端服务的HTTP协议版本为HTTP/1.1时,必须在请求头指定Host: foo.bar.com,否则健康检查会报check protocol http error with peer的错误而导致后端节点被下线,配置示例(长连接同理):

#tengine配置参考
check interval=3000 rise=2 fall=5 timeout=1000 type=http;
check_http_send "HEAD / HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;

"#check interval=3000 rise=2 fall=5 timeout=1000 type=http;" 
进行健康检查,检查的时间间隔为3000毫秒,当有2次连续成功时认为服务正常,
当有5次连续失败时认为服务不正常,超时时间为1000毫秒,检查类型为HTTP。


配置参考
  check interval=3000 rise=2 fall=3 timeout=1000 type=http;
  check_http_expect_alive http_2xx;
  
  check_http_send "GET / HTTP/1.1\r\nHOST:$host\r\n\r\nConnection:keep-alive\r\n\r\n";
  
  #check_http_send "HEAD / HTTP/1.0\r\n\r\n";
  
 一定注意check的格式,不能有空格等。否则健康检查会报check protocol http error with peer的错误而导致后端节点被下线。可以通过查看error日志查看到具体的信息。

被动检测nginx版本自带指令,主动检测需要安装扩展淘宝的 nginx_upstream_check_module

注意事项

nginx_upstream_check_module模块比较特殊,需要patch后在编译。同时patch注意对应的nginx版本。

模块路径:/opt/apps/nginx-module/nginx_upstream_check_module-0.4.0

⚠️手动打patch

cd /opt/soft/nginx/nginx
patch -p1 < /opt/apps/nginx-module/nginx_upstream_check_module-0.4.0/check_1.14.0+.patch

编译流程

编译机器

nginx源路径 /opt/soft/nginx/nginx

安装目录 /opt/apps_install/nginx

模块目录 /opt/apps/nginx-module

查看原nginx已有模块

nginx -V

新扩展模块

下载新模块,一定把之前有的模块都加全,不要有遗漏。

主动检测模块配置health-status

location /health-status
  {
  allow 192.168.0.0/16;
  allow 127.0.0.1;
  deny all;
  check_status;
  access_log off;
}

参考地址

Nginx系列:后端服务应用健康检测

nginx扩展nginx_upstream_check_module健康监测
tengine ngx_http_upstream_check_module模块


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!