上游探针#

该模块实现了针对 http_upstream 的主动健康探测。

配置示例#

server {
    listen ...;

    location @probes {
        ...
        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)#

Added in version 1.2.0: PRO

语法

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

默认

上下文

location

为在相同 location 上下文中指定的 proxy_passuwsgi_pass 等的 upstream 组内的节点定义一个主动健康探测。接下来,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 @probes {
        ...
        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 模块支持以下内置变量:

$upstream_probe (PRO)#

当前活动的 upstream_probe 的名称。

$upstream_probe_body (PRO)#

在一个 upstream_probe 中接收到的节点响应体;其大小由 max_body 限制。