On this page
Module ngx_stream_upstream_hc_module
ngx_stream_upstream_hc_module
模块(1.9.0)允许对group中的服务器进行定期运行状况检查。服务器组必须位于shared memory中。
如果运行状况检查失败,则服务器将被视为不正常。如果为同一组服务器定义了多个运行状况检查,则任何一次检查失败都会使相应的服务器不正常。客户端连接不会传递给运行状况不佳的服务器,并且服务器不会处于“检查”状态。
Note
此模块可作为commercial subscription的一部分使用。
Example Configuration
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
组中每个服务器的 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指令分别配置测试,并在health_check指令的match
参数中引用测试。
Directives
Syntax: | health_check [parameters]; |
Default: | — |
Context: | server |
启用group中服务器的定期运行状况检查。
支持以下可选参数:
interval= time
- 设置两次连续运行状况检查之间的间隔,默认情况下为 5 秒。
jitter= time
- 设置每次运行状况检查将随机延迟的时间,默认情况下,没有延迟。
fails= number
- 设置特定服务器连续失败的健康检查次数,在此之后该服务器将被视为不健康,默认情况下为 1.
passes= number
- 设置特定服务器连续通过的运行状况检查的次数,之后该服务器将被视为运行状况良好,默认情况下为 1.
mandatory
- 设置服务器的初始“检查”状态,直到完成第一次运行状况检查(1.11.7)。客户端连接不会以“检查”状态传递到服务器。如果未指定该参数,则服务器最初将被视为运行状况良好。
match= name
- 指定
match
块,该块配置成功连接应通过以通过健康检查的测试。默认情况下,对于 TCP,仅检查与服务器构建 TCP 连接的能力。对于UDP,期望没有 ICMP“Destination Unreachable
”消息来答复发送的字符串“nginx health check
”。
port= number
- 定义连接到服务器以执行运行状况检查(1.9.7)时使用的端口。默认情况下,等于server端口。
udp
- 指定应将
UDP
协议用于运行状况检查,而不是默认的TCP
协议(1.9.13)。
Syntax: | health_check_timeout timeout; |
Default: | health_check_timeout 5s; |
Context: | stream , server |
覆盖proxy_timeout值以进行健康检查。
Syntax: | match name { ... } |
Default: | — |
Context: | stream |
定义用于验证服务器对运行状况检查的响应的命名测试集。
可以配置以下参数:
send string;
- 发送
string
到服务器;
期望字符串| ~正则表达式;
- 从服务器获得的数据应匹配的文字字符串(1.9.12)或正则表达式。正则表达式由前面的“
~*
”修饰符(用于区分大小写的匹配)或“~
”修饰符(用于区分大小写的匹配)指定。
send
和expect
参数都可以包含前缀为“ \x
”的十六进制文字,后跟两个十六进制数字,例如“ \x80
”(1.9.12)。
如果通过健康检查:
TCP 连接构建成功;
发送了
send
参数中的string
(如果已指定);从服务器获得的数据与
expect
参数的字符串或正则表达式匹配(如果已指定);经过的时间不超过health_check_timeout指令中指定的值。
Example:
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;
}
Note
仅检查从服务器获得的前proxy_buffer_size字节数据。