内部パススルー ネットワーク ロードバランサのフェイルオーバーを構成する

このガイドでは、サンプルを示しながら、Google Cloud の内部パススルー ネットワーク ロードバランサのフェイルオーバーを構成する方法を説明します。このガイドに進む前に、次の内容を理解しておいてください。

権限

このガイドを使用する前に、インスタンスを作成し、プロジェクト内のネットワークを変更しておく必要があります。そのためにはプロジェクトのオーナーまたは編集者であるか、次の Compute Engine IAM のロールがすべて必要です。

タスク 必要なロール
ネットワーク、サブネット、ロードバランサ コンポーネントの作成 ネットワーク管理者
ファイアウォール ルールの追加と削除 セキュリティ管理者
インスタンスの作成 Compute インスタンス管理者

詳細については、次のガイドをご覧ください。

設定

このガイドでは、フェイルオーバーを使用する内部パススルー ネットワーク ロードバランサを構成してテストする方法を説明します。このセクションでは、以下の構成方法について説明します。

  1. カスタム サブネットを持つ VPC ネットワークのサンプル
  2. バックエンド VM への受信接続を許可するファイアウォール ルール
  3. バックエンド VM:
    • ゾーン us-west1-a 内の非マネージド インスタンス グループ内の 1 つのプライマリ バックエンド
    • ゾーン us-west1-c 内の非マネージド インスタンス グループ内の 1 つのフェイルオーバー バックエンド
  4. 接続をテストし、フェイルオーバーの動作を監視する 1 つのクライアント VM
  5. 次の内部パススルー ネットワーク ロードバランサのコンポーネント:
    • バックエンド サービスのヘルスチェック
    • バックエンド VM 間の接続分散を管理する us-west1 リージョン内の内部バックエンド サービス
    • ロードバランサのフロントエンドの内部転送ルールと内部 IP アドレス

この例のアーキテクチャは次のようになります。

内部パススルー ネットワーク ロードバランサの簡単なフェイルオーバーの例。
内部パススルー ネットワーク ロードバランサの簡単なフェイルオーバーの例(クリックして拡大)

ネットワーク、リージョン、サブネットの構成

この例では、次の VPC ネットワーク、リージョン、サブネットを使用します。

  • ネットワーク: ネットワークは、lb-network という名前のカスタムモードの VPC ネットワークです。

  • リージョン: リージョンは、us-west1 です。

  • サブネット: サブネット lb-subnet は、10.1.2.0/24 の IP 範囲です。

サンプルのネットワークとサブネットを作成する手順は次のとおりです。

コンソール

  1. Google Cloud コンソールの [VPC ネットワーク] ページに移動します。

    [VPC ネットワーク] に移動

  2. [VPC ネットワークを作成] をクリックします。

  3. [名前] に「lb-network」を入力します。

  4. [サブネット] セクションで次の設定を行います。

    • [サブネット作成モード] を [カスタム] に設定します。
    • [新しいサブネット] セクションに、次の情報を入力します。
      • 名前: lb-subnet
      • リージョン: us-west1
      • IP アドレス範囲: 10.1.2.0/24
      • [完了] をクリックします。
  5. [作成] をクリックします。

gcloud

  1. カスタム VPC ネットワークを作成します。

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. サブネットを us-west1 リージョン内の lb-network ネットワークに作成します。

    gcloud compute networks subnets create lb-subnet \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-west1
    

API

networks.insert メソッドに POST リクエストを送信します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks

{
 "routingConfig": {
   "routingMode": "REGIONAL"
 },
 "name": "lb-network",
 "autoCreateSubnetworks": false
}

subnetworks.insert メソッドに POST リクエストを送信します。PROJECT_ID は、実際の Google Cloud プロジェクト ID に置き換えます。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks

{
 "name": "lb-subnet",
 "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
 "ipCidrRange": "10.1.2.0/24",
 "privateIpGoogleAccess": false
}

ファイアウォール ルールの構成

この例では、次のファイアウォール ルールを使用します。

  • fw-allow-lb-subnet: VPC ネットワーク内のすべてのターゲットに適用される上り(内向き)ルールで、10.1.2.0/24 の範囲の送信元からのトラフィックを許可します。このルールを使用すると、lb-subnet 内の送信元から負荷分散されているインスタンス(VM)への受信トラフィックが許可されます。

  • fw-allow-ssh: 負荷分散されているインスタンスに適用される上りルール。任意のアドレスからの TCP ポート 22 での SSH 接続の受信を許可します。このルールには、送信元 IP 範囲をより限定的に指定できます。たとえば、SSH セッションを開始するシステムの IP 範囲を指定できます。この例では、ターゲットタグ allow-ssh を使用して、ファイアウォール ルールが適用される VM が識別されます。

  • fw-allow-health-check: 負荷分散されているインスタンスに適用される上り(内向き)ルール。Google Cloud ヘルスチェック システム(130.211.0.0/2235.191.0.0/16)からのトラフィックを許可します。この例では、ターゲットタグ allow-health-check を使用して、適用するインスタンスを識別します。

これらのファイアウォール ルールがない場合は、デフォルトの上り(内向き)拒否ルールによってバックエンド インスタンスへの受信トラフィックがブロックされます。

コンソール

  1. Google Cloud コンソールで [ファイアウォール ポリシー] ページに移動します。

    [ファイアウォール ポリシー] に移動

  2. [ファイアウォール ルールを作成] をクリックして次の情報を入力し、サブネット トラフィックを許可するルールを作成します。

    • 名前: fw-allow-lb-subnet
    • ネットワーク: lb-network
    • 優先度: 1000
    • トラフィックの方向: 上り(内向き)
    • 一致したときのアクション: 許可
    • ターゲット: ネットワーク内のすべてのインスタンス
    • ソースフィルタ: IPv4 の範囲
    • 送信元 IPv4 範囲: 10.1.2.0/24
    • プロトコルとポート: すべて許可
  3. [作成] をクリックします。

  4. [ファイアウォール ルールを作成] を再度クリックして、SSH 接続の受信を許可するルールを作成します。

    • 名前: fw-allow-ssh
    • ネットワーク: lb-network
    • 優先度: 1000
    • トラフィックの方向: 上り(内向き)
    • 一致したときのアクション: 許可
    • ターゲット: 指定されたターゲットタグ
    • ターゲットタグ: allow-ssh
    • ソースフィルタ: IPv4 の範囲
    • 送信元 IPv4 範囲: 0.0.0.0/0
    • プロトコルとポート: 指定されたプロトコルとポートを選択してから、tcp:22 のように入力します。
  5. [作成] をクリックします。

  6. [ファイアウォール ルールを作成] をもう一度クリックして、Google Cloud ヘルスチェックを許可するルールを作成します。

    • 名前: fw-allow-health-check
    • ネットワーク: lb-network
    • 優先度: 1000
    • トラフィックの方向: 上り(内向き)
    • 一致したときのアクション: 許可
    • ターゲット: 指定されたターゲットタグ
    • ターゲットタグ: allow-health-check
    • ソースフィルタ: IPv4 の範囲
    • 送信元 IPv4 範囲: 130.211.0.0/2235.191.0.0/16
    • プロトコルとポート: すべて許可
  7. [作成] をクリックします。

gcloud

  1. fw-allow-lb-subnet ファイアウォール ルールを作成して、サブネットとの通信を許可します。

    gcloud compute firewall-rules create fw-allow-lb-subnet \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=10.1.2.0/24 \
        --rules=tcp,udp,icmp
    
  2. ネットワーク タグ allow-ssh を使用して、VM との SSH 接続を許可する fw-allow-ssh ファイアウォール ルールを作成します。source-ranges を省略すると、Google Cloud は任意の送信元を対象とするものとしてルールを解釈します。

    gcloud compute firewall-rules create fw-allow-ssh \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-ssh \
        --rules=tcp:22
    
  3. Google Cloud ヘルスチェックを許可する fw-allow-health-check ルールを作成します。

    gcloud compute firewall-rules create fw-allow-health-check \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-health-check \
        --source-ranges=130.211.0.0/22,35.191.0.0/16 \
        --rules=tcp,udp,icmp
    

API

firewalls.insert メソッドに POST リクエストを送信して、fw-allow-lb-subnet ファイアウォール ルールを作成します。PROJECT_ID は、実際の Google Cloud プロジェクト ID に置き換えます。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls

{
 "name": "fw-allow-lb-subnet",
 "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
 "priority": 1000,
 "sourceRanges": [
   "10.1.2.0/24"
 ],
 "allowed": [
   {
     "IPProtocol": "tcp"
   },
   {
     "IPProtocol": "udp"
   },
   {
     "IPProtocol": "icmp"
   }
 ],
 "direction": "INGRESS",
 "logConfig": {
   "enable": false
 },
 "disabled": false
}

firewalls.insert メソッドに POST リクエストを送信して、fw-allow-ssh ファイアウォール ルールを作成します。PROJECT_ID は、実際の Google Cloud プロジェクト ID に置き換えます。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls

{
 "name": "fw-allow-ssh",
      "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
 "priority": 1000,
 "sourceRanges": [
   "0.0.0.0/0"
 ],
 "targetTags": [
   "allow-ssh"
 ],
 "allowed": [
  {
    "IPProtocol": "tcp",
    "ports": [
      "22"
    ]
  }
 ],
"direction": "INGRESS",
"logConfig": {
  "enable": false
},
"disabled": false
}

firewalls.insert メソッドに POST リクエストを送信して、fw-allow-health-check ファイアウォール ルールを作成します。PROJECT_ID は、実際の Google Cloud プロジェクト ID に置き換えます。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls

{
 "name": "fw-allow-health-check",
 "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
 "priority": 1000,
 "sourceRanges": [
   "130.211.0.0/22",
   "35.191.0.0/16"
 ],
 "targetTags": [
   "allow-health-check"
 ],
 "allowed": [
   {
     "IPProtocol": "tcp"
   },
   {
     "IPProtocol": "udp"
   },
   {
     "IPProtocol": "icmp"
   }
 ],
 "direction": "INGRESS",
 "logConfig": {
   "enable": false
 },
 "disabled": false
}

バックエンド VM とインスタンス グループの作成

この手順では、バックエンド VM と非マネージド インスタンス グループを作成します。

  • us-west1-a のインスタンス グループ ig-a は、2 つの VM を持つプライマリ バックエンドです。
    • vm-a1
    • vm-a2
  • us-west1-c のインスタンス グループ ig-c は、2 つの VM を持つフェイルオーバー バックエンドです。
    • vm-c1
    • vm-c2

プライマリ バックエンドとフェイルオーバー バックエンドは異なるゾーンに配置されることにより手順がわかりやすくなります。これにより、1 つのゾーンがダウンした際のフェイルオーバーが処理されます。

各プライマリ VM とバックアップ VM は、TCP ポート 80 と 443 で Apache ウェブサーバーを実行するように構成されています。lb-subnet 内の各 VM にはクライアント アクセス用に内部 IP アドレスが割り当てられ、SSH アクセス用にエフェメラル外部(公開)IP アドレスが割り当てられます。外部 IP アドレスの削除については、バックエンド VM から外部 IP アドレスを削除するをご覧ください。

デフォルトで、Apache は任意の IP アドレスにバインドするように構成されます。内部パススルー ネットワーク ロードバランサは、宛先 IP アドレスを保持してパケットを配信します。

プライマリ VM とバックアップ VM で実行されているサーバー ソフトウェアによって、ロードバランサの内部転送ルールの IP アドレスがリッスンされるようにしてください。複数の内部転送ルールを構成している場合、ソフトウェアによってそれぞれに関連付けられた内部 IP アドレスがリッスンされます。内部パススルー ネットワーク ロードバランサによってバックエンド VM に配信されるパケットの宛先 IP アドレスは、転送ルールの内部 IP アドレスです。

手順を簡単にするため、すべてのプライマリ VM とバックアップ VM では Debian GNU / Linux 10 が実行されます。

コンソール

バックエンド VM の作成

  1. Google Cloud コンソールで [VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. 次の手順を繰り返し、4 つの VM を作成します。次の名前とゾーンの組み合わせを使用します。

    • 名前: vm-a1、ゾーン: us-west1-a
    • 名前: vm-a2、ゾーン: us-west1-a
    • 名前: vm-c1、ゾーン: us-west1-c
    • 名前: vm-c2、ゾーン: us-west1-c
  3. [インスタンスを作成] をクリックします。

  4. ステップ 2 に示したように [名前] を設定します。

  5. [リージョン] には、us-west1 を選択し、ステップ 2 に示したゾーンを選択します。

  6. [ブートディスク] セクションで、選択したイメージが Debian GNU/Linux 10 (buster) であることを確認します。必要に応じてイメージを変更するには、[選択] をクリックします。

  7. [詳細オプション] をクリックします。

  8. [ネットワーキング] をクリックして次のフィールドを構成します。

    1. [ネットワーク タグ] に「allow-health-check」と「allow-ssh」を入力します。
    2. [ネットワーク インターフェース] で、次のように選択します。
      • ネットワーク: lb-network
      • サブネット: lb-subnet
  9. [管理] をクリックします。[起動スクリプト] フィールドに次のスクリプトを入力します。スクリプトの内容は 4 つの VM ですべて同じです。

    #! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://metadata.google.internal/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    systemctl restart apache2
    
  10. [作成] をクリックします。

インスタンス·グループの作成

  1. Google Cloud コンソールの [インスタンス グループ] ページに移動します。

    [インスタンス グループ] に移動

  2. 次の手順を繰り返し、それぞれ 2 つの VM を持つ 2 つの非マネージド インスタンス グループを作成します。以下の組み合わせを使用します。

    • インスタンス グループ: ig-a、ゾーン: us-west1-a、VM: vm-a1vm-a2
    • インスタンス グループ: ig-c、ゾーン: us-west1-c、VM: vm-c1vm-c2
  3. [インスタンス グループを作成] をクリックします。

  4. [新しい非マネージド インスタンス グループ] をクリックします。

  5. ステップ 2 に示したように [名前] を設定します。

  6. [ロケーション] セクションで、[リージョン] に us-west1 を選択し、ステップ 2 で示したように [ゾーン] を選択します。

  7. [ネットワーク] に「lb-network」と入力します。

  8. [サブネットワーク] に「lb-subnet」と入力します。

  9. [VM インスタンス] セクションに、ステップ 2 で示した VM を追加します。

  10. [作成] をクリックします。

gcloud

  1. VM_NAMEZONE の 4 つの組み合わせを使用して、次のコマンドを 4 回実行して 4 つの VM を作成します。スクリプトの内容は 4 つの VM ですべて同じです。

    • vm-a1VM_NAMEus-west1-aZONE
    • vm-a2VM_NAMEus-west1-aZONE
    • vm-c1VM_NAMEus-west1-cZONE
    • vm-c2VM_NAMEus-west1-cZONE
    gcloud compute instances create VM_NAME \
        --zone=ZONE \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --tags=allow-ssh,allow-health-check \
        --subnet=lb-subnet \
        --metadata=startup-script='#! /bin/bash
          apt-get update
          apt-get install apache2 -y
          a2ensite default-ssl
          a2enmod ssl
          vm_hostname="$(curl -H "Metadata-Flavor:Google" \
          http://metadata.google.internal/computeMetadata/v1/instance/name)"
          echo "Page served from: $vm_hostname" | \
          tee /var/www/html/index.html
          systemctl restart apache2'
    
  2. 各ゾーンに次の 2 つの非マネージド インスタンス グループを作成します。

    gcloud compute instance-groups unmanaged create ig-a \
        --zone=us-west1-a
    gcloud compute instance-groups unmanaged create ig-c \
        --zone=us-west1-c
    
  3. 適切なインスタンス グループに VM を追加します。

    gcloud compute instance-groups unmanaged add-instances ig-a \
        --zone=us-west1-a \
        --instances=vm-a1,vm-a2
    gcloud compute instance-groups unmanaged add-instances ig-c \
        --zone=us-west1-c \
        --instances=vm-c1,vm-c2
    

API

instances.insert メソッドに 4 つの POST リクエストを送信して、4 つのバックエンド VM を作成します。

4 つの VM に対して、次の VM 名とゾーンを使用します。

  • vm-a1VM_NAMEus-west1-aZONE
  • vm-a2VM_NAMEus-west1-aZONE
  • vm-c1VM_NAMEus-west1-cZONE
  • vm-c2VM_NAMEus-west1-cZONE

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

  • PROJECT_ID: プロジェクト ID
  • ZONE: インスタンスのゾーン
  • DEBIAN_IMAGE_NAME: インスタンスの Debian イメージの名前。現在の DEBIAN_IMAGE_NAME を取得するには、次の gcloud コマンドを実行します。

    gcloud compute images list \
     --filter="family=debian-12"
    

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
 "name": "VM_NAME",
 "tags": {
   "items": [
     "allow-health-check",
     "allow-ssh"
   ]
 },
 "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/machineTypes/e2-standard-2",
 "canIpForward": false,
 "networkInterfaces": [
   {
     "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
     "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
     "accessConfigs": [
       {
         "type": "ONE_TO_ONE_NAT",
         "name": "external-nat",
         "networkTier": "PREMIUM"
       }
     ]
   }
 ],
 "disks": [
   {
     "type": "PERSISTENT",
     "boot": true,
     "mode": "READ_WRITE",
     "autoDelete": true,
     "deviceName": "VM_NAME",
     "initializeParams": {
       "sourceImage": "projects/debian-cloud/global/images/DEBIAN_IMAGE_NAME",
       "diskType": "projects/PROJECT_ID/zones/ZONE/diskTypes/pd-standard",
       "diskSizeGb": "10"
     }
   }
 ],
 "metadata": {
   "items": [
     {
       "key": "startup-script",
       "value": "#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\nvm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\nhttp://metadata.google.internal/computeMetadata/v1/instance/name)\"\necho \"Page served from: $vm_hostname\" | \\\ntee /var/www/html/index.html\nsystemctl restart apache2"
     }
   ]
 },
 "scheduling": {
   "preemptible": false
 },
 "deletionProtection": false
}

instanceGroups.insert メソッドに POST リクエストを送信して、2 つのインスタンス グループを作成します。PROJECT_ID は、実際の Google Cloud プロジェクト ID に置き換えます。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups

{
 "name": "ig-a",
 "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
 "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet"
}

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups

{
 "name": "ig-c",
 "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
 "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet"
}

instanceGroups.addInstances メソッドに POST リクエストを送信して、各インスタンス グループにインスタンスを追加します。PROJECT_ID は、実際の Google Cloud プロジェクト ID に置き換えます。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a/addInstances

{
 "instances": [
   {
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a1",
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a2"
   }
 ]
}

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups/ig-c/addInstances

{
 "instances": [
   {
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-c1",
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-c2"
   }
 ]
}

クライアント VM の作成

この例では、ロードバランサと同じリージョンにクライアント VM を作成しています(vm-client)。クライアントは、フェイルオーバーの仕組みを示すために使用されます。

コンソール

  1. Google Cloud コンソールで [VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. [インスタンスを作成] をクリックします。

  3. [名前] を vm-client に設定します。

  4. [ゾーン] を us-west1-a に設定します。

  5. [詳細オプション] をクリックします。

  6. [ネットワーキング] をクリックして次のフィールドを構成します。

    1. [ネットワーク タグ] に「allow-ssh」と入力します。
    2. [ネットワーク インターフェース] で、次のように選択します。
      • ネットワーク: lb-network
      • サブネット: lb-subnet
  7. [作成] をクリックします。

gcloud

クライアント VM はロードバランサと同じリージョン内の任意のゾーンにあり、そのリージョン内の任意のサブネットを使用できます。この例では、クライアントは us-west1-a ゾーンにあり、プライマリ VM とバックアップ VM が使用するサブネットと同じサブネットを使用します。

gcloud compute instances create vm-client \
    --zone=us-west1-a \
    --image-family=debian-12 \
    --image-project=debian-cloud \
    --tags=allow-ssh \
    --subnet=lb-subnet

API

instances.insert メソッドに POST リクエストを送信します。

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

  • PROJECT_ID: プロジェクト ID
  • DEBIAN_IMAGE_NAME: インスタンスの Debian イメージの名前。現在の DEBIAN_IMAGE_NAME を取得するには、次の gcloud コマンドを実行します。

    gcloud compute images list \
     --filter="family=debian-12"
    

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances

{
 "name": "vm-client",
 "tags": {
   "items": [
     "allow-ssh"
   ]
 },
 "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/machineTypes/e2-standard-2",
 "canIpForward": false,
 "networkInterfaces": [
   {
     "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
     "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
     "accessConfigs": [
       {
         "type": "ONE_TO_ONE_NAT",
         "name": "external-nat",
         "networkTier": "PREMIUM"
       }
     ]
   }
 ],
 "disks": [
   {
     "type": "PERSISTENT",
     "boot": true,
     "mode": "READ_WRITE",
     "autoDelete": true,
     "deviceName": "vm-client",
     "initializeParams": {
       "sourceImage": "projects/debian-cloud/global/images/DEBIAN_IMAGE_NAME",
       "diskType": "projects/PROJECT_ID/zones/us-west1-a/diskTypes/pd-standard",
       "diskSizeGb": "10"
     }
   }
 ],
 "scheduling": {
   "preemptible": false
 },
 "deletionProtection": false
}

ロードバランサのコンポーネントを構成する

この手順では、ヘルスチェックとバックエンド サービス、フロントエンド コンポーネントなどの内部パススルー ネットワーク ロードバランサ コンポーネントを構成します。

  • ヘルスチェック: この例では、HTTP 200(OK)レスポンスを単純にチェックする HTTP ヘルスチェックを使用しています。詳細については、内部パススルー ネットワーク ロードバランサの概要のヘルスチェックのセクションをご覧ください。

  • バックエンド サービス: サンプルでは、HTTP トラフィックがロードバランサに渡されるため、この構成では UDP ではなく TCP を指定します。フェイルオーバーの状態を示すバックエンド サービスのフェイルオーバー率の値は 0.75 です。

  • 転送ルール: この例では、内部転送ルールを 1 つ作成します。

  • 内部 IP アドレス: この例では、転送ルールを作成する際に内部 IP アドレス(10.1.2.99)を指定しています。

コンソール

構成を開始する

  1. Google Cloud コンソールで、[ロード バランシング] ページに移動します。

    [ロード バランシング] に移動

  2. [ロードバランサを作成] をクリックします。
  3. [ロードバランサの種類] で [ネットワーク ロードバランサ(TCP / UDP / SSL)] を選択し、[次へ] をクリックします。
  4. [プロキシまたはパススルー] で [パススルー ロードバランサ] を選択し、[次へ] をクリックします。
  5. [インターネット接続または内部] で [内部] を選択し、[次へ] をクリックします。
  6. [構成] をクリックします。

基本構成

  1. [名前] を be-ilb に設定します。
  2. [リージョン] を us-west1 に設定します。
  3. [ネットワーク] を lb-network に設定します。
  4. [バックエンドの構成] をクリックして、次の変更を行います。
    1. [バックエンド] の [新しいアイテム] セクションで ig-a インスタンス グループを選択します。[このインスタンス グループをバックアップ用のフェイルオーバー グループとして使用する] を必ずオフにしてください。[完了] をクリックします。
    2. [バックエンドを追加] をクリックします。[新しいアイテム] セクションが表示されたら、ig-c インスタンス グループを選択します。[このインスタンス グループをバックアップ用のフェイルオーバー グループとして使用する] をオンにします。[完了] をクリックします。
    3. [ヘルスチェック] で [別のヘルスチェックを作成] を選択し、次の情報を入力して [保存して次へ] をクリックします。
      • 名前: hc-http-80
      • プロトコル: HTTP
      • ポート: 80
      • プロキシ プロトコル: NONE
      • リクエストパス: /。Google Cloud コンソールを使用してロードバランサを作成すると、ヘルスチェックはグローバルになります。リージョン ヘルスチェックを作成する場合は、gcloud または API を使用します。
    4. [詳細構成] をクリックします。[フェイルオーバー ポリシー] セクションで、次のように設定します。
      • フェイルオーバー率: 0.75
      • [フェイルオーバー時のコネクション ドレインを有効にする] をオンにします。
    5. 続行する前に、[バックエンドの設定] の隣に青いチェックマークがあることを確認します。ない場合は、この手順を確認します。
  5. [フロントエンドの構成] をクリックします。[新しいフロントエンドの IP とポート] セクションで、次の変更を行います。
    1. 名前: fr-ilb
    2. サブネットワーク: ilb-subnet
    3. [内部 IP] から、[静的内部 IP アドレスの予約] を選択し、以下の情報を入力して [予約] をクリックします。
      • 名前: ip-ilb
      • 静的 IP アドレス: 選択を許可
      • カスタム IP アドレス: 10.1.2.99
    4. ポート: [単一] を選択して、ポート番号に「80」を入力します。
    5. 続行する前に、[フロントエンドの設定] の隣に青いチェックマークがあることを確認します。ない場合は、この手順を確認します。
  6. [確認と完了] をクリックします。設定を再度確認します。
  7. [作成] をクリックします。

gcloud

  1. 新しい HTTP ヘルスチェックを作成して、ポート 80 で VM との TCP 接続をテストします。

    gcloud compute health-checks create http hc-http-80 \
        --region=us-west1 \
        --port=80
    
  2. HTTP トラフィックのバックエンド サービスを作成します。

    gcloud compute backend-services create be-ilb \
        --load-balancing-scheme=internal \
        --protocol=tcp \
        --region=us-west1 \
        --health-checks=hc-http-80 \
        --health-checks-region=us-west1 \
        --failover-ratio 0.75
    
  3. プライマリ バックエンドをバックエンド サービスに追加します。

    gcloud compute backend-services add-backend be-ilb \
        --region=us-west1 \
        --instance-group=ig-a \
        --instance-group-zone=us-west1-a
    
  4. フェイルオーバー バックエンドをバックエンド サービスに追加します。

    gcloud compute backend-services add-backend be-ilb \
        --region=us-west1 \
        --instance-group=ig-c \
        --instance-group-zone=us-west1-c \
        --failover
    
  5. バックエンド サービスの転送ルールを作成します。転送ルールを作成するときは、サブネット内の内部 IP に 10.1.2.99 を指定します。

    gcloud compute forwarding-rules create fr-ilb \
        --region=us-west1 \
        --load-balancing-scheme=internal \
        --network=lb-network \
        --subnet=lb-subnet \
        --address=10.1.2.99 \
        --ip-protocol=TCP \
        --ports=80 \
        --backend-service=be-ilb \
        --backend-service-region=us-west1
    

API

regionHealthChecks.insert メソッドに POST リクエストを送信してヘルスチェックを作成します。PROJECT_ID は実際のプロジェクト ID に置き換えます。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/regionHealthChecks

{
"name": "hc-http-80",
"type": "HTTP",
"httpHealthCheck": {
  "port": 80
}
}

regionBackendServices.insert メソッドに POST リクエストを送信してリージョン バックエンド サービスを作成します。PROJECT_ID は実際のプロジェクト ID に置き換えます。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices

{
"name": "be-ilb",
"backends": [
  {
    "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a",
    "balancingMode": "CONNECTION"
  },
  {
    "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups/ig-c",
    "balancingMode": "CONNECTION"
    "failover": true
  }
],
"failoverPolicy": {
  "failoverRatio": 0.75
},
"healthChecks": [
  "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80"
],
"loadBalancingScheme": "INTERNAL",
"connectionDraining": {
  "drainingTimeoutSec": 0
 }
}

forwardingRules.insert メソッドに POST リクエストを送信して転送ルールを作成します。PROJECT_ID は実際のプロジェクト ID に置き換えます。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules

{
"name": "fr-ilb",
"IPAddress": "10.1.2.99",
"IPProtocol": "TCP",
"ports": [
  "80", "8008", "8080", "8088"
],
"loadBalancingScheme": "INTERNAL",
"subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
"network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
"backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb",
"networkTier": "PREMIUM"
}

テスト

これらのテストでは、ロードバランサの構成を検証し、想定される動作を確認する方法を示します。

クライアント テスト手順

この手順では、クライアント VM からロードバランサに接続します。この手順は、後ほど他のテストを完了するために使用します。

  1. クライアント VM インスタンスに接続します。

    gcloud compute ssh vm-client --zone=us-west1-a
    
  2. curl を使用して IP アドレスに接続するロードバランサへのウェブ リクエストを作成します。

    curl http://10.1.2.99
    
  3. curl コマンドを実行して戻された値の文字列をメモします。レスポンスを生成するバックエンド VM の名前が文字列内に表示されます(たとえば、Page served from: vm-a1)。

初期状態のテスト

サンプルのロードバランサを構成した後は、通常、4 つのバックエンド VM すべてが正常に動作するようになります。

  • 2 つのプライマリ VM(vm-a1vm-a2
  • 2 つのバックアップ VM(vm-c1vm-c2

クライアント テスト手順に沿って進めます。2 つ目のステップを数回繰り返します。想定される動作は、2 つのプライマリ VM(vm-a1vm-a2)が両方とも正常になりトラフィックが正常に提供されることです。このロードバランサでセッション アフィニティが設定されていないため、約半分のレスポンスが各プライマリ VM によって処理されます。

フェイルオーバーのテスト

このテストでは、vm-a1 の障害をシミュレートしてフェイルオーバーの動作を確認できます。

  1. vm-a1 VM に接続します。

    gcloud compute ssh vm-a1 --zone=us-west1-a
    
  2. Apache ウェブサーバーを停止します。10 秒後、Google Cloud はこの VM を正常ではないと認識します(セットアップで作成した hc-http-80 ヘルスチェックでは、デフォルトのチェック間隔は 5 秒とされ、連続で 2 回のプローブの失敗が異常しきい値として使用されます)。

    sudo apachectl stop
    
  3. クライアント テスト手順に沿って進めます。2 つ目のステップを数回繰り返します。想定される動作は、2 つのバックアップ VM(vm-c1vm-c2)によってトラフィックが正常に提供されることです。正常なプライマリ VM(vm-a2)は 1 つのみであるため、正常なプライマリ VM のすべてのプライマリ VM に対する割合は 0.5 になります。この数はフェイルオーバーしきい値の 0.75 よりも小さいため、Google Cloud によってバックアップ VM を使用するようにロードバランサのアクティブプールが再構成されます。このロードバランサでセッション アフィニティが構成されない限り、約半分のレスポンスが各バックアップ VM によって処理されます。

フェイルバックのテスト

このテストでは、vm-a1 上の Apache サーバーを再起動してフェイルバックをシミュレートします。

  1. vm-a1 VM に接続します。

    gcloud compute ssh vm-a1 --zone=us-west1-a
    
  2. Apache ウェブサーバーを起動し、10 秒待ちます。

    sudo apachectl start
    
  3. クライアント テスト手順に沿って進めます。2 つ目のステップを数回繰り返します。想定される動作は、2 つのプライマリ VM(vm-a1vm-a2)によりトラフィックが正常に提供されることです。両方のプライマリ VM が正常な場合、すべてのプライマリ VM に対する正常なプライマリ VM の割合は 1.0 になります。この値は、フェイルオーバーしきい値 0.75 よりも大きい値であるため、プライマリ VM が再び使用されるように Google Cloud によってアクティブプールが構成されます。

バックエンド VM の追加

このセクションでは、ロードバランサにさらにプライマリ VM とバックアップ VM を追加してサンプルの構成例を拡張します。同じリージョン内の複数のゾーンにプライマリ VM とバックアップ VM を分散できることを示す 2 つのバックエンド インスタンス グループを作成します。

  • 第 3 のインスタンス グループ(us-west1-cig-d)は、2 つの VM を持つプライマリ バックエンドとして動作します。
    • vm-d1
    • vm-d2
  • 第 4 のインスタンス グループ(us-west1-aig-b)は、次の 2 つの VM を持つフェイルオーバー バックエンドとして動作します。
    • vm-b1
    • vm-b2

この例の修正されたアーキテクチャは次のようになります。

マルチゾーンの内部パススルー ネットワーク ロードバランサのフェイルオーバー。
マルチゾーンの内部パススルー ネットワーク ロードバランサのフェイルオーバー(クリックして拡大)

追加の VM とインスタンス グループを作成する

追加のプライマリ VM とバックアップ VM、および対応する非マネージド インスタンス グループを作成します。

コンソール

バックエンド VM の作成

  1. Google Cloud コンソールで [VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. 次の手順を繰り返し、4 つの VM を作成します。次の名前とゾーンの組み合わせを使用します。

    • 名前: vm-b1、ゾーン: us-west1-a
    • 名前: vm-b2、ゾーン: us-west1-a
    • 名前: vm-d1、ゾーン: us-west1-c
    • 名前: vm-d2、ゾーン: us-west1-c
  3. [インスタンスを作成] をクリックします。

  4. ステップ 2 に示したように [名前] を設定します。

  5. [リージョン] には、us-west1 を選択し、ステップ 2 に示したゾーンを選択します。

  6. [ブートディスク] セクションで、選択したイメージが Debian GNU/Linux 10 (buster) であることを確認します。必要に応じてイメージを変更するには、[選択] をクリックします。

  7. [詳細オプション] をクリックして、次の変更を行います。

    • [ネットワーク] をクリックして、ネットワーク タグ allow-sshallow-health-check を追加します。
    • [ネットワーク インターフェース] にある編集ボタンをクリックして、次の変更を行い、[完了] をクリックします。
      • ネットワーク: lb-network
      • サブネット: lb-subnet
      • プライマリ内部 IP: エフェメラル(自動)
      • 外部 IP: エフェメラル
    • [管理] をクリックします。[起動スクリプト] フィールドに、次のスクリプトの内容をコピーして貼り付けます。スクリプトの内容は 4 つの VM ですべて同じです。

      #! /bin/bash
      apt-get update
      apt-get install apache2 -y
      a2ensite default-ssl
      a2enmod ssl
      vm_hostname="$(curl -H "Metadata-Flavor:Google" \
      http://metadata.google.internal/computeMetadata/v1/instance/name)"
      echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html
      systemctl restart apache2
      
  8. [作成] をクリックします。

インスタンス·グループの作成

  1. Google Cloud コンソールの [インスタンス グループ] ページに移動します。

    [インスタンス グループ] に移動

  2. 次の手順を繰り返し、それぞれが 2 つの VM を持つ 2 つの非マネージド インスタンス グループを作成します。以下のような組み合わせを使用します。

    • インスタンス グループ: ig-b、ゾーン: us-west1-a、VM: vm-b1vm-b2
    • インスタンス グループ: ig-d、ゾーン: us-west1-c、VM: vm-d1vm-d2
  3. [インスタンス グループを作成] をクリックします。

  4. [新しい非マネージド インスタンス グループ] をクリックします。

  5. ステップ 2 に示したように [名前] を設定します。

  6. [ロケーション] セクションで、[リージョン] に us-west1 を選択し、ステップ 2 で示したように [ゾーン] を選択します。

  7. [ネットワーク] に「lb-network」と入力します。

  8. [サブネットワーク] に「lb-subnet」と入力します。

  9. [VM インスタンス] セクションに、ステップ 2 で示した VM を追加します。

  10. [作成] をクリックします。

gcloud

  1. VM_NAMEZONE の 4 つの組み合わせを使用して、次のコマンドを 4 回実行して 4 つの VM を作成します。スクリプトの内容は 4 つの VM ですべて同じです。

    • vm-b1VM_NAMEus-west1-aZONE
    • vm-b2VM_NAMEus-west1-aZONE
    • vm-d1VM_NAMEus-west1-cZONE
    • vm-d2VM_NAMEus-west1-cZONE
    gcloud compute instances create VM_NAME \
        --zone=ZONE \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --tags=allow-ssh,allow-health-check \
        --subnet=lb-subnet \
        --metadata=startup-script='#! /bin/bash
          apt-get update
          apt-get install apache2 -y
          a2ensite default-ssl
          a2enmod ssl
          vm_hostname="$(curl -H "Metadata-Flavor:Google" \
          http://metadata.google.internal/computeMetadata/v1/instance/name)"
          echo "Page served from: $vm_hostname" | \
          tee /var/www/html/index.html
          systemctl restart apache2'
    
  2. 各ゾーンに次の 2 つの非マネージド インスタンス グループを作成します。

    gcloud compute instance-groups unmanaged create ig-b \
        --zone=us-west1-a
    gcloud compute instance-groups unmanaged create ig-d \
        --zone=us-west1-c
    
  3. 適切なインスタンス グループに VM を追加します。

    gcloud compute instance-groups unmanaged add-instances ig-b \
        --zone=us-west1-a \
        --instances=vm-b1,vm-b2
    gcloud compute instance-groups unmanaged add-instances ig-d \
        --zone=us-west1-c \
        --instances=vm-d1,vm-d2
    

API

instances.insert メソッドに 4 つの POST リクエストを送信して、4 つのバックエンド VM を作成します。

4 つの VM に対して、次の VM 名とゾーンを使用します。

  • vm-b1VM_NAMEus-west1-aZONE
  • vm-b2VM_NAMEus-west1-aZONE
  • vm-d1VM_NAMEus-west1-cZONE
  • vm-d2VM_NAMEus-west1-cZONE

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

  • PROJECT_ID: プロジェクト ID
  • DEBIAN_IMAGE_NAME: インスタンスの Debian イメージの名前。現在の DEBIAN_IMAGE_NAME を取得するには、次の gcloud コマンドを実行します。

    gcloud compute images list \
     --filter="family=debian-12"
    

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
 "name": "VM_NAME",
 "tags": {
   "items": [
     "allow-health-check",
     "allow-ssh"
   ]
 },
 "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/machineTypes/e2-standard-2",
 "canIpForward": false,
 "networkInterfaces": [
   {
     "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
     "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
     "accessConfigs": [
       {
         "type": "ONE_TO_ONE_NAT",
         "name": "external-nat",
         "networkTier": "PREMIUM"
       }
     ]
   }
 ],
 "disks": [
   {
     "type": "PERSISTENT",
     "boot": true,
     "mode": "READ_WRITE",
     "autoDelete": true,
     "deviceName": "VM_NAME",
     "initializeParams": {
       "sourceImage": "projects/debian-cloud/global/images/DEBIAN_IMAGE_NAME",
       "diskType": "projects/PROJECT_ID/zones/ZONE/diskTypes/pd-standard",
       "diskSizeGb": "10"
     }
   }
 ],
 "metadata": {
   "items": [
     {
       "key": "startup-script",
       "value": "#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\nvm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\nhttp://metadata.google.internal/computeMetadata/v1/instance/name)\"\necho \"Page served from: $vm_hostname\" | \\\ntee /var/www/html/index.html\nsystemctl restart apache2"
     }
   ]
 },
 "scheduling": {
   "preemptible": false
 },
 "deletionProtection": false
}

instanceGroups.insert メソッドに POST リクエストを送信して、2 つのインスタンス グループを作成します。PROJECT_ID は実際のプロジェクト ID に置き換えます。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups

{
 "name": "ig-b",
 "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
 "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet"
}

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups

{
 "name": "ig-d",
 "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
 "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet"
}

instanceGroups.addInstances メソッドに POST リクエストを送信して、各インスタンス グループにインスタンスを追加します。PROJECT_ID は実際のプロジェクト ID に置き換えます。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-b/addInstances

{
 "instances": [
   {
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-b1",
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-b2"
   }
 ]
}

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups/ig-d/addInstances

{
 "instances": [
   {
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-d1",
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-d2"
   }
 ]
}

プライマリ バックエンドの追加

この手順は、既存の内部パススルー ネットワーク ロードバランサのバックエンド サービスに非マネージド インスタンス グループをプライマリ バックエンドとして追加する際に使用できます。この構成例では、インスタンス グループ ig-d をプライマリ バックエンドとして be-ilb ロードバランサに追加する方法を示します。

コンソール

  1. Google Cloud コンソールで、[ロード バランシング] ページに移動します。

    [ロード バランシング] に移動

  2. [ロードバランサ] タブで、既存の内部 TCP または内部 UDP ロードバランサの名前をクリックします(この例の場合は、be-ilb)。

  3. 編集アイコン をクリックします。

  4. [バックエンドの構成] で、[バックエンドを追加] をクリックして、非マネージド インスタンス グループを選択します(この例の場合は、ig-d)。

  5. [このインスタンス グループをバックアップ用のフェイルオーバー グループとして使用する] を必ずオフにしてください。

  6. [完了]、[更新] の順にクリックします。

gcloud

既存の内部パススルー ネットワーク ロードバランサのバックエンド サービスにプライマリ バックエンドを追加するには、次の gcloud コマンドを使用します。

gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
   --instance-group INSTANCE_GROUP_NAME \
   --instance-group-zone INSTANCE_GROUP_ZONE \
   --region REGION

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

  • BACKEND_SERVICE_NAME: ロードバランサのバックエンド サービスの名前。たとえば、be-ilb を使用します。
  • INSTANCE_GROUP_NAME: プライマリ バックエンドとして追加するインスタンス グループの名前。たとえば、ig-d を使用します。
  • INSTANCE_GROUP_ZONE: インスタンス グループが定義されているゾーン。たとえば、us-west1-c を使用します。
  • REGION: ロードバランサのリージョン。たとえば、us-west1 を使用します。

API

regionBackendServices.patch メソッドを使用して、既存のバックエンド サービスにプライマリ バックエンドを追加します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/backendServices/BACKEND_SERVICE_NAME

{
  "backends":
  [
    {
      "balancingMode": "connection",
      "failover": false,
      "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/INSTANCE_GROUP_ZONE/instanceGroups/INSTANCE_GROUP_NAME"
    }
  ]
}

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

  • PROJECT_ID: プロジェクト ID
  • REGION: ロードバランサのリージョン。たとえば、us-west1 を使用します。
  • BACKEND_SERVICE_NAME: ロードバランサのバックエンド サービスの名前。たとえば、be-ilb を使用します。
  • INSTANCE_GROUP_NAME: プライマリ バックエンドとして追加するインスタンス グループの名前。たとえば、ig-d を使用します。
  • INSTANCE_GROUP_ZONE: インスタンス グループが定義されているゾーン。たとえば、us-west1-c を使用します。

フェイルオーバー バックエンドの追加

この手順は、既存の内部パススルー ネットワーク ロードバランサのバックエンド サービスに非マネージド インスタンス グループをフェイルオーバー バックエンドとして追加する際に使用できます。この構成例では、インスタンス グループ ig-b をフェイルオーバー バックエンドとして be-ilb ロードバランサに追加する方法を示します。

コンソール

  1. Google Cloud コンソールで、[ロード バランシング] ページに移動します。

    [ロード バランシング] に移動

  2. [ロードバランサ] タブで、TCP / UDP(内部)タイプの既存のロードバランサの名前をクリックします(この例では be-ilb)。

  3. 編集アイコン をクリックします。

  4. [バックエンドの構成] で、[バックエンドを追加] をクリックして、非マネージド インスタンス グループを選択します(この例の場合は、ig-b)。

  5. [このインスタンス グループをバックアップ用のフェイルオーバー グループとして使用する] をオンにします。

  6. [完了]、[更新] の順にクリックします。

gcloud

既存の内部パススルー ネットワーク ロードバランサのバックエンド サービスにフェイルオーバー バックエンドを追加するには、次の gcloud コマンドを使用します。

gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
   --instance-group INSTANCE_GROUP_NAME \
   --instance-group-zone INSTANCE_GROUP_ZONE \
   --region REGION \
   --failover

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

  • BACKEND_SERVICE_NAME: ロードバランサのバックエンド サービスの名前。たとえば、be-ilb を使用します。
  • INSTANCE_GROUP_NAME: プライマリ バックエンドとして追加するインスタンス グループの名前。たとえば、ig-b を使用します。
  • INSTANCE_GROUP_ZONE: インスタンス グループが定義されているゾーン。たとえば、us-west1-a を使用します。
  • REGION: ロードバランサのリージョン。たとえば、us-west1 を使用します。

API

regionBackendServices.patch メソッドを使用して、既存のバックエンド サービスにフェイルオーバー バックエンドを追加します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/backendServices/BACKEND_SERVICE_NAME

{
  "backends": 
  [
    {
      "balancingMode": "connection",
      "failover": true,
      "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/INSTANCE_GROUP_ZONE/instanceGroups/INSTANCE_GROUP_NAME"
    }
  ]
}

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

  • PROJECT_ID: プロジェクト ID
  • BACKEND_SERVICE_NAME: ロードバランサのバックエンド サービスの名前。たとえば、be-ilb を使用します。
  • INSTANCE_GROUP_NAME: プライマリ バックエンドとして追加するインスタンス グループの名前。たとえば、ig-b を使用します。
  • INSTANCE_GROUP_ZONE: インスタンス グループが定義されているゾーン。たとえば、us-west1-a を使用します。
  • REGION: ロードバランサのリージョン。たとえば、us-west1 を使用します。

プライマリ バックエンドまたはフェイルオーバー バックエンドの変換

内部パススルー ネットワーク ロードバランサのバックエンド サービスからインスタンス グループを削除せずに、プライマリ バックエンドをフェイルオーバー バックエンドに変換すること(またはその逆)ができます。

コンソール

  1. Google Cloud コンソールで、[ロード バランシング] ページに移動します。

    [ロード バランシング] に移動

  2. [ロードバランサ] タブで、TCP / UDP(内部)タイプの既存のロードバランサの名前をクリックします。

  3. 編集アイコン をクリックします。

  4. [バックエンドの構成] で、いずれかのバックエンド インスタンス グループの名前をクリックします。次に、以下のリソースをご覧ください。

    • インスタンス グループをフェイルオーバー バックエンドにするには、[このインスタンス グループをバックアップ用のフェイルオーバー グループとして使用する] をオンにします。
    • インスタンス グループをプライマリ バックエンドにするには、[このインスタンス グループをバックアップ用のフェイルオーバー グループとして使用する] をオフにします。
  5. [完了]、[更新] の順にクリックします。

gcloud

既存のプライマリ バックエンドをフェイルオーバー バックエンドに変換するには、次の gcloud コマンドを使用します。

gcloud compute backend-services update-backend BACKEND_SERVICE_NAME \
   --instance-group INSTANCE_GROUP_NAME \
   --instance-group-zone INSTANCE_GROUP_ZONE \
   --region REGION \
   --failover

既存のフェイルオーバー バックエンドをプライマリ バックエンドに変換するには、次の gcloud コマンドを使用します。

gcloud compute backend-services update-backend BACKEND_SERVICE_NAME \
   --instance-group INSTANCE_GROUP_NAME \
   --instance-group-zone INSTANCE_GROUP_ZONE \
   --region REGION \
   --no-failover

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

  • BACKEND_SERVICE_NAME: ロードバランサのバックエンド サービスの名前
  • INSTANCE_GROUP_NAME: プライマリ バックエンドとして追加するインスタンス グループの名前
  • INSTANCE_GROUP_ZONE: インスタンス グループが定義されているゾーン
  • REGION: ロードバランサのリージョン

API

regionBackendServices.patch メソッドを使用してプライマリ バックエンドをフェイルオーバー バックエンド(またはその逆)に変換します。

プライマリ バックエンドをフェイルオーバー バックエンドに変換するには、次のように指定します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/backendServices/BACKEND_SERVICE_NAME

{
  "backends": 
  [
    {
      "failover": true,
      "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/INSTANCE_GROUP_ZONE/instanceGroups/INSTANCE_GROUP_NAME"
    }
  ]
}

フェイルオーバー バックエンドをプライマリ バックエンドに変換するには、次のように指定します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/backendServices/BACKEND_SERVICE_NAME

{
  "backends": 
  [
    {
      "failover": false,
      "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/INSTANCE_GROUP_ZONE/instanceGroups/INSTANCE_GROUP_NAME"
    }
  ],
}

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

  • PROJECT_ID: プロジェクト ID
  • BACKEND_SERVICE_NAME: ロードバランサのバックエンド サービスの名前
  • INSTANCE_GROUP_NAME: プライマリ バックエンドとして追加するインスタンス グループの名前
  • INSTANCE_GROUP_ZONE: インスタンス グループが定義されているゾーン
  • REGION: ロードバランサのリージョン

フェイルオーバー ポリシーの構成

このセクションでは、内部パススルー ネットワーク ロードバランサのバックエンド サービスのフェイルオーバー ポリシーを管理する方法について説明します。フェイルオーバー ポリシーは次のように構成されます。

  • フェイルオーバー率
  • すべてのバックエンド VM が正常でない場合のトラフィックの廃棄
  • フェイルオーバー時にコネクション ドレインを行う

フェイルオーバー ポリシーのパラメータについて詳しくは、以下をご覧ください。

フェイルオーバー ポリシーの定義

次の手順は、既存の内部パススルー ネットワーク ロードバランサのフェイルオーバー ポリシーを定義する方法について説明します。

コンソール

Google Cloud コンソールを使用してフェイルオーバー ポリシーを定義するには、少なくとも 1 つのフェイルオーバー バックエンドが必要です。

  1. Google Cloud コンソールで、[ロード バランシング] ページに移動します。

    [ロード バランシング] に移動

  2. [ロードバランサ] タブで、TCP / UDP(内部)タイプの既存のロードバランサの名前をクリックします。

  3. 編集アイコン をクリックします。

  4. 少なくとも 1 つのフェイルオーバー バックエンドが存在することを確認してください。ロードバランサのバックエンドの少なくとも 1 つで、[このインスタンス グループをバックアップ用のフェイルオーバー グループとして使用する] をオンにする必要があります。

  5. [詳細構成] をクリックします。

    • [フェイルオーバー ポリシー] で、[フェイルオーバー率] を 0.01.0 の値に設定します。
    • アクティブな VM とバックアップ VM がすべて正常でない場合にトラフィックをドロップするには、[トラフィックのドロップを有効にする] をオンにします。
    • フェイルオーバーの際に既存の接続をすばやく終了させるには、[フェイルオーバー時にコネクション ドレインを有効にする] をオンにします。
  6. [確認と完了] をクリックしてから、[更新] をクリックします。

gcloud

フェイルオーバー ポリシーを定義するには、gcloud CLI を使用してロードバランサのバックエンド サービスを更新します。

gcloud compute backend-services update BACKEND_SERVICE_NAME \
   --region REGION \
   --failover-ratio FAILOVER_RATIO \
   --drop-traffic-if-unhealthy \
   --no-connection-drain-on-failover

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

  • BACKEND_SERVICE_NAME: ロードバランサのバックエンド サービスの名前。たとえば、be-ilb を使用します。
  • REGION: ロードバランサのリージョン。たとえば、us-west1 を使用します。
  • FAILOVER_RATIO: フェイルオーバー率。可能な値は、0.01.0 です。たとえば、0.75 を使用します。
  • --drop-traffic-if-unhealthy を指定すると、プライマリ VM とバックアップ VM がすべて正常でない場合に、ロードバランサがトラフィックをドロップするように設定されます。バックエンド VM がすべて正常でない場合にすべてのプライマリ VM 間でトラフィックを分散させるには、この指定を --no-drop-traffic-if-unhealthy に変更します。
  • --no-connection-drain-on-failover を指定すると、既存の TCP 接続をフェイルオーバー中にすばやく終了するようにロードバランサが設定されます。--connection-drain-on-failover を使用すると、フェイルオーバーの際にコネクション ドレインが有効になります。

API

regionBackendServices.patch メソッドを使用してフェイルオーバー ポリシーを定義します。

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/backendServices/BACKEND_SERVICE_NAME

{
  "failoverPolicy":
  {
    "failoverRatio": FAILOVER_RATIO,
    "dropTrafficIfUnhealthy": [true|false],
    "disableConnectionDrainOnFailover": [true|false]
  }
}

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

  • PROJECT_ID: プロジェクト ID
  • REGION: ロードバランサのリージョン
  • BACKEND_SERVICE_NAME: ロードバランサのバックエンド サービスの名前
  • FAILOVER_RATIO: フェイルオーバー率。可能な値は、0.01.0 です。
  • dropTrafficIfUnhealthytrue に設定すると、プライマリ VM とバックアップ VM がすべて正常でない場合に、ロードバランサがトラフィックをドロップするように設定されます。バックエンド VM がすべて正常でない場合にすべてのプライマリ VM 間でトラフィックを分散させるには、この指定を false に設定します。
  • disableConnectionDrainOnFailovertrue に設定すると、プライマリ VM とバックアップ VM がすべて正常でない場合に、フェイルオーバーの際に既存の TCP 接続をすばやく終了するようにロードバランサが設定されます。この値を false に設定すると、フェイルオーバーの際にコネクション ドレインが有効になります。

フェイルオーバー ポリシーの表示

次の手順は、内部パススルー ネットワーク ロードバランサの既存のフェイルオーバー ポリシーを表示します。

コンソール

内部パススルー ネットワーク ロードバランサを編集する際に、Google Cloud コンソールに既存のフェイルオーバー ポリシー設定が表示されます。手順については、フェイルオーバー ポリシーの定義をご覧ください。

gcloud

フェイルオーバー ポリシーの設定を一覧表示するには、gcloud CLI で次のコマンドを使用します。フェイルオーバー ポリシーで定義されていない設定は、デフォルトのフェイルオーバー ポリシーの値を使用します。

gcloud compute backend-services describe BACKEND_SERVICE_NAME \
   --region REGION \
   --format="get(failoverPolicy)"

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

  • BACKEND_SERVICE_NAME: ロードバランサのバックエンド サービスの名前
  • REGION: ロードバランサのリージョン

API

regionBackendServices.get メソッドを使用してフェイルオーバー ポリシーを表示します

この API リクエストに対するレスポンスは、フェイルオーバー ポリシーを示します。たとえば、次のようになります。

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/backendServices/BACKEND_SERVICE_NAME

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

  • PROJECT_ID: プロジェクト ID
  • REGION: ロードバランサのリージョン
  • BACKEND_SERVICE_NAME: ロードバランサのバックエンド サービスの名前
{
...
"failoverPolicy": {
  "disableConnectionDrainOnFailover": false,
  "dropTrafficIfUnhealthy": false,
  "failoverRatio": 0.75
...
}

次のステップ