介绍
您可以让Kong代理的API使用ring-balancer,通过添加包含一个或多个目标实体的 upstream 实体进行配置,每个 target指向不同的IP地址(或主机名)和端口。ring-balancer将在各种目标之间负载,并基于上游对目标执行健康检查,使它们无论是否响应都是健康的或不健康的。然后,ring-balancer 只会将流量路由到健康的目标。
Kong有两种健康检查方法,可分别或同时使用:
- active checks主动检查,其中定期请求目标中的特定HTTP或HTTPS端点,并根据其响应确定目标的健康状态;
- passive checks被动检查(也称为断路器),Kong在其中分析正在代理的流量,并根据目标的行为响应请求来确定目标的健康状况。
健康与不健康目标
健康检查功能的目标是为给定的Kong节点动态地将目标标记为健康或不健康。没有集群范围内的健康信息同步:每个Kong节点分别决定其目标的健康。这是可取的,因为某个Kong节点可以连接到一个目标,但另一个Kong节点未必能连接该目标:第一个节点将考虑它健康,而另一个将其标记为不健康的,将请求路由到其他目标(健康)。
主动探测(在主动健康检查上)或代理请求(在被动健康检查上)都会生成用于确定目标是否健康的数据。请求可能会产生TCP错误、超时或HTTP状态代码。基于此信息,健康检查器更新一系列内部计数器:
- 如果返回的状态码是配置为“健康”的状态码,将增加目标的“success”计数器,并清除其所有其他计数器;
- 如果连接失败,则增加目标的“TCP failure”计数器,清除“success”计数器;
- 如果超时,将增加目标的“超时”计数器,清除“成功”计数器;
- 如果返回的状态代码被配置为“不健康”,它将增加目标的“HTTP故障”计数器,并清除“成功”计数器。
如果任何“TCP失败”、“HTTP失败”或“超时”计数器达到其配置的阈值,目标将被标记为不健康。
如果“成功”计数器达到其配置的阈值,则将目标标记为健康。
HTTP状态码为“健康”或“不健康”的列表,并且每个计数器的独立阈值可以在每个上游的基础上进行配置。下面,我们有一个上游实体的配置示例,展示了用于配置健康检查的各种字段的默认值。每个字段的描述包含在Admin API 参考文档中。
{
"name": "service.v1.xyz",
"healthchecks": {
"active": {
"concurrency": 10,
"healthy": {
"http_statuses": [ 200, 302 ],
"interval": 0,
"successes": 0
},
"http_path": "/",
"timeout": 1,
"unhealthy": {
"http_failures": 0,
"http_statuses": [ 429, 404, 500, 501,
502, 503, 504, 505 ],
"interval": 0,
"tcp_failures": 0,
"timeouts": 0
}
},
"passive": {
"healthy": {
"http_statuses": [ 200, 201, 202, 203,
204, 205, 206, 207,
208, 226, 300, 301,
302, 303, 304, 305,
306, 307, 308 ],
"successes": 0
},
"unhealthy": {
"http_failures": 0,
"http_statuses": [ 429, 500, 503 ],
"tcp_failures": 0,
"timeouts":