什么是健康检查?

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

健康检查是用于向每个成员发送相同请求的预定规则。 健康检查向负载均衡器组的每个成员发送请求,以建立每个成员服务器接受客户端请求的可用性。 对于某些类型的健康检查,将计算来自服务器的响应以确定每个成员服务器的运行状况。 成功完成健康检查需要服务器通过正常的TCP和HTTP连接标准。

在TCP模式下,使用TCP连接请求执行健康检查。 在标准健康检查类型HTTP模式下,使用HTTP GET或HTTP POST方法执行健康检查。

HTTP 健康检查

Nginx Plus和Nginx开源版可以持续测试我们的上游服务器,避免故障服务器,并将已恢复的服务器优雅地添加到负载平衡组中。

被动健康检查

对于被动健康检查,Nginx Plus和Nginx会监视正在发生的事务,并尝试恢复失败的连接。 如果事务仍然无法恢复,Nginx Plus和Nginx开源版会将服务器标记为不可用,并暂时停止向其发送请求,直到将其再次标记为活动状态。

将上游服务器标记为不可用的条件是使用upstream块中server指令的参数为每个上游服务器定义的。

示例

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

主动健康检查

Nginx Plus通过向每个服务器发送特殊的健康检查请求并验证正确的响应,定期检查上游服务器的运行状况。

要启用主动健康检查

1) 将请求传递给上游组的位置,包括health_check指令

2) 在上游服务器组中,使用zone指令指定一个共享内存区域

我们可以使用health_check指令的参数覆盖主动健康检查的默认值

指定请求的URI

我们可以使用health_check指令的uri参数来设置在健康检查中请求的URI

指定的URI(统一资源标识符)将附加到在上游块中为服务器设置的服务器域名或IP地址。 在上面的示例中,对于sample backend组中的第一台服务器,健康检查请求URI http://backend1.example.com/some/path

定义自定义条件

我们可以指定服务器通过健康检查必须满足的自定义条件。 这些条件在match块中定义,该块在health_check指令的match参数中引用

1) 在http { }级别,定义match {}块并为其命名,例如 server_ok

2) 通过定义match参数和match块的名称,从health_check指令引用该块

在上面的示例中,如果响应的状态代码在200-399范围内,并且其主体不包含字符串maintenance mode,则健康检查通过。


下一主题压缩和解压缩