您可以讓 Kong 代理的 API 使用 ring-balancer , 通過添加包含一個或多個目標(biāo)實體的upstream 實體來配置,每個目標(biāo)指向不同的IP地址(或主機名)和端口。ring-balancer 將在不同的target之間平衡負(fù)載,并基于 uptream 配置對目標(biāo)執(zhí)行健康檢查,使它們成為健康或不健康的,無論它們是否響應(yīng),ring-balancer 將只把流量路由到健康的target。
創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站設(shè)計、成都網(wǎng)站制作與策劃設(shè)計,化隆網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)10余年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:化隆等地區(qū)。化隆做網(wǎng)站價格咨詢:028-86922220
Kong 支持兩種健康檢查方式,可以單獨使用,也可以組合使用。
active checks:其中定期請求目標(biāo)中的特定 HTTP 或 HTTPS 端點,并根據(jù)其響應(yīng)確定目標(biāo)的健康狀態(tài);
健康檢查功能的目標(biāo)是為給定的 Kong 節(jié)點動態(tài)地將 target 標(biāo)記為健康或不健康。沒有集群范圍內(nèi)的健康信息同步,每個 Kong 節(jié)點分別確定其 target 的健康狀況。這是可以取到的,因為在給定的點上,一個 Kong 節(jié)點可能能夠成功地連接到一個目標(biāo),而另一個節(jié)點則無法到達(dá)。這樣第一個節(jié)點將認(rèn)為它是健康的,而第二個則會將其標(biāo)記為不健康,并開始將流量路由到upstream 的其他 target。
無論是主動探測(針對主動健康檢查)還是代理請求(針對被動健康檢查),都會生成用于確定目標(biāo)是否健康的數(shù)據(jù)。請求可能會產(chǎn)生TCP錯誤、超時或HTTP狀態(tài)代碼?;诖诵畔?,健康檢查器更新了一系列內(nèi)部計數(shù)器:
如果任何 “TCP failure”、“HTTP failure” 或 “timeout” 計數(shù)器達(dá)到其配置的閾值,則target 將被標(biāo)記為不健康。
如果 “success” 計數(shù)器達(dá)到其配置的閾值,則 target 將被標(biāo)記為健康。
如果一個 upstream 的所有 target 都是不健康,Kong 會將 upstream 的請求返回 503 Service Unavailable
。
健康檢查只對狀態(tài)是 active 的 target 執(zhí)行,不修改 Kong 數(shù)據(jù)庫中目標(biāo)的活動狀態(tài)。
不健康的 target 不會從 loadbalancer 中刪除,因此在使用哈希算法時不會對balancer 布局產(chǎn)生任何影響(只會跳過它們)。
- DNS警告和 Balancer 警告也適用于健康檢查。如果對 target 使用主機名,需要確保DNS服務(wù)器始終為完整的 IP地址和名稱,并且不限制響應(yīng)。如果不這樣做,可能會導(dǎo)致沒有執(zhí)行健康檢查。
健康檢查有兩種類型,分別是 Active health checks
和 Passive health checks
Active health checks 就是主動探測他們的健康狀態(tài)。當(dāng) upstream 實體啟用活動健康檢查時,Kong 將定期向 upstream 的每個 target 的配置路徑發(fā)出 HTTP 或 HTTPS 請求。這允許 Kong 根據(jù)探測結(jié)果自動啟用和禁用 balancer 中的 target 。
Active health checks 的周期性是可以被配置的,當(dāng) target 是健康還是不健康。如果其中一個的interval值設(shè)置為零,則在相應(yīng)的場景中禁用檢查。如果兩者都為零,則完全禁用活動健康檢查。
Passive health checks 是否基于由 Kong 代理的請求(HTTP/HTTPS/TCP)執(zhí)行檢查,而不生成額外的流量。當(dāng) target 變得無響應(yīng)時,被動健康檢查器將檢測到這一點,并將目標(biāo)標(biāo)記為不健康。Ring-balancer 將開始跳過這個 target ,因此不會有更多的流量被路由到它。
當(dāng)目標(biāo)的問題解決,并準(zhǔn)備再次接收流量時,Kong管理員可以手動通知health checker目標(biāo)應(yīng)該再次啟用,通過一個Admin API端點:
$ curl -i -X POST http://localhost:8001/upstreams/my_upstream/targets/10.1.2.3:1234/healthy
HTTP/1.1 204 No Content
這個命令將廣播一個集群范圍的消息,以便將 “health” 狀態(tài)傳播到整個 Kong 集群。這將導(dǎo)致 Kong 節(jié)點重置在 Kong 節(jié)點的所有 worker 中運行的健康檢查器的健康計數(shù)器,從而允許環(huán)平衡器再次將流量路由到目標(biāo)。
被動健康檢查的優(yōu)點是不會產(chǎn)生額外的流量,但它們不能自動將 target 重新標(biāo)記為健康狀態(tài):“circuit is broken”,需要由系統(tǒng)管理員重新啟用目標(biāo)。
Kong 支持使用 Prometheus 進(jìn)行監(jiān)控數(shù)據(jù)采集,并且官方提供了采集方式和 Grafana 的Dashboard 模板
官方的 Kong Plugin Prometheus 會定期更新,看上去比較活躍。
除了官網(wǎng)以外,有網(wǎng)友也提供了一個監(jiān)控模板,不過最后一次更新時間是2018 年 5 月 17 日,之后就沒有更新了,大家也可以參考。kong-prometheus-plugin
Kong 的健康檢查主要介紹了健康檢查的類型,這兩類的健康檢查是可以打開和關(guān)閉的,打開和關(guān)閉的具體方法請參考官網(wǎng)文檔。