使用目標集區

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

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

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

目標集區屬性

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

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

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

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

目標集區所在地區的完整網址。這個地區應與後端執行個體位於同個地區。例如:

"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

選填。另一個目標集區資源的完整網址。備用集區是另一個目標集區參照的目標集區。您還必須定義 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,目標集區中健康的 VM 數量 > 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:目標集區的名稱
  • INSTANCEINSTANCE-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. 在「Delete a target pool」視窗中,按一下「Delete」

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容錯移轉率

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

後續步驟