Upstream Probe#

该模块为 Upstream 实现主动健康探测。

配置示例#

server {
    listen ...;

    location /backend {
        ...
        proxy_pass http://backend;

        upstream_probe backend_probe
            uri=/probe
            port=10004
            interval=5s
            test=$good
            essential
            fails=3
            passes=3
            max_body=10m
            mode=idle;
    }
}

指令#

upstream_probe (PRO)#

语法

upstream_probe name [uri=address] [port=number] [interval=time] [method=method] [test=condition] [essential [persistent]] [fails=number] [passes=number] [max_body=size] [mode=always | idle | onfail];

默认值

上下文

location

upstream 组中的服务器定义主动健康探测,这些上游组在与 upstream_probe 指令相同的 location 上下文中通过 proxy_passuwsgi_pass 和类似指令指定。Angie 根据指定的参数定期向上游组中的每个服务器执行请求。

如果对服务器的请求成功,考虑到 upstream_probe 指令的所有参数设置以及控制其定义所在的 location 上下文如何使用上游的所有参数,则服务器通过探测。这包括 proxy_next_upstreamuwsgi_next_upstream 指令等,以及 proxy_set_header 等。

要使用探测,上游必须具有共享内存区域(zone)。一个上游可以配置多个探测。

接受以下参数:

name

探测的必需名称。

uri

要附加到 proxy_passuwsgi_pass 等参数的请求 URI。默认为 /

port

探测请求的备用端口号。

interval

探测之间的间隔。默认为 5s

method

探测请求的 HTTP 方法。默认为 GET

test

在请求期间要检查的条件;定义为包含变量的字符串。如果变量替换产生 """0",则探测失败。

essential

如果设置,服务器的初始状态需要验证,在通过探测之前不会将客户端请求转发给它。

persistent

设置此参数需要首先启用 essential;在 配置重新加载 之前正常工作的 persistent 服务器无需首先通过此探测即可开始接收请求。

fails

使服务器变为不健康状态的连续失败请求数。默认为 1。

passes

使服务器变为健康状态的连续成功请求数。默认为 1。

max_body

响应正文的最大内存量。默认为 256k

mode

探测模式,取决于服务器的健康状态:

  • always — 无论服务器状态如何都进行探测;

  • idle — 探测影响不健康的服务器以及自上次客户端请求以来已经过 interval 的服务器。

  • onfail — 仅探测不健康的服务器。

默认为 always

示例:

upstream backend {
    zone backend 1m;

    server backend1.example.com;
    server backend2.example.com;
}

map $upstream_status $good {
    200     "1";
}

server {
    listen ...;

    location /backend {
        ...
        proxy_pass http://backend;

        upstream_probe backend_probe
            uri=/probe
            port=10004
            interval=5s
            test=$good
            essential
            persistent
            fails=3
            passes=3
            max_body=10m
            mode=idle;
    }
}

探测操作的详细信息:

  • 最初,服务器在通过为其配置的*所有* essential 探测之前不会接收客户端请求(如果配置已重新加载且服务器在此之前被认为是健康的,则跳过 persistent 探测)。如果没有此类探测,则认为服务器是健康的。

  • 如果为服务器配置的*任何*探测达到其 fails 阈值,或者服务器本身达到 max_fails 阈值,则认为服务器不健康且不会接收客户端请求。

  • 要使不健康的服务器再次被认为是健康的,为其配置的*所有*探测必须达到各自的 passes 阈值;之后,考虑 max_fails 阈值。

内置变量#

http_upstream_probe 模块支持以下内置变量:

$upstream_probe (PRO)#

当前活动的 upstream_probe 的名称。

$upstream_probe_body (PRO)#

upstream_probe 期间接收的服务器响应正文;其大小受 max_body 限制。