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

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

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

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

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

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

問題:在指定的偵測連接埠和偵測路徑上發出給執行個體的HTTPGET要求 (例如,: 80/index.htmlHTTP) 會收到非 200 回應碼。

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

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

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

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

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

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

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

問題:負載平衡器向EC2執行個體發出的 Health 狀態檢查要求逾時或間歇性失敗。

首先,直接連接執行個體以驗證該問題。我們建議您使用執行個體的私有 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如需詳細資訊,請參閱 Amazon EC2 使用者指南中的取得特定EC2執行個體的統計資料。

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

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

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

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

公有金鑰身分驗證失敗

問題:設定為在啟用後端驗證的情況下使用HTTPS或SSL通訊協定的負載平衡器會失敗公開金鑰驗證。

原因:SSL證書上的公鑰與負載平衡器上配置的公鑰不匹配。使用 s_client 命令查看憑證鏈中的伺服器憑證清單。如需詳細資訊,請參閱開啟SSL文件中的 s_client

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

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

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

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

# tcpdump port health-check-port

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

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

原因 2:負載平衡器的安全性群組不允許流量傳送至EC2執行個體。

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

如需管理安全群組的資訊,請參閱 設定您的 Classic Load Balancer 的安全群組

執行個體上未開啟連接埠

問題:負載平衡器傳送至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 Auto Scaling 使用者指南中的將運作狀態檢查新增至您的 EC2 Auto Scaling 群組