跳至內容

如何疑難排解並修正 Classic Load Balancer 的運作狀態檢查失敗問題?

1 分的閱讀內容
0

我想要對 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」回應

  • Ping 路徑必須有效。如果您未在後端設定 Ping 路徑中指定的檔案,後端可能會回應 404 Not Found。這會造成運作狀態檢查失敗。
    **注意:**Ping 路徑的預設值為 /index.html。如果後端沒有 index.html 檔案,請建立該檔案。或者,您可以將 Ping 路徑的值變更為後端上的檔案名稱。
  • 您未在後端正確設定重新導向。重新導向設定不正確可能會產生 301302 回應碼,並造成運作狀態檢查失敗。例如,如果後端設定為從 HTTP:80 重新導向至 HTTPS:443,連接埠 80 上的 HTTP 運作狀態檢查就會失敗。您必須將運作狀態檢查變更為 HTTPS,並將運作狀態檢查連接埠變更為 443。 
    **注意:**您可以模擬負載平衡器傳送的運作狀態檢查請求。請從與負載平衡器相關聯之子網路中的執行個體,使用以下 curl 命令:
    curl -Ivk http[s]://<private-IP-address-of-the-backend-instance>:<health-check-port>/<health-check-target-page>

SSL 問題

  • 所有通訊協定與加密套件都必須相符。對於 HTTPS 或 SSL 運作狀態檢查,負載平衡器與後端必須使用相同的通訊協定和加密套件。在後端執行個體上取得的封包擷取,會顯示負載平衡器支援的加密套件與通訊協定。您可以在負載平衡器傳送的用戶端 hello 中找到此資訊。已註冊的後端執行個體必須支援一或多個相符的加密套件,以及負載平衡器傳送的通訊協定。
  • 負載平衡器執行運作狀態檢查時,不會傳送伺服器名稱指示 (SNI) 標頭。例如,運作狀態檢查使用 HTTPS/SSL。如果後端執行個體設定為根據特定 SNI 資訊回應 SSL 交握,SSL 交握就會失敗。發生此問題的原因,是伺服器會在用戶端 hello 之後傳送 RST。請將後端伺服器設定為不論 SNI 為何都會回應。或者,您可以改用 TCP 運作狀態檢查。

相關資訊

Classic Load Balancer 的已註冊執行個體

AWS 官方已更新 4 個月前