ターゲット プールの使用

ターゲット プールは、外部パススルー ネットワーク ロードバランサからトラフィックを受信するバックエンド インスタンスのグループです。ターゲット プールのすべてのバックエンド インスタンスは、同じ Google Cloud リージョンに存在する必要があります。外部パススルー ネットワーク ロードバランサは、バックエンド サービスまたはターゲット プールのいずれかを使用してバックエンド インスタンスのグループを定義します。新しい外部パススルー ネットワーク ロードバランサを作成する場合は、バックエンド サービスを使用することをおすすめします。

このページでは、ターゲット プールのバックエンドの構成オプションについて説明します。外部パススルー ネットワーク ロードバランサの転送ルールがトラフィックをターゲット プールに送信すると、ロードバランサは送信元 IP アドレス、送信元ポート、宛先 IP アドレス、宛先ポートのハッシュに基づいてターゲット プールからインスタンスを選択します。

ターゲット プールに単一の仮想マシン(VM)を含める場合は、ロード バランシングではなくプロトコル転送機能の使用を検討してください。

ターゲット プールのプロパティ

ターゲット プールは、TCPUDP のトラフィックを処理する転送ルールと連携します。ターゲット プールを転送ルールと組み合わせて使用するには、その前にターゲット プールを新たに作成する必要があります。

ターゲット プールではレガシー HTTP ヘルスチェックを使用します。

ターゲット プールは次のプロパティで構成されます。

name
このターゲット プールの名前。名前はこのプロジェクト内で一意であり、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[ ]

省略可。このターゲット プールに使用するヘルスチェックのリスト。設定しなくてもかまいません。特定のターゲット プールに設定できるヘルスチェックは 1 つだけです。詳しくは、ヘルスチェックをご覧ください。

instances[ ]

このターゲット プールのトラフィックを処理するインスタンス URL のリスト。すべてのインスタンスは、ターゲット プールと同じリージョンに存在している必要がありますが、インスタンスは単一のリージョン内の異なるゾーンに属することができます。例:

"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 / 宛先 IP
  • 送信元ポート / 宛先ポート
  • レイヤ 4 プロトコル(TCP、UDP)

設定可能なハッシュは以下のとおりです。

NONE (ハッシュ値が指定されていない)(デフォルト)
送信元 IP、宛先 IP、送信元ポート、宛先ポート、プロトコルを使用する 5 タプルハッシュ。新しい接続はそれぞれどのインスタンスになってもかまいませんが、所定の接続のすべてのトラフィックは、インスタンスが正常に保たれている場合は同じインスタンスに留まります。
CLIENT_IP_PROTO
送信元 IP、宛先 IP、プロトコルを使用する 3 タプルハッシュ。クライアントからのすべての接続は、同じプロトコルを使用してインスタンスが正常に保たれている限り、同じインスタンスになります。
CLIENT_IP
送信元 IP と宛先 IP を使用する 2 タプルハッシュ。クライアントからのすべての接続は、インスタンスが正常に保たれている限り、いずれのプロトコルでも同じインスタンスになります。

5 タプルハッシュにより、多くの仮想マシンにまたがる優れたトラフィックの分散が実現します。ただし、同じクライアントからの 2 番目のセッションは、送信元ポートが変わる可能性があるため、別のインスタンスに到達することがあります。同じクライアントのすべてのセッションが同じバックエンドに到達できるようにするには、バックエンドの正常性が保たれている限り CLIENT_IP_PROTO オプションまたは CLIENT_IP オプションを指定できます。

一般に、3 タプル方式または 2 タプル方式を選択した場合、デフォルトの 5 タプル方式よりも優れたセッション アフィニティが実現しますが、トラフィック全体は均等に分散されない可能性があります。

断片化された UDP パケット: 断片化の可能性がある UDP トラフィックを負荷分散する場合は、セッション アフィニティを CLIENT_IP_PROTO または CLIENT_IP に設定します。NONE(5 タプルハッシュ)は使用しないでください。最初のフラグメントを除き、UDP フラグメントにはポート番号が含まれません。このため、ロードバランサがポートのないフラグメントをドロップする可能性があります。詳しくは、ロード バランシングと断片化された UDP パケットをご覧ください。

backupPool

省略可。別のターゲット プール リソースの完全修飾 URL。バックアップ プールは、別のターゲット プールが参照するターゲット プールです。この機能を使用するには、failoverRatio も定義する必要があります。ターゲット プール内の正常な仮想マシンの比率が failoverRatio を下回った場合、外部パススルー ネットワーク ロードバランサはトラフィックをバックアップ プールに送信します。ターゲット プールごとに提供できるバックアップ プールは 1 つだけです。バックアップ プールは、ターゲット プールと同じリージョンに存在する必要があります。ターゲット プール内の正常なインスタンスの比率がフェイルオーバーの比率を下回った場合は、トラフィックをルーティングするため、外部パススルー ネットワーク ロードバランサは以下のルールを使用します。

  1. ターゲット プールの合計インスタンス数に対する正常なインスタンス数の比率がフェイルオーバー率よりも小さい場合、トラフィックはバックアップ プールの正常なインスタンスに送信されます。
  2. ターゲット プールの合計インスタンス数に対する正常なインスタンス数の比率がフェイルオーバー率よりも小さいが、バックアップ プールに正常なインスタンスが残っていない場合、トラフィックはターゲット プールに残っている正常なインスタンスに送信されます。
  3. ターゲット プールが空ではなく、ターゲット プールとバックアップ プールの両方のヘルスチェックに失敗した場合、トラフィックは最後の手段としてターゲット プールのすべてのインスタンスに送信されます。
  4. ターゲット プールが空で、バックアップ プールのすべてのインスタンスでヘルスチェックに失敗すると、最後の手段として、トラフィックはバックアップ プールのすべてのインスタンスに送信されます。

サポートの対象となるフェイルオーバーのレベルは 1 つだけです。たとえば、ターゲット プール A にバックアップ プール B があり、バックアップ プール B にバックアップ プール C がある場合、ターゲット プール A へのトラフィックは、バックアップ プール B にのみ送信できます。バックアップ プール C には送信できません。

failoverRatio

省略可。このターゲット プールが正常でないとされる基準となる浮動小数点数を 0.01.0 の範囲で指定します。たとえば、この値が 0.1 に設定されていると、正常なインスタンス数が 0.1(10%)未満の場合、このターゲット プールは正常ではないとされます。フェイルオーバー比が 0.0 の場合、正常であるとみなされるには、少なくとも 1 つのバックエンドが正常である必要があります。フェイルオーバー比が 1.0 に設定されている場合、正常と見なされるには、すべてのインスタンスが正常である必要があります。backupPool フィールドを定義する場合は、このプロパティを定義する必要があります。

フェイルオーバーの条件

条件 新しい接続先
フェイルオーバー率 !=0、ターゲット プールの正常な VM >= FR ターゲット プール
フェイルオーバー率 =0、ターゲット プールの正常な VM >0 ターゲット プール
フェイルオーバー率 !=0、ターゲット プールの正常な VM <FR、バックアップ プールの少なくとも 1 つの VM が正常 バックアップ プール
フェイルオーバー率 =0、ターゲット プールの正常な VM =0、バックアップ プールの少なくとも 1 つの VM が正常 バックアップ プール
ターゲット プールに 1 つ以上の 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: ターゲット プールに追加するインスタンス

詳細については、API リファレンス ドキュメントの targetPools.addInstancetargetPools.removeInstance のメソッドをご覧ください。

ターゲット プールの一覧表示

コンソール

ターゲット プールのリストを表示するには、負荷分散の詳細設定メニューを使用します。

詳細設定ページの [ターゲット プール] タブに移動します。
[ターゲット プール] に移動

このページには、ターゲット プールのリストが表示されます。

gcloud

gcloud compute を使用して既存のターゲット プールの一覧を表示するには、target-pools list コマンドを使用します。

  gcloud compute target-pools list

詳細出力を得るには、describe コマンドを使用してプール名を指定します。

API

API の場合は、次の URI に GET リクエストを送信します。

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

次のように置き換えます。

  • PROJECT_ID: Google Cloud プロジェクト ID
  • REGION: ターゲット プールがあるリージョン

ターゲット プールの情報の取得

コンソール

ターゲット プールに関する情報を取得するには、負荷分散の詳細設定メニューを使用します。

  1. 詳細設定ページの [ターゲット プール] タブに移動します。
    [ターゲット プール] に移動
  2. 詳細を表示するには、ターゲット プールの名前をクリックします。

gcloud

gcloud compute を使用して単一のターゲット プールに関する情報を取得するには、target-pools describe コマンドを使用します。

  gcloud compute target-pools describe TARGET_POOL

次のように置き換えます。

  • TARGET_POOL: ターゲット プールの名前

API

API の場合は、次の URI に空の GET リクエストを送信します。

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

次のように置き換えます。

  • PROJECT_ID: Google Cloud プロジェクト ID
  • TARGET_POOL: 更新するターゲット プールの名前
  • REGION: ターゲット プールがあるリージョン

インスタンスのヘルス ステータスの取得

コンソール

ターゲット プール内のインスタンスのヘルス ステータスを取得するには、負荷分散の詳細設定メニューを使用します。

  1. 詳細設定ページの [ターゲット プール] タブに移動します。
    [ターゲット プール] に移動
  2. ターゲット プールの名前をクリックします。
  3. [ターゲット プールの詳細] ページに、すべてのインスタンスとヘルス ステータスが表示されます。

gcloud

gcloud compute を使用して、ターゲット プール内の 1 つまたはすべてのインスタンスの現在のヘルス ステータスを確認するには、gcloud compute target-pools get-health コマンドを実行します。

  gcloud compute target-pools get-health TARGET_POOL

次のように置き換えます。

  • TARGET_POOL: ターゲット プールの名前

構成済みのヘルスチェックの指定に従い、コマンドからヘルス ステータスが正常または異常のいずれかで戻されます。

API

API の場合は、リクエスト ボディに指定したインスタンスを使用して、HTTP POST リクエストを次の URI に対して実行します。

  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. 詳細設定ページの [ターゲット プール] タブに移動します。
    [ターゲット プール] に移動
  2. ターゲット プールの名前をクリックします。
  3. [削除] をクリックします。
  4. [ターゲット プールの削除] ウィンドウで、[削除] をクリックします。

gcloud

gcloud compute を使用してターゲット プールを削除するには、target-pools delete コマンドを使用します。

  gcloud compute target-pools delete TARGET_POOL

次のように置き換えます。

  • TARGET_POOL: 削除するターゲット プールの名前

API

API の場合は、次の URI に空の DELETE リクエストを送信します。

  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 を使用します。

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: フェイルオーバー率

空のターゲットを定義した場合、またはフェイルオーバーの比率を定義しなかった場合、このターゲット プールのバックアップ プールは動作しません。

次のステップ

  • ターゲット プールの詳細については、API リファレンス ドキュメントの targetPools.setBackup をご覧ください。
  • 転送ルールの詳細については、転送ルールの概要をご覧ください。