您可讓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 } }