您可让Kong代理的API使用ring-balancer,经过添加包含一个或多个目标实体的 upstream 实体进行配置,每一个 target指向不一样的IP地址(或主机名)和端口。ring-balancer将在各类目标之间负载,并基于上游对目标执行健康检查,使它们不管是否响应都是健康的或不健康的。而后,ring-balancer 只会将流量路由到健康的目标。算法
Kong有两种健康检查方法,可分别或同时使用:数据库
健康检查功能的目标是为给定的Kong节点动态地将目标标记为健康或不健康。没有集群范围内的健康信息同步:每一个Kong节点分别决定其目标的健康。这是可取的,由于某个Kong节点能够链接到一个目标,但另外一个Kong节点未必能链接该目标:第一个节点将考虑它健康,而另外一个将其标记为不健康的,将请求路由到其余目标(健康)。json
主动探测(在主动健康检查上)或代理请求(在被动健康检查上)都会生成用于肯定目标是否健康的数据。请求可能会产生TCP错误、超时或HTTP状态代码。基于此信息,健康检查器更新一系列内部计数器:api
若是任何“TCP失败”、“HTTP失败”或“超时”计数器达到其配置的阈值,目标将被标记为不健康。bash
若是“成功”计数器达到其配置的阈值,则将目标标记为健康。服务器
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": 0 } }