NGINX TCP健康检查

2024 年 8 月 29 日 | 阅读 3 分钟

Nginx Plus和Nginx可以持续测试我们的TCP上游服务器,避免出现故障的服务器,并将恢复的服务器优雅地包含在负载均衡组中。

让我们看看TCP健康检查的配置

1. 我们已经在流上下文(stream context)中配置了一个TCP服务器的上游组,例如

2. 我们已经配置了一个将TCP连接传递给服务器组的服务器

被动 TCP 健康检查

如果尝试连接上游服务器超时或导致错误,Nginx Plus或Nginx开源版可以将该服务器标记为不可用,并停止在定义的时间内向其发送请求。 要确定nginx认为上游服务器不可用的条件,请将以下参数添加到服务器指令中

  • fail_timeout
  • max_fails

服务器慢启动

上游服务器很容易被连接淹没,这可能导致服务器再次被标记为不可用。 慢启动允许上游服务器在恢复或变得可用后,将其权重从零逐渐恢复到其标称值。 这可以通过上游服务器指令的slow_start参数来完成

主动 TCP 健康检查

可以配置健康检查来测试各种故障类型。 例如,Nginx Plus可以持续检查上游服务器的响应能力,并避免出现故障的服务器。

Nginx Plus向每个上游服务器发送特殊的健康检查请求,并测试满足某些条件的响应。 如果无法与服务器建立连接,则健康检查失败,并且该服务器被认为不健康。

Nginx Plus不会将客户端的连接代理到不健康的服务器。 如果为上游组配置了多个健康检查,则任何健康检查的失败都足以认为相应的服务器不健康。

要启用主动健康检查

1. 指定共享内存区域 - Nginx Plus工作进程共享有关连接和计数器状态信息的特殊区域。 将zone指令添加到上游服务器组并定义zone(此处为stream_backend)和内存量(64 KB)。

2. 使用 health_check 指令为上游组启用主动健康检查。

3. 如果需要,使用 health_check_timeout 指令减少两个连续的健康检查之间的超时时间。 针对健康检查,此超时需要明显缩短,因此health_check_timeout指令覆盖了健康检查的proxy_timeout值。

4. 默认情况下,Nginx Plus将健康检查消息发送到上游块的服务器指令指定的端口。 要覆盖该端口,请定义 health_check 指令的 port 参数。

微调TCP健康检查

默认情况下,Nginx Plus每5秒尝试连接到上游服务器组中的每个服务器。 如果无法建立连接,Nginx Plus将健康检查视为失败,将服务器标记为不健康,并停止将客户端连接转发到该服务器。

要更改默认行为,请将参数添加到 health_check 指令

interval: 它定义了Nginx Plus每隔几秒发送健康检查请求的频率(默认为5秒)。

passes: 服务器必须响应的连续健康检查次数,才能被视为健康。 默认值为1。

fails: 服务器必须无法响应的连续健康检查次数,才能被认为不健康。 默认值为1。

在上面的示例中,TCP健康检查之间的时间增加到10秒。 在连续三次健康检查失败后,服务器被认为不健康,并且服务器需要通过两次连续检查才能再次被认为健康。