iT邦幫忙

2025 iThome 鐵人賽

DAY 9
0
Cloud Native

與雲原生精靈共舞:APISIX使用者的兩年旅程系列 第 9

Ch5 - APISIX 健康檢查:告別「白跑一趟」,讓你的服務聰明運作!

  • 分享至 

  • xImage
  •  

就像是出去玩要先查店家有沒有開,可以透過直接打電話給店家、請朋友先協助確認等成本比較低的方式。在服務檢查部分,通常使用「Health Check」。

https://ithelp.ithome.com.tw/upload/images/20250923/2011247087TwHpbBFs.png

APISIX提供「主動」和「被動」的檢查機制。

  • 主動:就是定期檢查上游服務節點是否健康。
  • 被動:只有有請求要轉發時,才檢查並記錄。

建立健康檢查端點

爲了提供APISIX健康檢查端點,我們在「新竹百貨公司」服務節點下,再添加一個檔案充當健康檢查結果,那麼就直接取名這個檔案叫做health.json

{"status": "health"}

接著可以透過檢查 http://新竹百貨公司.com:9080/health.json 來檢查健康狀態。(可將端口改成特定節點監聽端口,以檢查特定節點的健康狀態)

示範上設計簡單一點:只要有回傳檔案,HTTP回應狀態碼是200或201就是健康;反之找不到檔案,回應狀態碼是404就是不健康。

設定主動檢查

欄位 備註
HTTP Path /health.json 健康檢查端點
Interval 1 檢查間格(秒)
Successes 2 連續成功2次數健康後,視爲節點健康。恢復轉發請求。
HTTP Status 200 回應狀態爲200視爲健康
欄位 備註
Timeouts 3 連線、回應超時3秒同樣視爲不健康
Interval 1 檢查間格(秒)
HTTP Status 404 回應狀態爲404視爲不健康
HTTP Failures 5 HTTP檢查累計超過5次,視爲節點不健康。停止轉發請求。
TCP Failures 2 TCP檢查累計超過2次,視爲節點不健康。停止轉發請求。

https://ithelp.ithome.com.tw/upload/images/20250923/20112470jLl2SWlUwo.png

設定被動檢查

欄位 備註
HTTP Status 200 回應狀態爲200視爲健康
Successes 5 連續成功5次數健康後,視爲節點健康。恢復轉發請求。
欄位 備註
Timeouts 7 連線、回應超時7秒同樣視爲不健康
TCP Failures 2 TCP檢查累計超過2次,視爲節點不健康。停止轉發請求。
HTTP Failures 2 HTTP檢查累計超過2次,視爲節點不健康。停止轉發請求。
HTTP Status 404 回應狀態爲404視爲不健康

https://ithelp.ithome.com.tw/upload/images/20250923/20112470ttM4My3l77.png

正常情況測試

不設定優先序,所有節點都可以去,但仍保留各自權重。測試一百次請求結果:

百貨公司 拜訪次數
新竹巨城 31 次
新竹SOGO 31 次
新竹大遠百 26 次
竹北大遠百 12 次

竹北放假

接著可以透過刪除或重新命名health.json檔案模擬檢查不健康的情況:

mv health.json unhealth.json

https://ithelp.ithome.com.tw/upload/images/20250923/20112470FXjKC2Shpi.png

然後會發現APISIX的後臺記錄顯式:unhealthy HTTP increment (5/5) for '(192.168.56.3:8084)'

apisix  | 2025/09/07 15:16:48 [warn] 49#49: *1742487 [lua] healthcheck.lua:1150: log(): [healthcheck] (upstream#/apisix/upstreams/583310545831068350) unhealthy HTTP increment (1/5) for '(192.168.56.3:8084)', context: ngx.timer, client: 192.168.56.1, server: 0.0.0.0:9080
apisix  | 2025/09/07 15:16:49 [warn] 49#49: *1742616 [lua] healthcheck.lua:1150: log(): [healthcheck] (upstream#/apisix/upstreams/583310545831068350) unhealthy HTTP increment (2/5) for '(192.168.56.3:8084)', context: ngx.timer, client: 192.168.56.1, server: 0.0.0.0:9080
apisix  | 2025/09/07 15:16:50 [warn] 49#49: *1742738 [lua] healthcheck.lua:1150: log(): [healthcheck] (upstream#/apisix/upstreams/583310545831068350) unhealthy HTTP increment (3/5) for '(192.168.56.3:8084)', context: ngx.timer, client: 192.168.56.1, server: 0.0.0.0:9080
apisix  | 2025/09/07 15:16:51 [warn] 51#51: *1742873 [lua] healthcheck.lua:1150: log(): [healthcheck] (upstream#/apisix/upstreams/583310545831068350) unhealthy HTTP increment (4/5) for '(192.168.56.3:8084)', context: ngx.timer, client: 192.168.56.1, server: 0.0.0.0:9080
apisix  | 2025/09/07 15:16:52 [warn] 51#51: *1742992 [lua] healthcheck.lua:1150: log(): [healthcheck] (upstream#/apisix/upstreams/583310545831068350) unhealthy HTTP increment (5/5) for '(192.168.56.3:8084)', context: ngx.timer, client: 192.168.56.1, server: 0.0.0.0:9080

https://ithelp.ithome.com.tw/upload/images/20250923/201124700gsYf3OCPR.png

在訪問一百次看看:

百貨公司 拜訪次數
新竹巨城 34 次
新竹SOGO 36 次
新竹大遠百 30 次
竹北大遠百 0 次

這次並沒有像「從百貨公司案例,看懂 APISIX 的負載平衡魔法!」那樣白跑一趟了!

竹北大遠百颱風假仍然開業

mv unhealth.json health.json; ls

https://ithelp.ithome.com.tw/upload/images/20250923/20112470efLm8dENZ6.png

透過恢復health.json檔案,讓健康檢查重新加入節點。同樣可以在APISIX的後臺記錄看到:healthy SUCCESS increment (2/2) for '(192.168.56.3:8084)'

apisix  | 2025/09/07 15:21:29 [warn] 49#49: *1778182 [lua] healthcheck.lua:1150: log(): [healthcheck] (upstream#/apisix/upstreams/583310545831068350) healthy SUCCESS increment (1/2) for '(192.168.56.3:8084)', context: ngx.timer, client: 192.168.56.1, server: 0.0.0.0:9080
apisix  | 2025/09/07 15:21:30 [warn] 49#49: *1778310 [lua] healthcheck.lua:1150: log(): [healthcheck] (upstream#/apisix/upstreams/583310545831068350) healthy SUCCESS increment (2/2) for '(192.168.56.3:8084)', context: ngx.timer, client: 192.168.56.1, server: 0.0.0.0:9080

https://ithelp.ithome.com.tw/upload/images/20250923/20112470m3vE1MjaPR.png

在拜訪一百次結果:

百貨公司 拜訪次數
新竹巨城 30 次
新竹SOGO 31 次
新竹大遠百 26 次
竹北大遠百 13 次

上一篇
Ch4 - 權重、優先級怎麼設?從百貨公司案例,看懂 APISIX 的負載平衡魔法!
下一篇
幕間 - 事件:SSO服務節點異常潮下,APSIX的負載平衡機制如何臨危救駕?
系列文
與雲原生精靈共舞:APISIX使用者的兩年旅程10
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
lagagain
iT邦新手 2 級 ‧ 2025-09-23 06:26:57

前一篇不知道為什麼被下架,再發表一次

https://ithelp.ithome.com.tw/upload/images/20250923/20112470o2XAAJp0Tp.png

我要留言

立即登入留言