Nginx Plus和Nginx可以持续测试我们的TCP upstream服务器,避免出现故障的服务器,并将恢复的服务器正常地包含在负载平衡组中。
让我们看一下TCP健康检查的配置:
1.我们在stream上下文中配置了一组TCP服务器,例如:
stream { #... upstream stream_backend { server backend1.example.com:12345; server backend2.example.com:12345; server backend3.example.com:12345; } #...}
2.我们已经配置了将TCP连接传递到服务器组的服务器:
stream { #... server { listen 12345; proxy_pass stream_backend; } #... }
如果尝试连接到upstream服务器超时或导致错误,则Nginx Plus或Nginx开源可以将服务器标记为不可用,并在规定的时间内停止向其发送请求。要确定nginx认为upstream服务器不可用的条件,请在server指令中添加以下参数:
fail_timeout
max_fails
upstream stream_backend { server backend1.example.com:12345 weight=5; server backend2.example.com:12345 max_fails=2 fail_timeout=30s; server backend3.example.com:12346 max_conns=3; }
upstream服务器很容易被连接淹没,这可能导致服务器再次标记为不可用。慢速启动允许upstream服务器在恢复或可用后将其权重从零逐渐恢复到其标称值。这可以通过upstream服务器指令的slow_start参数来完成:
upstream backend { server backend1.example.com:12345 slow_start=30s; server backend2.example.com; server 192.0.0.1 backup; }
可以将运行状况检查配置为测试各种故障类型。例如。 Nginx Plus可以持续检查upstream服务器的响应能力,并避免出现故障的服务器。
Nginx Plus向每个upstream服务器发送特殊的运行状况检查请求,并测试是否满足特定条件。如果无法建立与服务器的连接,则运行状况检查将失败,并且服务器将被视为运行状况不佳。
要启用主动健康检查:
1. 指定共享内存区域 - Nginx Plus辅助进程在其中共享有关连接和计数器的状态信息的特殊区域。将zone指令添加到upstream服务器组,并定义区域(此处为stream_backend)和内存量(64 KB)。
stream { #... upstream stream_backend { zone stream_backend 64k; server backend1.example.com:12345; server backend2.example.com:12345; server backend3.example.com:12345; } #... }
2.使用health_check指令为upstream组启用主动运行状况检查。
stream { #... server { listen 12345; proxy_pass stream_backend; health_check; #... } }
3.如果需要,请使用health_check_timeout指令减少两次连续运行状况检查之间的超时。此health_check_timeout指令会覆盖运行状况检查的proxy_timeout值,对于运行状况检查而言,此超时时间需要大大缩短。
stream { #... server { listen 12345; proxy_pass stream_backend; health_check; health_check_timeout 5s; } }
4.默认情况下,Nginx Plus将运行状况检查消息发送到upstream块中server指令指定的端口。要覆盖端口,请定义health_check指令的port参数。
stream { #... server { listen 12345; proxy_pass stream_backend; health_check port=12346; health_check_timeout 5s; } }
默认情况下,Nginx Plus尝试每5秒连接到一组upstream服务器中的每台服务器。如果无法建立连接,Nginx Plus会认为运行状况检查失败,将服务器标记为运行状况不佳,并停止将客户端连接转发到服务器。
要更改默认行为,请向health_check指令添加参数:
interval - 它定义Nginx Plus在几秒钟内发送健康检查请求的频率(默认值为5秒)。
passes - 服务器必须响应几次连续的健康检查,才能被视为健康。预设值是1。
fails - 服务器必须连续响应几次健康检查才能被视为不健康。预设值是1。
stream { #... server { listen 12345; proxy_pass stream_backend; health_check interval=10 passes=2 fails=3; } #... }
在上面的示例中,TCP健康检查之间的时间增加到10秒。经过三次连续的健康检查失败后,服务器将被视为不正常,并且服务器需要通过两次连续的检查才能再次被视为健康。