故障診斷 Classic Load Balancer:運作狀態檢查 - Elastic Load Balancing

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

故障診斷 Classic Load Balancer:運作狀態檢查

您的負載平衡器會檢查其已註冊執行個體的運作狀態,使用方式是透過 Elastic Load Balancing 所提供預設的運作狀態檢查組態,或是您指定的自訂運作狀態檢查組態。運作狀態檢查組態包含資訊,例如通訊協定、ping 連接埠、ping 路徑、回應逾時及運作狀態檢查間隔。如果在運作狀態檢查間隔內傳回 200 個回應代碼,執行個體會被視為運作狀態良好。如需更多詳細資訊,請參閱 為您的 Classic Load Balancer 設定運作狀態檢查

如果部分或所有執行個體目前狀態是 OutOfService,且描述欄位顯示訊息Instance has failed at least the Unhealthy Threshold number of health checks consecutively,則表示執行個體的負載平衡器運作狀態檢查失敗。以下是要尋找的問題、可能原因,以及解決問題所需採取的步驟。

運作狀態檢查目標頁面錯誤

問題:在指定的 ping 連接埠和 ping 路徑 (例如,HTTP:80/index.html) 上對執行個體發出的 HTTP GET 請求,接收非 200 回應代碼。

原因 1:未在執行個體上設定目標頁面。

解決方案 1:在每個註冊執行個體建立目標頁面 (例如, index.html),並指定其路徑做為 ping 路徑。

原因 2:在回應中未設定 Content-Length 標頭的值。

解決方案 2:如果回應包含內文,然後將 Content-Length 標頭設為大於或等於零的值,或設定 Transfer-Encoding 值為「區塊」。

原因 3:應用程式未設定為從負載平衡器接收請求,或傳回 200 回應代碼。

解決方案 3:檢查您執行個體上的應用程式以調查原因。

與執行個體的連線已經逾時。

問題:從您的負載平衡器到 EC2 執行個體的運作狀態檢查請求將逾時,或產生間歇性故障狀況。

首先,直接連接執行個體以驗證該問題。我們建議您使用執行個體的私有 IP 地址,從網路內連接到您的執行個體。

使用下列適用於 TCP 連的命令:

telnet private-IP-address-of-the-instance port

使用下列適用於 HTTP 或 HTTPS 連線的命令:

curl –I private-IP-address-of-the-instance:port/health-check-target-page

如果您正在使用 HTTP/HTTPS 連線,並取得非 200 回應,請參閱運作狀態檢查目標頁面錯誤。如果您能夠直接連接到執行個體,請檢查下列各項:

原因 1:執行個體在設定的回應逾時時間內沒有回應。

解決方案 1:在負載平衡器的運作狀態檢查的組態中調整回應逾時設定。

原因 2:執行個體承受極大的負載,並使用超過您設定的回應逾時時間來回應。

解決方案 2

  • 檢查 CPU 過度使用的監控圖形。如需相關資訊,請參閱適用於 Linux 執行個體的 Amazon EC2 使用者指南中的取得特定 EC2 執行個體的統計資料

  • 連接到您的 EC2 執行個體,檢查其他應用程式資源的使用率,例如記憶體或限制。

  • 如有必要,新增更多執行個體或啟用 Auto Scaling。如需詳細資訊,請參閱 Amazon EC2 Auto Scaling 使用者指南

原因 3:如果您使用的是 HTTP 或 HTTPS 連線,且在 ping 路徑欄位中指定的目標頁面上執行運作狀態檢查 (例如,HTTP:80/index.html),目標頁面可能會使用比您設定的逾時更長時間來回應。

解決方案 3:使用較簡單的運作狀態檢查目標頁面,或調整運作狀態檢查間隔設定。

公有金鑰身分驗證失敗

問題:負載平衡器設定為使用已啟用後端身分驗證之 HTTPS 或 SSL 通訊協定,但未通過公有金鑰身分驗證。

原因:在 SSL 憑證上的公有金鑰,與負載平衡器上設定的公有金鑰不符。使用 s_client 命令查看憑證鏈中的伺服器憑證清單。如需詳細資訊,請參閱 OpenSSL 文件中的 s_client

解決方案:您可能需要更新您的 SSL 憑證。如果您的 SSL 憑證是目前最新的,請嘗試將它重新安裝在負載平衡器上。如需更多詳細資訊,請參閱 更換 Classic Load Balancer 的 SSL 憑證

執行個體不會接收負載平衡器的流量

問題:執行個體的安全群組封鎖來自負載平衡器的流量。

在執行個體上擷取封包以確認問題。使用下列命令:

# tcpdump port health-check-port

原因 1:與執行個體關聯的安全群組不允許負載平衡器的流量。

解決方案 1:編輯執行個體安全群組,以允許來自負載平衡器的流量。新增規則以允許來自負載平衡器安全群組的所有流量。

原因 2:在 VPC 中的負載平衡器安全群組,不允許 EC2 執行個體的流量。

解決方案 2:編輯您的負載平衡器的安全群組,以允許流量流往子網路和 EC2 執行個體。

如需管理安全群組的資訊,請參閱 在 VPC 中負載平衡器的安全群組

執行個體上未開啟連接埠

問題:由負載平衡器傳送到 EC2 執行個體的運作狀態檢查,已遭連接埠或防火牆封鎖。

使用下列命令以確認問題:

netstat –ant

原因:指定的運作狀態連接埠或接聽程式連接埠 (如果設定不同) 未開啟。兩個指定的連接埠的運作狀態檢查和接聽程式連接埠,必須開啟和接聽。

解決方案:在您的執行個體上開啟接聽程式連接埠,和您的運作狀態檢查組態中指定的連接埠 (如果設定不同),以接收負載平衡器流量。

Auto Scaling 群組中的執行個體未通過 ELB 運作狀態檢查

問題:您的 Auto Scaling 群組中的執行個體,通過預設的 Auto Scaling 運作狀態檢查,但未通過 ELB 運作狀態檢查。

原因:Auto Scaling 使用 EC2 狀態檢查來偵測硬體和軟體的執行個體問題,但負載平衡器執行運作狀態檢查方式是傳送請求到執行個體,並等待 200 個回應代碼,或建立 TCP 連線 (針對以 TCP 為基礎的運作狀態檢查)。

執行個體可能不會通過 ELB 運作狀態檢查,因為在執行個體上執行的應用程式問題造成負載平衡器認定執行個體已停止服務。此執行個體可能通過 Auto Scaling 運作狀態檢查,它不會被取代為 Auto Scaling 政策,因為它是根據 EC2 狀態檢查而被認定運作狀態正常。

解決方案:使用您的 Auto Scaling 群組適用的 ELB 運作狀態檢查。當您使用 ELB 運作狀態檢查,Auto Scaling 會透過檢查執行個體狀態檢查和 ELB 運作狀態檢查的結果,判斷您的執行個體的運作狀態。如需詳細資訊,請參閱 Amazon EC2 Auto Scaling 使用者指南中的為 Auto Scaling 群組新增運作狀態檢查