博客
关于我
Nginx实战|Nginx健康检查
阅读量:215 次
发布时间:2019-02-28

本文共 2882 字,大约阅读时间需要 9 分钟。

服务治理中的健康检查:基于Nginx的方案实践

背景

服务治理是现代化应用中至关重要的任务之一。在这一过程中,及时感知服务节点的状态变化至关重要。尤其是服务的自动注册与异常节点的自动摘除,这需要一个可靠的健康检查机制来确保服务的稳定性和可用性。Nginx作为高性能的反向代理服务器,提供了灵活的健康检查配置,能够满足各种复杂的应用场景。

方案概述

Nginx 提供了三种主要的HTTP服务健康检查方案供用户选择。这三种方案分别针对不同的应用场景和需求,能够满足不同级别的健康检查需求。以下是具体的三种方案介绍:

  • TCP层默认检查方案

    这是最简单的健康检查方式。Nginx会定期建立一条TCP连接到目标服务器。如果连接成功建立,Nginx则认为目标服务器是健康的。这种方式简单直接,但也有其局限性。例如,对于那些已经处于listen状态的HTTP服务,TCP连接的成功并不一定意味着服务已经完全就绪或处理逻辑没有阻塞。

  • HTTP层默认检查方案

    由于TCP层检查存在一定的局限性,HTTP层的健康检查方案更为合理。这种方式通过发送一个标准的HTTP GET请求来判断目标服务器的状态。具体来说,Nginx会向目标服务器发送GET / HTTP/1.0请求。如果服务器返回状态码为2xx或3xx,Nginx就会认为目标服务器是健康的。这种检查方式能够更准确地反映服务内部处理逻辑是否正常运行。

  • 自定义检查方案

    Nginx还允许用户根据具体需求定义自定义的健康检查方案。这种灵活性使得Nginx能够适应各种复杂的应用场景。例如,可以自定义发送特定URI的HTTP请求,或设置特定的状态码范围来判断服务的健康状况。

  • 配置参数详解

    在实际应用中,Nginx的健康检查配置参数可以根据具体需求进行调整。以下是常用配置参数的详细说明:

    2.1 check

    check指令用于定义健康检查的基本参数,具体语法如下:

    check interval=milliseconds [fall=count] [rise=count] [timeout=milliseconds] [default_down=true|false] [type=tcp|http|ssl_hello|mysql|ajp] [port=check_port]

    默认值:interval=30000fall=5rise=2timeout=1000default_down=truetype=tcpport=0

    • interval:指定健康检查的间隔时间,默认为30秒。
    • fall:连续失败次数达到fall次后,服务器状态变为down
    • rise:连续成功次数达到rise次后,服务器状态变为up
    • timeout:后端健康检查请求的超时时间,默认为1秒。
    • default_down:初始状态设置,默认为true,表示初始状态为down
    • type:指定健康检查的类型,支持tcphttpssl_hellomysqlajp
    • port:指定检查的目标端口,默认为0,表示与目标服务器相同的端口。

    2.2 check_http_expect_alive

    check_http_expect_alive指令用于指定HTTP健康检查的成功状态码范围。语法如下:

    check_http_expect_alive [ http_2xx | http_3xx | http_4xx | http_5xx ]

    默认值:http_2xx | http_3xx

    • http_2xx:表示允许2xx范围内的状态码(如200、201、202等)。
    • http_3xx:表示允许3xx范围内的状态码(如300、301、302等)。
    • http_4xx:表示允许4xx范围内的状态码(如400、401、403等)。
    • http_5xx:表示允许5xx范围内的状态码(如500、501、502等)。

    2.3 check_http_send

    check_http_send指令用于定义HTTP健康检查请求的内容。语法如下:

    check_http_send http_packet

    默认值:"GET / HTTP/1.0\r\n\r\n"

    • http_packet:指定发送的HTTP请求包,支持HEADGET方法。
      • HEAD:推荐使用HEAD方法,减少传输数据量。在使用HEAD方法时,可以添加Connection: keep-alive请求头,支持长连接。
      • GET:在使用GET方法时,请求URI的大小不宜过大,以避免在单次interval内无法传输完成。

    完整示例

    以下是一个完整的Nginx配置示例,展示了如何在实际应用中配置健康检查:

    http {
    upstream cluster1 {
    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 {
    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;
    }
    }
    }

    参考连接

    转载地址:http://xyxi.baihongyu.com/

    你可能感兴趣的文章
    NTP配置
    查看>>
    NUC1077 Humble Numbers【数学计算+打表】
    查看>>
    NuGet Gallery 开源项目快速入门指南
    查看>>
    NuGet(微软.NET开发平台的软件包管理工具)在VisualStudio中的安装的使用
    查看>>
    nuget.org 无法加载源 https://api.nuget.org/v3/index.json 的服务索引
    查看>>
    Nuget~管理自己的包包
    查看>>
    NuGet学习笔记001---了解使用NuGet给net快速获取引用
    查看>>
    nullnullHuge Pages
    查看>>
    NullPointerException Cannot invoke setSkipOutputConversion(boolean) because functionToInvoke is null
    查看>>
    null可以转换成任意非基本类型(int/short/long/float/boolean/byte/double/char以外)
    查看>>
    Number Sequence(kmp算法)
    查看>>
    Numix Core 开源项目教程
    查看>>
    numpy
    查看>>
    Numpy 入门
    查看>>
    NumPy 库详细介绍-ChatGPT4o作答
    查看>>
    NumPy 或 Pandas:将数组类型保持为整数,同时具有 NaN 值
    查看>>
    numpy 或 scipy 有哪些可能的计算可以返回 NaN?
    查看>>
    numpy 数组 dtype 在 Windows 10 64 位机器中默认为 int32
    查看>>
    numpy 数组与矩阵的乘法理解
    查看>>
    NumPy 数组拼接方法-ChatGPT4o作答
    查看>>