说明
- NP: NGINX Plus
- AG: Admin Guide
- 会话: session
- 上游: upstream
- 流量:traffic
- 后端:
backend
目录
1.UDP健康检查
本章介绍如何为负载平衡的上游服务器组中的UDP服务器配置不同类型的运行状况检查。
2.先决条件
- 你已经配置了上游服务器组,用于在
stream {}
上下文中处理UDP网络流量(DNS,RADIUS,系统日志),例如:
stream {
#...
upstream dns_upstream {
server 192.168.136.130:53;
server 192.168.136.131:53;
server 192.168.136.132:53;
}
#...
}
- 你已经配置了将UDP数据报传递到上游服务器组的服务器:
stream {
#...
server {
listen 53 udp;
proxy_pass dns_upstream;
proxy_timeout 1s;
proxy_responses 1;
error_log logs/dns.log;
}
#...
}
有关详细信息,请参见TCP和UDP负载平衡。
3.被动UDP健康检查
如果服务器回复错误或超时,则NGINX开源或NGINX Plus可以将服务器标记为不可用,并在一段时间内停止向其发送UDP数据报。
使用上游服务器的max_fails
参数设置在特定时间段内连续失败的连接尝试次数(默认值为1)。
该时间段由fail_timeout
参数设置(默认值为10秒)。该参数还设置了NGINX标记服务器后认为服务器不可用的时间。
因此,如果连接尝试超时或在10秒钟内至少失败一次,NGINX会将服务器标记为10秒钟不可用。 该示例显示了如何在60秒内将这些参数设置为2次失败:
upstream dns_upstream {
server 192.168.136.130:53 fail_timeout=60s;
server 192.168.136.131:53 fail_timeout=60s;
}
4.激活UDP运行状况检查
激活健康检查可以测试多种故障类型,并且仅适用于NGINX Plus。 例如,NGINX Plus不会等待将DNS客户端发出的实际TCP请求失败,然后再将DNS服务器标记为已关闭(例如在被动运行状况检查中),而是将特殊的运行状况检查请求发送到每个上游服务器,并检查是否存在响应 满足某些条件。 如果无法建立与服务器的连接,则运行状况检查将失败,并且服务器将被视为运行状况不佳。 NGINX Plus不会将客户端连接代理到运行状况不佳的服务器。 如果定义了多个运行状况检查,则任何检查失败都会足以使相应的上游服务器不正常。
要启用激活健康检查:
1.在上游组中,使用zone指令指定共享内存区域– NGINX Plus工作进程在其中共享计数器和连接状态信息的特殊区域。 在zone
指令中,指定区域名称(在示例中为dns_zone
)和区域大小(在示例中为64k
):
stream {
#...
upstream dns_upstream {
zone dns_zone 64k;
server 192.168.136.130:53;
server 192.168.136.131:53;
server 192.168.136.132:53;
}
#...
}
2.在将流量转发到上游组(通过proxy_pass
)的server
块中,为health_check
指令指定udp
参数:
stream {
#...
server {
listen 53 udp;
proxy_pass dns_upstream;
health_check udp;
}
#...
}
基本的UDP运行状况检查假设NGINX Plus将“nginx运行状况检查”字符串发送到上游服务器,并期望响应中缺少ICMP“目标不可达(Destination Unreachable)”消息。你可以在match
{}
块中配置自己的健康检查测试。 有关详细信息,请参见“match {}”配置块。
5.微调UDP运行状况检查
你可以通过为health_check
指令指定以下参数来微调运行状况检查:
interval
– NGINX Plus发送健康检查请求的频率(以秒为单位)(默认为5秒)passes
– 服务器必须响应才能被视为运行正常的连续运行状况检查次数(默认值为1)fails
– 服务器必须不响应才能被视为不健康的连续健康检查次数(默认为1)
server {
listen 53 udp;
proxy_pass dns_upstream;
health_check interval=20 passes=2 fails=2 udp;
}
在此示例中,两次UDP健康检查之间的时间增加到20秒,在两次连续失败的健康检查后服务器被视为不健康,并且服务器需要通过两次连续检查才能再次被视为健康。
6.“match {}”配置块
你可以通过配置许多测试来验证服务器对运行状况检查的响应。 这些测试在match
{}
配置块中定义。
1.在顶级stream
{}
上下文中,指定match
{}
块并设置其名称,例如udp_test
:
stream {
#...
match udp_test {
#...
}
}
2.通过包含match
参数来指定match
{}
块的名称,以引用health_check
指令中的块:
stream {
#...
server {
listen 53 udp;
proxy_pass dns_upstream;
health_check match=udp_test udp;
}
#...
}
3.在match
{}
块中,指定运行状况检查成功的条件或测试。 这是通过send
和expect
参数完成的:
这些参数可以以不同的组合使用,但一次只能指定send
和expect
参数。
7.NTP测试示例
要微调(fine‑tune)NTP的运行状况检查,你应该同时使用以下文本字符串指定send
和expect
参数:
match ntp {
send \xe3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00;
expect ~* \x24;
}
8.DNS测试示例
要微调DNS的运行状况检查,还应该使用以下文本字符串指定send
和expect
参数:
match dns {
send \x00\x2a\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x03\x73\x74\x6c\x04\x75\x6d\x73\x6c\x03\x65\x64\x75\x00\x00\x01\x00\x01;
expect ~* "health.is.good";
}