模块 ngx_stream_upstream_hc_module
| health_check_timeout match health_check 的示例配置 Directives |
这ngx_stream_upstream_hc_module模块 (1.9.0)
允许对组中的服务器启用定期运行状况检查。
服务器组必须驻留在共享内存中。
如果运行状况检查失败,则服务器将被视为运行状况不佳。 如果为同一组服务器定义了多个运行状况检查, 任何检查的一次失败都将使相应的服务器 被视为不健康。 客户端连接不会传递到运行状况不佳的服务器 以及处于 “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 连接的能力
在tcp每 5 秒分组一次。
当无法建立与服务器的连接时,
运行状况检查将失败,服务器将
被视为运行状况不佳。
可以为 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单独配置测试
并在match参数
health_checkDirectives。
Directives
| 语法: |
health_check [ |
|---|---|
| 默认值: | — |
| 上下文: |
server |
启用组中服务器的定期运行状况检查。
支持以下可选参数:
-
interval=time - 设置两个连续运行状况检查之间的间隔, 默认情况下为 5 秒。
-
jitter=time - 设置时间 每次健康检查都会随机延迟, 默认情况下,没有延迟。
-
fails=number - 设置特定服务器的连续运行状况检查失败次数 之后,此服务器将被视为运行状况不佳, 默认情况下为 1。
-
passes=number - 设置特定服务器连续通过的运行状况检查的次数 之后,服务器将被视为正常, 默认情况下为 1。
-
mandatory[persistent] -
设置服务器的初始 “checking” 状态 直到第一次运行状况检查完成 (1.11.7)。 客户端连接不会传递到处于 “checking” 状态的服务器。 如果未指定该参数, 服务器最初将被视为正常。
这
persistent参数 (1.21.1) 设置重新加载后服务器的初始 “UP” 状态 如果在重新加载之前认为服务器运行状况良好。 -
match=name - 指定
matchblock 配置测试 成功的连接应通过,运行状况检查才能通过。 默认情况下,对于 TCP,只有 以与服务器建立 TCP 连接。 对于 UDP,缺少 ICMP ”Destination Unreachable“ 消息 在回复发送的字符串 ”nginx health check”.在 1.11.7 之前的版本中,默认情况下,UDP 运行状况检查 需要一个带有 send 和 expect 参数的 match 块。
-
port=number - 定义连接到服务器时使用的端口 执行运行状况检查 (1.9.7)。 默认情况下,等于服务器端口。
-
udp - 指定
UDP协议应用于 运行状况检查而不是默认的TCP协议 (1.9.13)。
| 语法: |
health_check_timeout |
|---|---|
| 默认值: |
health_check_timeout 5s; |
| 上下文: |
stream,server |
覆盖运行状况检查的 proxy_timeout 值。
| 语法: |
match |
|---|---|
| 默认值: | — |
| 上下文: |
stream |
定义用于验证服务器对运行状况检查的响应的命名测试集。
可以配置以下参数:
-
sendstring; - 发送
string到服务器; -
expectstring|~regex; - 文本字符串 (1.9.12) 或正则表达式
从服务器获取的数据应匹配。
正则表达式由前面的
“” 修饰符(用于不区分大小写的匹配),或者
“” 修饰符(用于区分大小写的匹配)。
~*~
双send和expect参数
可以包含前缀为 “ 的十六进制文本\x”
后跟两个十六进制数字,例如”\x80” (1.9.12).
如果满足以下条件,则通过运行状况检查:
- 已成功建立 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 字节。