模块 ngx_stream_upstream_hc_module

health_check_timeout
match health_check
的示例配置
Directives

模块 (1.9.0) 允许对组中的服务器启用定期运行状况检查。 服务器组必须驻留在共享内存中ngx_stream_upstream_hc_module

如果运行状况检查失败,则服务器将被视为运行状况不佳。 如果为同一组服务器定义了多个运行状况检查, 任何检查的一次失败都将使相应的服务器 被视为不健康。 客户端连接不会传递到运行状况不佳的服务器 以及处于 “checking” 状态的服务器。

此模块作为我们商业订阅的一部分提供。

示例配置

upstream tcp {
    zone upstream_tcp 64k;

    server backend1.example.com:12345 weight=5;
    server backend2.example.com:12345 fail_timeout=5s slow_start=30s;
    server 192.0.2.1:12345            max_fails=3;

    server backup1.example.com:12345  backup;
    server backup2.example.com:12345  backup;
}

server {
    listen     12346;
    proxy_pass tcp;
    health_check;
}

使用此配置,nginx 将检查与每个服务器建立 TCP 连接的能力 每 5 秒在组中。 当无法建立与服务器的连接时, 运行状况检查将失败,服务器将 被视为运行状况不佳。tcp

可以为 UDP 协议配置运行状况检查:

upstream dns_upstream {

    zone   dns_zone 64k;

    server dns1.example.com:53;
    server dns2.example.com:53;
    server dns3.example.com:53;
}

server {
    listen       53 udp;
    proxy_pass   dns_upstream;
    health_check udp;
}

在这种情况下,缺少 需要 ICMP “” 消息 回复发送的字符串 “”。Destination Unreachablenginx health check

还可以将运行状况检查配置为测试从服务器获取的数据。 使用 match Directives单独配置测试 并在参数 health_checkDirectives。match

Directives

语法: health_check [parameters];
默认值:
上下文: server

启用组中服务器的定期运行状况检查。

支持以下可选参数:

interval=time
设置两个连续运行状况检查之间的间隔, 默认情况下为 5 秒。
jitter=time
设置时间 每次健康检查都会随机延迟, 默认情况下,没有延迟。
fails=number
设置特定服务器的连续运行状况检查失败次数 之后,此服务器将被视为运行状况不佳, 默认情况下为 1。
passes=number
设置特定服务器连续通过的运行状况检查的次数 之后,服务器将被视为正常, 默认情况下为 1。
mandatory [persistent]

设置服务器的初始 “checking” 状态 直到第一次运行状况检查完成 (1.11.7)。 客户端连接不会传递到处于 “checking” 状态的服务器。 如果未指定该参数, 服务器最初将被视为正常。

参数 (1.21.1) 设置重新加载后服务器的初始 “UP” 状态 如果在重新加载之前认为服务器运行状况良好。persistent

match=name
指定配置测试 成功的连接应通过,运行状况检查才能通过。 默认情况下,对于 TCP,只有 以与服务器建立 TCP 连接。 对于 UDP,缺少 需要 ICMP “” 消息 回复发送的字符串 “”。matchDestination Unreachablenginx health check
在 1.11.7 之前的版本中,默认情况下,UDP 运行状况检查 需要一个带有 sendexpect 参数的 match 块。
port=number
定义连接到服务器时使用的端口 执行运行状况检查 (1.9.7)。 默认情况下,等于服务器端口。
udp
指定协议应用于 health checks 而不是 default protocol (1.9.13)。UDPTCP

语法: health_check_timeout timeout;
默认值:
health_check_timeout 5s;
上下文: stream,server

覆盖运行状况检查的 proxy_timeout 值。

语法: match name { ... }
默认值:
上下文: stream

定义用于验证服务器对运行状况检查的响应的命名测试集。

可以配置以下参数:

send string;
向服务器发送 a;string
expect string|~ regex;
文本字符串 (1.9.12) 或正则表达式 从服务器获取的数据应匹配。 正则表达式使用前面的 “” 修饰符(用于不区分大小写的匹配),或者 “” 修饰符(用于区分大小写的匹配)。~*~

Both 和 parameters 可以包含前缀为 “” 的十六进制文本 后跟两个十六进制数字,例如 “” (1.9.12)。sendexpect\x\x80

如果满足以下条件,则通过运行状况检查:

  • 已成功建立 TCP 连接;
  • 来自参数 如果指定,则发送;stringsend
  • 从服务器获取的数据与字符串或正则表达式匹配 从参数(如果指定);expect
  • 经过的时间不超过指定的值 在 health_check_timeout Directives中。

例:

upstream backend {
    zone     upstream_backend 10m;
    server   127.0.0.1:12345;
}

match http {
    send     "GET / HTTP/1.0\r\nHost: localhost\r\n\r\n";
    expect ~ "200 OK";
}

server {
    listen       12346;
    proxy_pass   backend;
    health_check match=http;
}

仅检查从服务器获取的数据的前 proxy_buffer_size 字节。