[GCP FAQ 集錦] 一篇文章排解 GCP HTTP(S) Load Balancer 常見技術問題

Gloabal HTTP(S) Load Balancing 是高效能、可擴充的 Google Cloud Platform 負載平衡服務。HTTP(S) Load Balancing 服務可以跨地區平衡多個後端執行個體的 HTTP 與 HTTPS 流量。上一篇文章已經帶您手把手建立 HTTP(S) Load Balancer,可參考文章 command line 版本 以及 console 版本。此篇文章與您分享如何排查常見的 Load Balancer 錯誤。

常見問題

Q1:我建立完 Load Balancer 之後,curl 或是開啟該 Load Balancer 的 IP 都會一直出現 502 的錯誤訊息?

A1:HTTP(S) Load Balancer 為全球性的 GCP 資源,新建立完 Load Balancer 之後,GCP 需要把您設定的 Load Balancer 資訊更新至 GCP 的所有節點。更新時間約為 10 至 15 分鐘。

Q2:我建立完 Load Balancer 之後,等待超過 15 分鐘還是無法連到後端的伺服器。

A2:需要先請您查看 Load Balancer 所產生的錯誤訊息來排查,Load Balancer 產生的錯誤可以前往 GCP console 的 Stackdriver Logging > Logs Viewer 頁面。並在左上角的下拉選單選取 Cloud HTTP Load Balancer。

下圖為範例,可以看到此紀錄包括 Load Balancer 的 IP、Project ID,點開 jsonPayload 可以看到該 request 的 status details。以下為常見的 statusDetails error:

  • “502 failed_to_pick_backend”
    • 這個錯誤訊息是指 Load Balancer 無法把 request 導至後端伺服器,因為後端伺服器中沒有可以處理請求的伺服器(Healthy sever)。需要檢查Health checks 是不是沒有設定或是防火牆規則設錯,請參考文件或是文章最初的教學文章
  • “502 backend_connection_closed_before_data_sent_to_client” 
    • Nginx 或是 Apache 伺服器的 keep_alivetimeout 設定太短,根據官方文件的建議,把 keep_alivetimeout 調高
    • Nginx 的 worker_connections 不夠,預設為 512 個。如果需要調高 worker_connections 可以參考 Nginx 官方文件
  • “502 failed_to_connect_to_backend”
    • Load Balancer -> VMs(應用程式)
      • 應用程式本身的無法在 timeout 前回應,建議先直接對後端伺服器(VM instance,不透過 Load Balancer)請求看看是否也會有 502 error,如果還有的話那就得從應用端來解決。
    • Load Balancer -> VM(Nginx proxy) -> VMs(應用程式)
      • 假如您在 Load Balancer 後面開一台 Nginx 當作 Proxy,則也有可能是該台 Nginx 沒有正常運作。
  • “502 backend_timeout”
    • 應用程式本身無法在 backend timeout 前回應,預設 backend service 的 timeout 為 30 秒,如果需要調高可以參考官方文件

如果上述的方法無法解決您的問題,可以嘗試重新建立 Load Balancer。以下就是常見的 Load Balancer 錯誤排查方法。

 

相關文章

如何設定 GCP HTTP(S) 負載平衡器(GCP console 版本)

拆解 GCP 和 AWS 雲端負載平衡功能和比較

如何設定 GCP HTTP(S) 負載平衡器


連絡「GCP 專門家」