使用目標集區

目標集區是一組後端執行個體,可以接收從區域外部直通式網路負載平衡器傳入的流量。目標集區的所有後端執行個體都必須位於同一個Google Cloud 區域。區域外部直通式網路負載平衡器可使用後端服務或目標集區,定義後端執行個體群組。如要建立新的區域外部直通式網路負載平衡器,建議使用後端服務

本頁說明目標集區後端的設定選項。當區域外部直通式網路負載平衡器的轉送規則將流量導向目標集區時,負載平衡器會根據來源 IP 位址、來源通訊埠、目的地 IP 位址和目的地通訊埠的雜湊,從目標集區中選擇執行個體。

如果打算讓目標集區包含單一虛擬機器 (VM),請考慮使用通訊協定轉送功能,而非負載平衡。

目標集區屬性

目標集區可與處理 TCPUDP 流量的轉送規則搭配使用。您必須先建立目標集區,才能搭配轉送規則使用。

目標集區使用舊版 HTTP 健康狀態檢查

目標集區是由下列屬性組成:

name
目標集區的名稱。名稱在專案中必須是唯一的,長度介於 1 到 63 個字元之間,且符合規則運算式:[a-z]([-a-z0-9]*[a-z0-9])?,也就是說,第一個字元必須是小寫字母,後續所有字元則必須由連字號、小寫字母或數字組成,但最後一個字元不得為連字號。
description
選用。目標集區的使用者定義描述。
region

目標池區域的完整 URL。這個區域應與後端執行個體位於同個區域。例如:

"region" : "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION"

healthChecks[ ]

選填。此目標池的可選健康檢查清單。一個目標集區只能附加一項健康狀態檢查。請參閱健康檢查以瞭解更多資訊。

instances[ ]

應處理這個目標集區流量的執行個體網址清單。所有執行個體必須與目標集區位於同個地區中,但是各執行個體可以分別屬於該地區中的不同區域。例如:

"instances" : [
  "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE",
  "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE-2"
]
sessionAffinity

選填。控制用於選擇後端虛擬機執行個體的方法。您只能在建立目標集區時設定這個值。這個值一旦設定後就無法修改。雜湊方法會根據以下 5 個值的組合方式選擇後端:

  • 來源/目的地 IP
  • 來源/目的地通訊埠
  • 第 4 層通訊協定 (TCP、UDP)

可能採用的雜湊方式包括:

NONE (表示未指定雜湊) (預設值)
5 值組雜湊,使用來源 IP、目的地 IP、來源通訊埠、目的地通訊埠及通訊協定。每個新連接都可能最終連接到任何實例,但給定連接的所有流量將保留在同一實例上(如果實例保持健康)。
CLIENT_IP_PROTO
3 值組雜湊,使用來源 IP、目的地 IP 及通訊協定。只要用戶端使用的通訊協定與執行個體相同,且執行個體的狀態保持健康,來自用戶端的所有連線都會終止於同一個執行個體。
CLIENT_IP
2 值組雜湊,使用來源 IP 和目的地 IP。只要執行個體的狀態保持健康,不論使用哪種通訊協定,來自用戶端的所有連接都會終止於同一執行個體。

5 值組雜湊能讓流量在多個虛擬機器之間平均分配。但是,來自同個用戶端的第二個工作階段卻可能到達不同的執行個體,因為來源通訊埠可能已經改變。如果希望來自同個用戶端的所有工作階段都到達相同的後端 (在後端的狀態保持健康的前提下),您可以指定 CLIENT_IP_PROTOCLIENT_IP 選項。

一般來說,如果您選擇的是 3 值組或 2 值組雜湊法,應該會提供比預設的 5 值組雜湊法更好的工作階段相依性,但流量的整體分配情況卻可能較不平均。

分段 UDP 封包:如果您正在負載平衡的 UDP 流量可能遭切割成片段,請將工作階段相依性設定為 CLIENT_IP_PROTOCLIENT_IP。不要使用 NONE(5 元組雜湊)。這是因為除了第一個 UDP 分片之外的其他分片不攜帶連接埠號,負載平衡器可能會丟棄沒有連接埠號的分片。有關更多信息,請參閱 負載平衡和分片 UDP 資料包

backupPool

選填。指向另一個目標資源池資源的完整 URL。備份池是指另一個目標池所引用的目標池。使用這項功能時,您還必須定義 failoverRatio。如果目標集區中健康虛擬機器的比率低於 failoverRatio,區域性外部直通式網路負載平衡器會將流量傳送至備用集區。每個目標集區只能提供一個備用集區。備用集區必須與目標集區位於相同的地區。如果目標集區中健康執行個體的比率低於設定的容錯移轉率,區域外部直通式網路負載平衡器會使用以下規則來轉送流量:

  1. 如果目標集區中健康執行個體與執行個體總數的比率低於容錯移轉比,流量就會傳送至備用集區中的健康執行個體。
  2. 如果目標集區中健康執行個體與執行個體總數的比率低於容錯移轉比,但備用集區中沒有剩餘的健康執行個體,流量就會傳送至目標集區中剩餘的健康執行個體。
  3. 如果目標池不為空,且目標池和備份池中的所有實例都未能通過健康檢查,則作為最後的手段,流量將被發送到目標池中的所有實例。
  4. 如果目標集區為空,且備用集區中的所有執行個體健康狀態檢查都失敗,系統會將流量傳送至備用集區中的所有執行個體,做為最後手段。

最多只能支援一個層級的容錯移轉。例如,如果目標池 A 有備份池 B,備份池 B 有備份池 C,那麼發送到目標池 A 的流量就只能定向到備份池 B,而不能定向到備份池 C。

failoverRatio

選填。介於 0.01.0 之間的浮動值,用於決定目標集區何時應宣告為不健康。舉例來說,如果此值設為 0.1,那麼如果健康執行個體的數量低於 0.1 (10%),目標集區就會被宣告為不健康。如果容錯移轉率設為 0.0,那麼必須至少有一個後端是健康的,才能將整個集區視為健康。如果故障轉移率設定為 1.0,則所有實例都必須處於健康狀態,池才能被視為健康。如果您定義了 backupPool 字段,則必須定義此項。

容錯移轉條件

條件 新連結前往
容錯移轉率 !=0,目標集區中健康狀態良好的 VM >= FR 目標集區
容錯移轉比率 =0,目標集區中健康虛擬機器數量 > 0 目標集區
容錯移轉率 !=0、目標集區中健康狀態良好的 VM < FR,且備份集區中至少有一個 VM 健康狀態良好 備用集區
容錯移轉率 =0,目標集區中健康狀態良好的 VM 數量 = 0,且備用集區中至少有一個 VM 健康狀態良好 備用集區
目標集區中至少有一個 VM,且目標集區中的所有 VM 健康狀態不良,備用集區中的所有 VM 健康狀態不良 目標集區 (最後手段)
目標集區中沒有 VM,且備份集區中的所有 VM 狀態都不良 備用集區 (最後手段)
目標集區和備份集區中都沒有 VM 流量已遭捨棄

建立目標集區

控制台

無法在 Google Cloud 控制台中建立目標集區。 您可以使用 Google Cloud CLI 或 API 建立目標集區。

若要瞭解如何使用 Google Cloud CLI 建立基於目標池的區域外部直通網路負載平衡器,請參閱 使用目標池設定區域外部直通網路負載平衡器

gcloud

若要使用 gcloud compute 建立目標池,請使用 target-pools create 指令

  gcloud compute target-pools create TARGET_POOL \
      [--backup-pool=BACKUP_POOL] \
      [--description=DESCRIPTION] \
      [--failover-ratio=FAILOVER_RATIO] \
      [--http-health-check=HEALTH_CHECK] \
      [--region=REGION]
      [--session-affinity=SESSION_AFFINITY; default="NONE"]

更改下列內容:

  • TARGET_POOL: 目標池的名稱
  • BACKUP_POOL:備份目標集區的名稱
  • DESCRIPTION:目標集區的說明
  • FAILOVER_RATIO:介於 0.0 和 1.0 之間的值,用於決定目標集區何時應宣告為不健康
  • HEALTH_CHECK: 對此目標池進行健康檢查
  • REGION: 目標池的一個區域
  • SESSION_AFFINITY:用於選取後端虛擬機器執行個體的方法

API

如要在 API 中建立目標集區,請向下列 URI 發出 HTTP POST 要求:

  https://www.googleapis.com/v1/compute/projects/PROJECT_ID/regions/REGION/targetPools
  {
    "name": name,
    "instances": [
       "https://www.googleapis.com/v1/compute/project/PROJECT_ID/zones/ZONE/instances/INSTANCE",
       "https://www.googleapis.com/v1/compute/project/PROJECT_ID/zones/ZONE/instances/INSTANCE-2",
    ]
  }
 

更改下列內容:

  • PROJECT_ID: Google Cloud 專案 ID
  • ZONE:目標集區執行個體所在的可用區
  • INSTANCEINSTANCE-2:要新增至目標集區的執行個體

在目標集區中新增或移除執行個體

控制台

您無法在 Google Cloud 控制台中編輯目標集區。 您可以使用 Google Cloud CLI 或 API 編輯目標集區。

gcloud

如要使用 gcloud compute 將執行個體新增至目標集區,請使用 target-pools add-instances 指令

  gcloud compute target-pools add-instances TARGET_POOL \
      --instances=INSTANCE,[INSTANCE-2,...]

更改下列內容:

  • TARGET_POOL:目標集區的名稱
  • INSTANCE, INSTANCE-2: 要加入到目標池的實例(或多個實例)的名稱。

如要移除執行個體,請使用 target-pools remove-instances 指令

  gcloud compute target-pools remove-instances TARGET_POOL \
      --instances=INSTANCE,[INSTANCE-2,...]

更改下列內容:

  • TARGET_POOL:目標集區的名稱
  • INSTANCEINSTANCE-2:要從目標集區中移除的執行個體名稱

API

在 API 中,將 POST 要求傳送至下列 URI:

  https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/targetPools/TARGET_POOL/removeInstance
  https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/targetPools/TARGET_POOL/addInstance

您的請求內文應包含要新增或刪除的實例的完整 URI:

  {
   "instances": [
      {"instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE"},
      {"instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE-2"}
    ]
  }
 

更改下列內容:

  • PROJECT_ID: Google Cloud 專案 ID
  • TARGET_POOL:要更新的目標集區名稱
  • REGION:目標集區所在的區域
  • ZONE:更新後執行個體所在的可用區
  • INSTANCEINSTANCE-2:要新增至目標集區的執行個體

詳情請參閱 targetPools.addInstancetargetPools.removeInstance 方法的 API 參考說明文件。

列出目標集區

控制台

若要查看目標池列表,請使用負載平衡進階選單。

在「Advanced」(進階) 負載平衡頁面中,前往「Target pools」(目標集區) 分頁標籤。
前往「目標集區」

這個頁面會顯示目標集區清單。

gcloud

若要使用 gcloud compute 列出現有目標池,請使用 target-pools list 指令

  gcloud compute target-pools list

如需更詳細的輸出結果,請使用 describe 指令並指定集區名稱。

API

在 API 中,將 GET 要求傳送至下列 URI:

  https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/targetPools

更改下列內容:

  • PROJECT_ID: Google Cloud 專案 ID
  • REGION:目標集區所在的區域

描述目標集區

控制台

如要取得目標集區的相關資訊,請使用負載平衡進階選單。

  1. 在「Advanced」(進階) 負載平衡頁面中,前往「Target pools」(目標集區) 分頁標籤。
    前往「目標集區」
  2. 如要查看詳細資訊,請按一下目標集區的名稱。

gcloud

要使用 gcloud compute 獲取有關單一目標池的信息,請使用 target-pools describe 命令

  gcloud compute target-pools describe TARGET_POOL

TARGET_POOL 替換為目標集區的名稱。

API

在 API 中,將空白的 GET 要求傳送至下列 URI:

  https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/targetPools/TARGET_POOL

更改下列內容:

  • PROJECT_ID: Google Cloud 專案 ID
  • TARGET_POOL:要更新的目標集區名稱
  • REGION:目標集區所在的區域

取得執行個體的健康狀態

控制台

如要取得目標集區中執行個體的健康狀態,請使用負載平衡進階選單。

  1. 在「Advanced」(進階) 負載平衡頁面中,前往「Target pools」(目標集區) 分頁標籤。
    前往「目標集區」
  2. 按一下目標集區的名稱。
  3. 「目標集區詳細資料」頁面會列出所有執行個體及其健康狀態。

gcloud

如要使用 gcloud compute 檢查目標集區中某一個或所有執行個體的目前健康狀態,請使用 gcloud compute target-pools get-health 指令

  gcloud compute target-pools get-health TARGET_POOL

TARGET_POOL 替換為目標集區的名稱。

該指令會傳回根據設定而判定的健康狀態檢查結果,即健康或不健康。

API

在 API 中,向以下 URI 傳送 HTTP POST 請求,並在請求正文中指定實例:

  https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/targetPools/TARGET_POOL/getHealth

  {
    "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE"
  }

更改下列內容:

  • PROJECT_ID: Google Cloud 專案 ID
  • TARGET_POOL:要更新的目標集區名稱
  • REGION:目標集區所在的區域
  • ZONE:執行個體所在的可用區
  • INSTANCE:要檢查健康狀態檢查狀態的執行個體

刪除目標集區

如要刪除目標集區,您必須先確認該集區未被任何轉發規則參照。如果轉送規則參照目標集區,您必須刪除轉送規則,才能移除參照。

控制台

若要使用 Google Cloud 控制台刪除目標池,請使用負載平衡進階選單。

  1. 在「Advanced」(進階) 負載平衡頁面中,前往「Target pools」(目標集區) 分頁標籤。
    前往「目標集區」
  2. 按一下目標集區的名稱。
  3. 點選「刪除」
  4. 在「刪除目標集區」視窗中,按一下「刪除」

gcloud

若要使用 gcloud compute 刪除目標池,請使用 target-pools delete 指令

  gcloud compute target-pools delete TARGET_POOL

TARGET_POOL 替換為要刪除的目標池的名稱。

API

在 API 中,將空白的 DELETE 要求傳送至下列 URI:

  https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/targetPools/TARGET_POOL

更改下列內容:

  • PROJECT_ID: Google Cloud 專案 ID
  • TARGET_POOL:要更新的目標集區名稱
  • REGION:目標集區所在的區域

在目標集區中新增或移除健康狀態檢查

健康檢查對像是獨立的, 全球的 可以與任何目標池關聯或分離的資源。

如果目標集區沒有關聯的健康狀態檢查,區域外部直通式網路負載平衡器會將所有執行個體的狀態全都視為健康,並將流量傳送至目標集區中的所有執行個體。但是,如果您查詢沒有執行狀況檢查的目標池的運作狀況,則狀態將傳回 unhealthy,表示目標池沒有執行狀況檢查。我們建議您為目標集區設定關聯的健康狀態檢查,以便管理執行個體。

區域性外部直通式網路負載平衡器會使用舊版 HTTP 健康狀態檢查,判斷目標集區中執行個體的健康狀態。區域外部直通網路負載平衡器只能使用傳統的 HTTP 健康檢查,而不能使用傳統的 HTTPS 健康檢查。

控制台

使用 Google Cloud 控制台時,您可以在建立採用目標集區後端的區域外部直通式網路負載平衡器時,建立舊版 HTTP 健康狀態檢查。

您「無法」使用 Google Cloud 控制台的「健康狀態檢查」頁面建立獨立的舊版健康狀態檢查。

gcloud

若要使用 gcloud compute 在目標池中新增健康檢查,請使用 target-pools add-health-checks 指令

  gcloud compute target-pools add-health-checks TARGET_POOL \
      --http-health-check=HEALTH_CHECK

更改下列內容:

  • TARGET_POOL:目標集區的名稱
  • HEALTH_CHECK:要搭配這個目標集區使用的舊版 HTTP 健康狀態檢查

如要移除健康狀態檢查,請使用 target-pools remove-health-checks 指令

  gcloud compute target-pools remove-health-checks TARGET_POOL \
    --http-health-check=HEALTH_CHECK

更改下列內容:

  • TARGET_POOL:目標集區的名稱
  • HEALTH_CHECK:要從這個目標集區移除的舊版 HTTP 健康狀態檢查

API

若要使用 API 關聯或取消關聯健康檢查,請向對應的 URI 發出 HTTP POST 請求:

  https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/targetPools/TARGET_POOL/removeHealthCheck
  https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/targetPools/TARGET_POOL/addHealthCheck

要求的內容應包含要建立關聯或解除關聯的健康狀態檢查:

  {
    "healthCheck": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/httpHealthChecks/HEALTH_CHECK"
  }

更改下列內容:

  • PROJECT_ID: Google Cloud 專案 ID
  • TARGET_POOL:要更新的目標集區名稱
  • REGION:目標集區所在的區域
  • HEALTH_CHECK: 若要與目標池關聯或取消關聯的傳統 HTTP 健康檢查

詳情請參閱 targetPools.addHealthChecktargetPools.removeHealthCheck 的 API 參考文件。

新增或移除備用目標集區

首次建立目標池時,您可以選擇套用備用目標池,以便在目標池發生故障時接收流量。

如果先前未曾設定過備用目標集區,您必須同時進行健康狀態檢查的設定,才能使備用目標集區發揮作用。

控制台

您無法在 Google Cloud 控制台中編輯目標集區。 您可以使用 Google Cloud CLI 或 API 編輯目標 Proxy。

gcloud

如要使用 gcloud compute 更新備份集區資源,請使用 target-pools set-backup 指令

  gcloud compute target-pools set-backup TARGET_POOL \
      --backup-pool=BACKUP_POOL \
      --failover-ratio=FAILOVER_RATIO

更改下列內容:

  • TARGET_POOL:目標集區的名稱
  • BACKUP_POOL:備份目標集區的名稱
  • FAILOVER_RATIO:介於 0.0 和 1.0 之間的值,用於決定目標集區何時應宣告為不健康

API

如要透過 API 發送更新或移除備用集區的要求,請向以下 URI 發出 POST 要求:

  POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/targetPools/TARGET_POOL/setBackup?failoverRatio=FAILOVER_RATIO

  {
    "target": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/targetPools/BACKUP_POOL"
  }

更改下列內容:

  • PROJECT_ID: Google Cloud 專案 ID
  • TARGET_POOL:要更新的目標集區名稱
  • REGION:目標集區所在的區域
  • BACKUP_POOL:要與目標集區建立關聯的備份集區名稱
  • FAILOVER_RATIO容錯移轉率

如果您定義了空的目標,或是未定義容錯移轉率,該目標集區的備用集區行為將被停用。

後續步驟