Google云:健康檢查沒有從 HTTP 負載均衡器中刪除失敗的實例
我有一個實例組,在 HTTP 負載均衡器後面有 2 個實例。一個實例啟動並正常執行(返回 http 200),另一個實例崩潰(HTTP 請求超時)。我不確定我做錯了什麼,但根據文件,失敗的實例應該自動從負載均衡器中刪除。
以下是相關文件:https ://cloud.google.com/compute/docs/load-balancing/health-checks 以及相關段落:
為使健康檢查被視為成功,後端必須返回帶有程式碼 200 的有效 HTTP 響應,並在 timeoutSec 期限內正常關閉連接。如果實例未通過執行狀況檢查,則會將其從組或池中刪除,而不會發送任何通知。如果它稍後通過了健康檢查,它會被返回到組或池中,再次沒有任何通知。
這是我目前在我的Google云控制台頁面上看到的 HTTP 負載均衡器後端的內容。
訪問我的網站(<http://stage2.phantomjscloud.com>)時,我得到了大約一半的時間
錯誤:伺服器錯誤 伺服器遇到臨時錯誤,無法完成您的請求。請在 30 秒後重試。
HTTP 負載均衡器(和健康檢查)清楚地檢測到失敗的實例,但無論如何仍會向它提供流量。
我該如何解決這個問題?
我有一段時間(6 個月左右)沒有看到這種錯誤,所以我認為這是 Google Cloud 的錯誤,他們修復了它。
健康檢查託管實例組 VS 健康檢查負載平衡
託管實例組使用的執行狀況檢查與負載平衡使用的執行狀況檢查相同,但在行為上有一些差異。應用於負載平衡服務的執行狀況檢查有助於負載平衡器確定將網路流量引導到何處。這些執行狀況檢查不會導致 Compute Engine 重新創建實例。您應用於託管實例組的執行狀況檢查將主動向託管實例組發出信號,以便在實例變得不健康時刪除並重新創建實例。
對於大多數情況,使用單獨的執行狀況檢查來進行負載平衡和監控託管實例組。負載平衡的健康檢查可以而且應該更加積極,因為這些健康檢查確定實例是否接收使用者流量。由於客戶可能依賴您的服務,因此您希望快速擷取無響應的實例,以便在必要時重定向流量。相比之下,實例組的執行狀況檢查將導致 Compute Engine 主動替換失敗的實例,因此您可以創建比負載均衡器的執行狀況檢查更保守的執行狀況檢查。
<https://cloud.google.com/compute/docs/instance-groups/creating-groups-of-managed-instances#monitoring_groups>