Myluzh Blog

Nginx健康检查(被动检查、主动检查)

发布时间: 2023-12-15 文章作者: myluzh 分类名称: Nginx 朗读文章


0x01 被动检查
通过自带健康检查模块ngx_http_upstream_module实现,当收到访问时才对后端发起探测,请求根据转发规则首次可能落到不可用节点,如多个节点故障则可能出现转发多台后才将请求转到正常的服务,在高并发的时候影响转发效率。

被动健康检查关键参数max_fails与fail_timeout,描述如下:
max_fails:在配置的fail_timeout期间,最大的连接错误数,默认配置为1,如配置为0则表示不启用探测,不管后端服务是否异常仍然会转发,单位次数
fail_timeout:服务被认为不可用的的时间,单位为s

如下配置:在120s内中如果有15次连接失败,则表示该节点不可用,将该节点下线120s后才会再次探测
root@iZbp12bkuvg20e1j3y9gtvZ:/etc/nginx/conf.d# cat prd-all.conf 
upstream prd-nginx-server { server 172.30.82.213:80 max_fails=5 fail_timeout=120s;
      server 172.30.172.135:80 max_fails=5 fail_timeout=120s;
      server 172.29.241.160:80 max_fails=5 fail_timeout=120s; keepalive 10;
      keepalive_requests 100;
}
server {
      listen 80;
      server_name *.sxhlcloud.com;
      client_max_body_size 10m;
      location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass  http://prd-nginx-server/;
      }
}

0x02 主动检查
通过nginx_upstream_check_module模块实现,官方nginx暂未加载该模块,需要自行编译。主动对后端服务发起探测,如后端服务不可用,则不转发。后端服务恢复后,则主动添加进负载。

主动探测关键参数interval、rise、fall、timeout、type、check_http_send、check_http_expect_alive:
interval:健康检查时间,单位ms
rise:检查成功次数,达到该值则认为服务正常,加入负载
fall:检查失败次数,达到该值则认为服务异常,剔除下线
timeout:检查超时时间,单位ms
type:检查类型,支持tcp/http等多种协议类型
check_http_send:http探测发送的请求,支持自定义接口,默认:"GET / HTTP/1.0\r\n\r\n"
check_http_expect_alive:http探测状态码,除了该配置上的其他状态码均认为服务不可用

如下配置:每1s发起主动探测,如出现1次失败,则认为该节点不可用,剔除下线,检验返回码2xx/3xx则认为服务可用。
upstream prd-nginx-server { server 172.30.82.213:80;
      server 172.30.172.135:80;
      check interval=1000 rise=1 fall=1 timeout=1000 type=http default_down=false;
      check_http_send "GET / HTTP/1.0\r\n\r\n";
      check_http_expect_alive http_2xx http_3xx; }
server {
      listen 80;
      server_name *.sxhlcloud.com;
      client_max_body_size 10m;
      location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass  http://prd-nginx-server/;
      }
}

标签: nginx 健康检查 主动检查 被动检查

发表评论