我想要對 Classic Load Balancer 後方無法通過運作狀態檢查的執行個體進行疑難排解。
解決方法
Elastic Load Balancing (ELB) 支援 Application Load Balancers、Network Load Balancers 和 Classic Load Balancers。若要疑難排解 Classic Load Balancer 的運作狀態檢查失敗問題,您可以執行 AWSSupport-TroubleshootELBHealthChecks 執行手冊。此執行手冊會自動分析 Amazon CloudWatch 儀表板中的運作狀態檢查指標,並驗證 Classic Load Balancer 與目標之間的網路組態。對於由 AWS Systems Manager 管理的目標,此執行手冊會提供進階診斷命令,並可選擇將日誌保留在 Amazon S3 中。此解決方案適用於執行個體目標類型。
在 Classic Load Balancers 上執行的執行個體可能會因為以下原因而無法通過運作狀態檢查:
負載平衡器與後端之間發生連線問題
- 請確認後端允許運作狀態檢查流量。若要檢查安全群組規則,請參閱負載平衡器安全群組的建議規則。對於後端執行個體,請參閱虛擬私有雲端 (VPC) 中執行個體的安全群組。
- 包含負載平衡器與後端的子網路,其網路存取控制清單 (網路 ACL) 必須允許運作狀態檢查流量。若要檢查網路 ACL 規則,請參閱VPC 中負載平衡器的網路 ACL。
- 後端上的執行個體層級或作業系統層級防火牆,必須允許運作狀態檢查流量傳入與傳出。
- 後端執行個體的記憶體與 CPU 使用率必須維持在可接受的限制範圍內。如果記憶體或 CPU 使用率過高,請新增更多後端,或將後端升級為較大的執行個體類型。
- 其他資源也必須允許運作狀態檢查流量。後端可能會將運作狀態檢查請求轉送至其他資源。如果其他相依項目沒有回應,或花費太久才回應,運作狀態檢查就會逾時並失敗。請確認其他資源會回應運作狀態檢查請求。
應用程式發生組態問題
- 請確認應用程式正在執行。例如,如果您在 Linux 執行個體上執行 Apache,請使用 sudo service httpd status 命令,確認 Apache 正在執行。
- 應用程式必須接聽運作狀態檢查連接埠。若要確認伺服器是否正在接聽運作狀態檢查連接埠,請在伺服器上執行 netstat -ant 命令。檢查應用程式組態連接埠,以確認應用程式正在執行。若要模擬負載平衡器與後端之間的 TCP 連線,請在執行個體上執行 telnet <backend private IP> <health-check port> 命令。如果輸出為 Connected,表示後端正在接聽運作狀態檢查連接埠。
- 應用程式必須設定為回應包含自訂主機標頭的請求。對於 HTTP 和 HTTPS 運作狀態檢查,Classic Load Balancer 會將標頭設定為後端主要網路介面的私有 IP 位址。Classic Load Balancer 也會將使用者代理程式設定為 ELB-HealthChecker/1.0。如果後端只回應包含自訂主機標頭或使用者代理程式的請求,運作狀態檢查請求就會失敗。
- 應用程式必須接聽後端的主要網路介面。Classic Load Balancers 會連線至後端執行個體的主要網路介面。請確認應用程式正在接聽後端執行個體的主要網路介面。這可讓後端針對運作狀態檢查請求傳送回應。
後端未針對運作狀態檢查請求傳回「200 OK」回應
SSL 問題
- 所有通訊協定與加密套件都必須相符。對於 HTTPS 或 SSL 運作狀態檢查,負載平衡器與後端必須使用相同的通訊協定和加密套件。在後端執行個體上取得的封包擷取,會顯示負載平衡器支援的加密套件與通訊協定。您可以在負載平衡器傳送的用戶端 hello 中找到此資訊。已註冊的後端執行個體必須支援一或多個相符的加密套件,以及負載平衡器傳送的通訊協定。
- 負載平衡器執行運作狀態檢查時,不會傳送伺服器名稱指示 (SNI) 標頭。例如,運作狀態檢查使用 HTTPS/SSL。如果後端執行個體設定為根據特定 SNI 資訊回應 SSL 交握,SSL 交握就會失敗。發生此問題的原因,是伺服器會在用戶端 hello 之後傳送 RST。請將後端伺服器設定為不論 SNI 為何都會回應。或者,您可以改用 TCP 運作狀態檢查。
相關資訊
Classic Load Balancer 的已註冊執行個體