上游探针#

该模块为 stream_upstream 实现主动健康探针。

配置示例#

server {
    listen ...;

    # ...
    proxy_pass backend;
    upstream_probe_timeout 1s;

    upstream_probe backend_probe
        port=12345
        interval=5s
        test=$good
        essential
        fails=3
        passes=3
        max_response=512k
        mode=onfail
        "send=data:GET / HTTP/1.0\n\n";
}

指令#

upstream_probe (PRO)#

Added in version 1.4.0: PRO

语法

upstream_probe name [port=number] [interval=time] [test=condition] [essential [persistent]] [fails=number] [passes=number] [max_response=size] [mode=always | idle | onfail] [udp] [send=string];

默认

上下文

server

定义一个针对 upstream 组内节点的主动健康探针, 这些组在相同 location 上下文中通过 upstream_probe 指令为 proxy_pass 指定。 随后,Angie 会根据此处配置的参数定期探测上游组的每个节点。

如果向节点的请求成功,并考虑到 upstream_probe 指令的所有参数设置以及控制指令 location 上下文使用上游的设置,包括 proxy_next_upstream 指令,则节点的探测通过。

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

接受以下参数:

name

探针的必需名称。

port

探针请求的备用端口号。

interval

探针之间的 间隔
默认值 — 5s

test

探针的条件,定义为变量字符串。 如果变量替换结果为 """0",则探针不通过。

essential

如果设置,则在探针通过之前,节点不会接收客户端请求。

persistent

设置此参数需要先启用 essential; 被认为健康的 persistent 节点在 配置重载 之前开始接收请求,而无需先通过此探针。

fails

使节点不健康的连续失败探针次数。
默认值 — 1。

passes

使节点健康的连续通过探针次数。
默认值 — 1。

max_response

响应的最大内存大小。如果指定零 ,则禁用响应等待。
默认值 — 256k

mode

探针模式,取决于节点的健康状态:

  • always — 无论状态如何都探测节点;

  • idle — 探测不健康的节点和自上次客户端请求以来经过 interval 的节点。

  • onfail — 仅探测不健康的节点。

默认值 — always

udp

如果指定,则使用UDP协议进行探测。 默认情况下,使用TCP进行探测。

send

用于检查的数据; 这可以是带有前缀 data: 的字符串或带有数据的文件名 (绝对指定或相对于 /usr/local/angie/ 目录)。

示例:

upstream backend {
    zone backend 1m;

    server a.example.com;
    server b.example.com;
}

map $upstream_probe_response $good {
    ~200    "1";
    default  "";
}

server {
    listen ...;

    # ...
    proxy_pass backend;
    upstream_probe_timeout 1s;

    upstream_probe backend_probe
        port=12345
        interval=5s
        test=$good
        essential
        persistent
        fails=3
        passes=3
        max_response=512k
        mode=onfail
        "send=data:GET / HTTP/1.0\n\n";
}

探针操作细节:

  • 最初,节点在通过为其配置的 所有 essential 探针之前不会接收客户端请求, 如果配置被重载并且节点在此之前被认为是健康的,则跳过 persistent 探针。 如果没有这样的探针,则认为节点是健康的。

  • 如果为节点配置的 任何 探针达到 fails 或节点达到 max_fails,则该节点被认为是不健康的,不会接收客户端请求。

  • 为了使不健康的节点再次被认为是健康的, 为其配置的 所有 探针必须达到各自的 passes; 之后,还会考虑 max_fails

内置变量#

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

$upstream_probe (PRO)#

当前活动的 upstream_probe 的名称。

$upstream_probe_response (PRO)#

在由 upstream_probe 配置的主动探针期间接收到的响应内容。