Skip to main content

5.状态健康检查

通过发送定期运行状况检查来监视上游组中TCP服务器或upstream组中HTTP服务器或UDP 服务器的运行状况。

HTTP状态健康检查

介绍

NGINX可以持续测试您的upstream服务器,避免发生故障的服务器,并将恢复的服务器优雅地添加到负载平衡组中。

被动健康检查(Passive Health Checks)

对于被动运行状况检查,NGINX 会在事务(transactions)发生时对其进行监控,并尝试恢复失败的连接。如果事务仍然无法恢复,NGINX 会将服务器标记为不可用,并暂时停止向其发送请求,直到它再次标记为活动。

为每个upstream服务器定义upstream服务器标记为不可用的条件,并在 upstream块中提供 server指令的参数:

  • fail_timeout – 设置服务器标记为不可用必须发生多次失败尝试的时间,以及服务器标记为不可用的时间(默认值为 10 秒)。
  • max_fails – 设置在服务器标记为不可用 fail_timeout期间必须发生的失败尝试次数(默认值为 1 次尝试)。

在以下示例中,如果 NGINX 无法向服务器发送请求或在 30秒内 3次未收到来自服务器的响应,则会将服务器标记为不可用 30 秒:

upstream backend {
server backend1.example.com;
server backend2.example.com max_fails=3 fail_timeout=30s;
}

请注意,如果组中只有一个服务器,则会忽略 fail_timeoutmax_fails参数,并且永远不会将服务器标记为不可用。

服务器启动缓慢

最近恢复的服务器很容易被连接淹没,这可能会导致服务器再次标记为不可用。慢启动允许upstream服务器在恢复或可用后逐渐将其权重从零恢复到其标称(nominal)值。这可以使用upstream server指令的 slow_start 参数来完成:

upstream backend {
server backend1.example.com slow_start=30s;
server backend2.example.com;
server 192.0.0.1 backup;
}

请注意,如果组中只有一个服务器,则忽略 slow_start该参数,并且永远不会将服务器标记为不可用。慢启动是NGINX Plus独有的

TCP状态健康检查

先决条件

已在 upstream上下文中配置了 TCP 服务器的upstream组,例如:

stream {
#...
upstream stream_backend {
server backend1.example.com:12345;
server backend2.example.com:12345;
server backend3.example.com:12345;
}
#...
}

已配置将 TCP 连接传递到服务器组的服务器:

stream {
#...
server {
listen 12345;
proxy_pass stream_backend;
}
#...
}

被动 TCP 运行状况检查

和HTTP状态健康检查配置类似:

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;
}

也同样适用慢启动参数。

UDP状态健康检查

先决条件

已配置了处理 upstream {} 上下文中的 UDP 网络流量(DNS、RADIUS、syslog)的upstream服务器组,例如:

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 运行状况检查

和HTTP,TCP状态健康检查配置类似:

upstream dns_upstream {
server 192.168.136.130:53 fail_timeout=60s;
server 192.168.136.131:53 fail_timeout=60s;
}