主动健康检查
主动健康检查(Active Health Checks)顾名思义,是通过主动探测目标的健康状况来进行检查。当在上游实体中启用主动健康检查时,Kong会定期向上游的每个目标发送HTTP或HTTPS请求,以访问配置的路径。这使得Kong能够根据探测结果自动在负载均衡器中启用或禁用目标。
主动健康检查的周期性可以分别针对目标的健康和不健康状态进行配置。如果任一状态的间隔值设置为零,则对应场景的检查被禁用。当两者都设置为零时,主动健康检查将完全被禁用。
注意:主动健康检查仅适用于HTTP/HTTPS目标。它们不适用于协议属性设置为TCP或TLS的服务分配的上游。
被动健康检查(断路器)
注意:这个功能在混合模式下不被支持。
被动健康检查,也被称为断路器,是基于Kong代理的请求进行的检查(HTTP/HTTPS/TCP),而不会生成额外的流量。当目标无响应时,被动健康检查器将检测到并将目标标记为不健康状态。环形负载均衡器将开始跳过该目标,因此不会再将流量路由到该目标。
一旦解决了目标的问题,并且可以再次接收流量时,Kong管理员可以通过Admin API端点手动通知健康检查器应该重新启用目标。
Lua
curl -i -X POST http://localhost:8001/upstreams/my_upstream/targets/10.1.2.3:1234/healthy
响应:
Lua
HTTP/1.1 204 No Content
该命令将广播一个集群范围的消息,以便"健康"状态在整个Kong集群中传播。这将导致Kong节点重置运行在所有工作进程中的健康检查器的健康计数器,从而使环形负载均衡器能够再次将流量路由到目标。
被动健康检查的优点是不会产生额外的流量,但它们无法自动将目标重新标记为健康状态:断路器已打开,需要由系统管理员重新启用目标。
优点和缺点摘要
- 主动健康检查能够在目标恢复健康时自动重新启用环形负载均衡器中的目标,而被动健康检查则不能。
- 被动健康检查不会给目标产生额外流量,而主动健康检查会。
- 主动健康检查需要在目标中配置一个已知URL,并要求能够可靠响应状态的端点(可以简单地为"/")。被动健康检查不需要进行此类配置。
- 通过为主动健康检查器提供自定义的探测端点,应用程序可以确定自己的健康指标,并产生将由Kong使用的状态码。即使目标继续提供看似健康的流量,被动健康检查器也无法对主动探测作出失败的响应状态,从而请求停止接受新的流量。
可以将两种模式结合起来。例如,可以启用被动健康检查仅基于流量来监控目标的健康状况,并且只在目标处于不健康状态时使用主动健康检查,以便自动重新启用它。