模块 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 Unreachable
nginx health check
还可以将运行状况检查配置为测试从服务器获取的数据。
使用 match Directives单独配置测试
并在参数
health_checkDirectives。match
Directives
语法: |
health_check [ |
---|---|
默认值: | — |
上下文: |
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 “” 消息
回复发送的字符串 “”。
match
Destination Unreachable
nginx health check
在 1.11.7 之前的版本中,默认情况下,UDP 运行状况检查 需要一个带有 send 和 expect 参数的 match 块。
-
port
=number
- 定义连接到服务器时使用的端口 执行运行状况检查 (1.9.7)。 默认情况下,等于服务器端口。
-
udp
- 指定协议应用于
health checks 而不是 default protocol (1.9.13)。
UDP
TCP
语法: |
health_check_timeout |
---|---|
默认值: |
health_check_timeout 5s; |
上下文: |
stream ,server |
覆盖运行状况检查的 proxy_timeout 值。
语法: |
match |
---|---|
默认值: | — |
上下文: |
stream |
定义用于验证服务器对运行状况检查的响应的命名测试集。
可以配置以下参数:
-
send
string
; - 向服务器发送 a;
string
-
expect
string
|~
regex
; - 文本字符串 (1.9.12) 或正则表达式
从服务器获取的数据应匹配。
正则表达式使用前面的
“” 修饰符(用于不区分大小写的匹配),或者
“” 修饰符(用于区分大小写的匹配)。
~*
~
Both 和 parameters
可以包含前缀为 “” 的十六进制文本
后跟两个十六进制数字,例如 “” (1.9.12)。send
expect
\x
\x80
如果满足以下条件,则通过运行状况检查:
- 已成功建立 TCP 连接;
- 来自参数
如果指定,则发送;
string
send
- 从服务器获取的数据与字符串或正则表达式匹配
从参数(如果指定);
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 字节。