开源Linux

长按二维码加关注~

上一篇:盘点提高国内访问Github的速度的9种方案

服务治理的一个重要任务是感知服务节点变更,完成服务自动注册及异常节点的自动摘除。这就需要服务治理平台能够:及时、准确的感知service节点的健康状况。

方案概述

Nginx 提供了三种HTTP服务健康检查方案供用户选择:

  1. TCP层默认检查方案:

定时与后端服务建立一条tcp连接,链接建立成功则认为服务节点是健康的。

  1. HTTP层默认检查方案:

TCP层检查有一定的局限性:

  • 很多HTTP服务是带状态的,端口处于listen状态并不能代表服务已经完成预热;

  • 不能真实反映服务内部处理逻辑是否产生拥堵。

  • 这时可以选择http层健康检查,会向服务发送一个http请求GET / HTTP/1.0\r\n\r\n,返回状态是2xx或3xx时认为后端服务正常。

  1. 自定义方案:

可根据下文描述自定义检查方案。

配置参数详解

一个常用的健康检查配置如下:

check fall=3 interval=3000 rise=2 timeout=2000 type=http;
check_http_expect_alive http_2xx http_3xx ;
check_http_send "GET /checkAlive HTTP/1.0\r\n\r\n" ;

下面针对每个配置参数,进行详细介绍。

check:

check 字段参数如下:

Syntax: check interval=milliseconds [fall=count] [rise=count] [timeout=milliseconds] [default_down=true|false] [type=tcp|http|ssl_hello|mysql|ajp] [port=check_port]
Default: 如果没有配置参数,默认值是:interval=30000 fall=5 rise=2 timeout=1000 default_down=true type=tcp

check 字段各个参数含义如下:

  • interval:向后端发送的健康检查包的间隔。

  • fall(fall_count): 如果连续失败次数达到fall_count,服务器就被认为是down。

  • rise(rise_count): 如果连续成功次数达到rise_count,服务器就被认为是up。

  • timeout: 后端健康请求的超时时间。

  • default_down: 设定初始时服务器的状态,如果是true,就说明默认是down的,如果是false,就是up的。默认值是true,也就是一开始服务器认为是不可用,要等健康检查包达到一定成功次数以后才会被认为是健康的。

  • type:健康检查包的类型,现在支持以下多种类型

    • tcp:简单的tcp连接,如果连接成功,就说明后端正常。

    • ssl_hello:发送一个初始的SSL hello包并接受服务器的SSL hello包。

    • http:发送HTTP请求,通过后端的回复包的状态来判断后端是否存活。mysql: 向mysql服务器连接,通过接收服务器的greeting包来判断后端是否存活。

    • ajp:向后端发送AJP协议的Cping包,通过接收Cpong包来判断后端是否存活。

    • port: 指定后端服务器的检查端口。可以指定不同于真实服务的后端服务器的端口,比如后端提供的是443端口的应用,你可以去检查80端口的状态来判断后端健康状况。默认是0,表示跟后端server提供真实服务的端口一样。

check_http_expect_alive:

check_http_expect_alive 指定主动健康检查时HTTP回复的成功状态:

Syntax: check_http_expect_alive [ http_2xx | http_3xx | http_4xx | http_5xx ]
Default: http_2xx | http_3xx

check_http_send:

check_http_send 配置http健康检查包发送的请求内容

为了减少传输数据量,推荐采用”HEAD”方法。当采用长连接进行健康检查时,需在该指令中添加keep-alive请求头,如:”HEAD / HTTP/1.1\r\nConnection: keep-alive\r\n\r\n”。同时,在采用”GET”方法的情况下,请求uri的size不宜过大,确保可以在1个interval内传输完成,否则会被健康检查模块视为后端服务器或网络异常。

Syntax: check_http_send http_packet
Default: "GET / HTTP/1.0\r\n\r\n"

完整示例

完整示例,如下:

http {
    upstream cluster1 {
        # simple round-robin
        server 192.168.0.1:80;
        server 192.168.0.2:80;
        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;
    }
    upstream cluster2 {
        # simple round-robin
        server 192.168.0.3:80;
        server 192.168.0.4:80;
        check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        check_keepalive_requests 100;
        check_http_send "HEAD / HTTP/1.1\r\nConnection: keep-alive\r\n\r\n";
        check_http_expect_alive http_2xx http_3xx;
    }
    server {
        listen 80;
        location /1 {
            proxy_pass http://cluster1;
        }
        location /2 {
            proxy_pass http://cluster2;
        }
        location /status {
            check_status;
            access_log   off;
            allow SOME.IP.ADD.RESS;
            deny all;
        }
    }
}

来源:https://ningg.top/nginx-series-health-check/

- End -
关注「开源Linux」加星标,提升IT技能

Nginx实战|Nginx健康检查的更多相关文章

  1. nginx限流&健康检查

    Nginx原生限流模块: ngx_http_limit_conn_module模块 根据前端请求域名或ip生成一个key,对于每个key对应的网络连接数进行限制. 配置如下: http模块   ser ...

  2. nginx后端节点健康检查

    一.nginx健康检查的三种方式 .ngx_http_proxy_module 模块和ngx_http_upstream_module模块(自带) 官网地址:http://nginx.org/en/d ...

  3. [Nginx]实战Nginx:Nginx的一些介绍

    ------------------------------------------------------------------------------------------------ 首先列 ...

  4. [Nginx]实战Nginx:Nginx服务器的安装与配置

    ----------------------------------------------------------------------------------------------- Ngin ...

  5. consul集群搭建,配合nginx完成服务动态发现和健康检查

    1.概述 1.1 介绍 consul是一个服务发现和配置共享的服务软件,结合nginx的主动健康检查模块nginx_upstream_check_module和服务发现模块nginx-upsync-m ...

  6. Nginx负载均衡中后端节点服务器健康检查的操作梳理

    正常情况下,nginx做反向代理,如果后端节点服务器宕掉的话,nginx默认是不能把这台realserver踢出upstream负载集群的,所以还会有请求转发到后端的这台realserver上面,这样 ...

  7. Nginx负载均衡中后端节点服务器健康检查的一种简单方式

    摘自:https://cloud.tencent.com/developer/article/1027287 一.利用nginx自带模块ngx_http_proxy_module和ngx_http_u ...

  8. nginx之健康检查

    正常情况下,nginx做反向代理,如果后端节点服务器宕掉的话,nginx默认是不能把这台realserver踢出upstream负载集群的,所以还会有请求转发到后端的这台realserver上面,这样 ...

  9. Nginx被动健康检查和主动健康检查

    1.被动健康检查 Nginx自带有健康检查模块:ngx_http_upstream_module,可以做到基本的健康检查,配置如下: upstream cluster{ server max_fail ...

  10. 23、nginx动态添加nginx_upstream_check_module健康检查模块

    nginx_upstream_check_module模块地址:https://github.com/yaoweibin/nginx_upstream_check_module 23.1.说明: 1. ...

随机推荐

  1. switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?

    答:在Java 5以前,switch(expr)中,expr只能是byte.short.char.int.从Java 5开始,Java中引入了枚举类型,expr也可以是enum类型,从Java 7开始 ...

  2. Google Translate寻找之旅

    须知 网站:https://translate.google.de/ TK对应入口函数:teanslate_m_zh_CN文件/vu函数 TKK对应文件:/index页面,直接搜索TKK值即可 Goo ...

  3. 解释 JDBC 抽象和 DAO 模块?

    通过使用 JDBC 抽象和 DAO 模块,保证数据库代码的简洁,并能避免数据库资源 错误关闭导致的问题,它在各种不同的数据库的错误信息之上,提供了一个统一 的异常访问层.它还利用 Spring 的 A ...

  4. Netty学习摘记 —— 再谈引导

    本文参考 本篇文章是对<Netty In Action>一书第八章"引导"的学习摘记,主要内容为引导客户端和服务端.从channel内引导客户端.添加ChannelHa ...

  5. 提交Form表单,submit之前做js判断处理

    效果: 在点击提交按钮时,首先进行js判断, 如果不符合条件,则alert出提示信息,并return false. 主要点就在于给form表单添加一个onsubmit事件. 在onsubmit事件中定 ...

  6. 纯CSS实现扁平化风格开关按钮

    开关样式预览图 前言 最近在基于bootstrap框架开发一个网站,在填写表单一项需要用户填写是否选择某一选项,本来想引用bootstrap框架自带的一个按钮插件,结果在引用js的时候总是出错,就找了 ...

  7. HTML5离线存储整理

    前端html部分 //canvas.html <!DOCTYPE html> <html manifest="/test.appcache"> <he ...

  8. JavaScript遍历表单元素

    运行效果: 源代码: 1 <!DOCTYPE html> 2 <html lang="zh"> 3 <head> 4 <meta char ...

  9. css如何实现图片响应式等比例缩放,裁剪

    <div class="bg_picWrapper"  :style="{backgroundImage:'url('+img+')'}">---- ...

  10. DRF-认证权限频率

    目录 DRF-认证权限频率 认证 登录接口 认证 权限 作用 使用 频率 作用 使用 认证权限频率+五个接口 模型 视图 序列化器 认证权限频率类 配置文件 路由 DRF-认证权限频率 前后端混合开发 ...