在这里,我们将讨论如何为负载平衡的upstream服务器组中的UDP(用户数据报协议)服务器配置不同类型的运行状况检查。
我们已经配置了upstream服务器组,用于在stream{}上下文中处理UDP网络流量(DNS,RADIUS,Syslog),例如:
stream { #... upstream dns_upstream { server 192.168.136.130:53; server 192.168.136.131:53; server 192.168.136.132:53; } #...}
并且我们已经配置了将UDP数据报传递到upstream服务器组的服务器。
stream { #... server { listen 53 udp; proxy_pass dns_upstream; proxy_timeout 1s; proxy_responses 1; error_log logs/dns.log; } #... }
被动UDP健康检查
Nginx Plus或Nginx开源可以将服务器标记为不可用,并在服务器回复错误或超时后的一段时间内停止向其发送UDP数据报。
使用upstream服务器的max_fails参数设置在一定时间内连续失败的连接尝试次数。 (默认为1)。
时间是使用fail_timeout参数设置的(默认值为10秒)。该参数还设置Nginx在使服务器不可用之后认为服务器不可用的时间。
因此,如果在10秒内连接尝试时间超时或至少失败一次,Nginx会将服务器标记为不可用10秒钟。以下显示了如何在60秒内将这些参数设置为两次失败。
upstream dns_upstream { server 192.168.136.130:53 fail_timeout=60s; server 192.168.136.131:53 fail_timeout=60s; }
主动UDP运行状况检查
Active Health Checks可以检查范围更广的故障类型,并且仅适用于Nginx Plus。例如,Nginx Plus不会等待DNS服务器的实际TCP请求停机,而是会向每个upstream服务器发送特殊的运行状况检查请求,并检查是否满足特定条件。
如果无法建立与服务器的连接,则运行状况检查将失败,并且服务器将被视为运行状况不佳。 Nginx Plus不会与不正常的服务器建立代理客户端连接。如果指定了多个运行状况检查,则任何检查失败都会足以使相应的upstream服务器不正常。
要启用主动健康检查:
1.在upstream组中,使用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.在将流量转发到upstream组(通过proxy_pass)的服务器块中,为health_check指令指定UDP参数。
stream { #... server { listen 53 udp; proxy_pass dns_upstream; health_check udp; } #... }
Fine-Tuning 运行状况检查
我们可以通过为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秒。在两次连续失败的健康检查之后,服务器将被视为不正常,并且服务器需要通过两次连续检查才能再次被视为健康。