啟用連線排除功能

連線排除是一項程序,可確保執行個體群組中的虛擬機器 (VM) 執行個體遭到移除時,或區域範圍內的網路端點群組 (NEG) 移除端點時,系統有充足的時間能夠完成處理中的現有要求。

本頁面的資訊僅適用於執行個體群組,以及下列範圍為區域的 NEG 類型:

只要執行下列操作,連線排除就會開始:

將後端 (執行個體群組或區域 NEG) 與負載平衡器的後端服務中斷連線時,連線排除功能不會生效。

連線排除的運作方式

如要啟用連線排除功能,請在後端服務中設定「連線排除逾時」。逾時時間長度必須介於 0 至 3, 600 秒之間 (含首尾)。

您指定的逾時時間長度屆滿之後,執行個體最多可能需要 60 秒才能終止。

以下是連線排除功能的規格清單:

  • 連線排除功能適用於隸屬於下列負載平衡器的後端服務:

    內部直通式網路負載平衡器和外部直通式網路負載平衡器都支援 TCP、UDP 和其他非 TCP 通訊協定的連線排空。

  • 連線排除功能也適用於 Cloud Service Mesh 部署作業中的後端服務。

  • 設定連線排除逾時後,如果從執行個體群組移除執行個體,或從區域 NEG 移除端點,Trusted Cloud 負載平衡器和 Cloud Service Mesh 的行為如下:

    • 系統不會將任何新連線傳送至已移除的執行個體或端點。

    • 應用程式負載平衡器:在指定的逾時時間長度內,系統會盡可能完成傳送至標示為要移除的 VM 或端點的現有要求。負載平衡器不會將新的連線傳送至這個 VM 或端點。逾時時間長度屆滿之後,負載平衡器就會停止將所有流量傳送至已移除的 VM 或端點。

    • Proxy 網路負載平衡器:在指定的逾時期間內,系統會繼續處理連往標示為移除的 VM 或端點的現有 TCP 連線,直到設定的連線排空期間結束為止。負載平衡器不會將新連線傳送至這個 VM 或端點。逾時時間長度屆滿之後,系統會維持與已移除 VM 或端點的現有 TCP 連線,且 Proxy 會在 10 分鐘內 (預設閒置逾時時間) 關閉所有現有 TCP 連線。

    • 直通網路負載平衡器:在指定的連線排空逾時時間長度內,屬於現有連線的封包會轉送至標示為要移除的 VM 或端點。逾時時間長度屆滿之後,系統就會移除已移除 VM 或端點的 conntrack 項目。來自現有連線的任何非 SYN 封包,都會導致為健康狀態良好的後端建立新的 conntrack 項目。當封包傳送至新的正常後端時,後端會將 RST 傳送至用戶端,因為後端沒有剛收到的封包記錄。連線排空逾時到期後,內部和外部直通式網路負載平衡器本身不會傳送 TCP-RST 或 TCP-FIN 來終止現有連線。

  • 如果您為共用相同執行個體群組或 NEG 的不同後端服務啟用連線排除功能,系統會採用最大的逾時值。舉例來說,假設同一個執行個體群組或區域 NEG 是兩個後端服務的後端,其中一個後端服務的連線排除逾時為 100 秒,另一個後端服務的連線排除逾時為 200 秒。 Trusted Cloud 會使用 200 秒做為有效連線排除逾時,然後終止這些後端服務。如果後端是代管執行個體群組,刪除執行個體的操作會延遲至少 200 秒。

  • 如果未設定連線排除逾時,或將連線排除逾時設為零 (0), Trusted Cloud 會盡快終止已移除執行個體或端點上的現有連線。

  • 如果您使用連線共用,可能會發現使用先前建立連線的新要求,仍會傳送至正在排除的 VM,導致這些 VM 最終遭到刪除時發生連線錯誤。

啟用連線排除功能

如要啟用連線排空,請完成下列步驟。

主控台

更新負載平衡器

  1. 前往 Trusted Cloud 控制台的「Load balancing」(負載平衡) 頁面。
    前往「Load balancing」(負載平衡) 頁面
  2. 在「Load Balancers」(負載平衡器) 分頁中,找到要更新的負載平衡器,然後依序點選 more_vert 和「Edit」(編輯)
  3. 按一下「後端設定」
  4. 在「後端設定」窗格中,按一下
  5. 在「編輯後端服務」窗格底部,按一下「進階設定」
  6. 在「Connection draining timeout」(連線排除逾時) 欄位中,輸入介於 03600 之間的值。如果設定值為 0,系統會停用連線排除功能。

gcloud

請使用 --connection-draining-timeout 旗標,在現有或新的後端服務中啟用連線排除功能。以下範例說明如何變更連線排空逾時:

  • 如為現有的區域性負載平衡器

    gcloud compute backend-services update BACKEND_SERVICE \
        --region=REGION \
        --connection-draining-timeout=CONNECTION_TIMEOUT_SECS
    

將預留位置替換為有效值:

  • BACKEND_SERVICE:您要更新的後端服務
  • REGION:如果適用,您要更新的後端服務區域
  • CONNECTION_TIMEOUT_SECS:終止執行個體或端點的現有連線前等待的秒數,這個值必須介於 03600 之間 (含首尾)。如果設定值為 0,系統會停用連線排除功能。連線排除逾時設定會套用至後端服務的所有後端。

    您也可以使用 gcloud compute backend-services edit 指令更新現有的後端服務。

API

如要在建立或更新執行個體或端點時透過 API 啟用連線排除功能,請對相應的 API URI 發出要求,並在要求內文中加入 connectionDraining 欄位。以下範例說明如何編輯現有的後端服務,設定該屬性。如要瞭解其他必要屬性,請參閱各負載平衡器的說明文件。

  • 如為現有的區域性負載平衡器

    PATCH https://www.googleapis.com/compute/v1/projects/PROJECT_ID/region/REGION/backendServices
    
    {
       "name": "BACKEND_SERVICE",
       "connectionDraining": {
         "drainingTimeoutSec": CONNECTION_TIMEOUT_SECS
       }
    }
    

    更改下列內容:

    • PROJECT_ID:包含負載平衡器或 Cloud Service Mesh 部署作業的專案 ID
    • :負載平衡器或 Cloud Service Mesh 部署作業使用的後端服務BACKEND_SERVICE
    • CONNECTION_TIMEOUT_SECS:從執行個體群組或 NEG 移除執行個體或端點前的等待秒數,這個值必須介於 0 至 3,600 之間 (含首尾)。這項逾時時間長度設定會套用至後端服務參照的所有執行個體群組或 NEG。

後續步驟

如需後端服務的一般性資訊,請參閱後端服務總覽