連線排除

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

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

只要執行下列操作,系統就會套用連線排除:

從負載平衡器的後端服務移除後端群組 (執行個體群組或區域性 NEG) 時,系統不會套用連線排除功能。

連線排除的運作方式

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

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

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

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

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

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

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

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

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

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

    • 直通式網路負載平衡器:在指定的連線排空逾時時間長度內,屬於現有連線的封包會路由至標示為要移除的 VM 或端點。逾時時間到期後,負載平衡器會移除連線追蹤項目。連線追蹤資料表項目移除後,系統會按照後端選取和連線追蹤程序,將連線的後續封包路由至其他後端 VM 或端點。如果是 TCP 連線,不同的後端不會記錄現有連線,因此可能會傳送 TCP 重設 (RST) 封包來關閉連線,並允許用戶端開啟與負載平衡器的新連線。請注意,直通式網路負載平衡器本身無法傳送 RSTFIN 封包來關閉連線。

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

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

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

啟用連線排除功能

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

控制台

更新負載平衡器

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

更新 Cloud Service Mesh

  1. 前往 Google Cloud 控制台的「Cloud Service Mesh」頁面。
    前往 Cloud Service Mesh
  2. 按一下服務的「名稱」
  3. 在「服務詳細資料」頁面中,按一下「編輯」圖示
  4. 按一下服務底部的「Advanced configurations」(進階設定)
  5. 在「Connection draining timeout」(連線排除逾時) 欄位中,輸入介於 03600 之間的值。如果設定值為 0,系統會停用連線排除功能。
  6. 按一下 [儲存]

gcloud

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

  • 如果是現有的全域或跨區域負載平衡器

    gcloud compute backend-services update BACKEND_SERVICE \
        --global \
        --connection-draining-timeout=CONNECTION_TIMEOUT_SECS
    
  • 如果是現有的區域負載平衡器

    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/global/backendServices
    
  • 如果是現有的區域負載平衡器

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

後續步驟