このガイドでは、サンプルを示しながら、Google Cloud の内部パススルー ネットワーク ロードバランサのフェイルオーバーを構成する方法を説明します。このガイドに進む前に、次の内容を理解しておいてください。
権限
このガイドを使用する前に、インスタンスを作成し、プロジェクト内のネットワークを変更しておく必要があります。そのためにはプロジェクトの所有者または編集者であるか、または次の Compute Engine IAM ロールをすべて持っている必要があります。
タスク | 必要な役割 |
---|---|
ネットワーク、サブネット、ロードバランサ コンポーネントの作成 | ネットワーク管理者 |
ファイアウォール ルールの追加と削除 | セキュリティ管理者 |
インスタンスの作成 | Compute インスタンス管理者 |
詳細については、次のガイドをご覧ください。
設定
このガイドでは、フェイルオーバーを使用する内部パススルー ネットワーク ロードバランサを構成してテストする方法を説明します。このセクションでは、以下の構成方法について説明します。
- カスタム サブネットを持つ VPC ネットワークのサンプル
- バックエンド VM への受信接続を許可するファイアウォール ルール
- バックエンド VM:
- ゾーン
us-west1-a
内の非マネージド インスタンス グループ内の 1 つのプライマリ バックエンド - ゾーン
us-west1-c
内の非マネージド インスタンス グループ内の 1 つのフェイルオーバー バックエンド
- ゾーン
- 接続をテストし、フェイルオーバーの動作を監視する 1 つのクライアント VM
- 次の内部パススルー ネットワーク ロードバランサのコンポーネント:
- バックエンド サービスのヘルスチェック
- バックエンド VM 間の接続分散を管理する
us-west1
リージョン内の内部バックエンド サービス - ロードバランサのフロントエンドの内部転送ルールと内部 IP アドレス
この例のアーキテクチャは次のようになります。
ネットワーク、リージョン、サブネットの構成
この例では、次の VPC ネットワーク、リージョン、サブネットを使用します。
ネットワーク: ネットワークは、
lb-network
という名前のカスタムモードの VPC ネットワークです。リージョン: リージョンは、
us-west1
です。サブネット: サブネット
lb-subnet
は、10.1.2.0/24
の IP 範囲です。
サンプルのネットワークとサブネットを作成する手順は次のとおりです。
コンソール
Google Cloud コンソールの [VPC ネットワーク] ページに移動します。
[VPC ネットワークを作成] をクリックします。
[名前] に「
lb-network
」を入力します。[サブネット] セクションで次の設定を行います。
- [サブネット作成モード] を [カスタム] に設定します。
- [新しいサブネット] セクションに、次の情報を入力します。
- 名前:
lb-subnet
- リージョン:
us-west1
- IP アドレス範囲:
10.1.2.0/24
- [完了] をクリックします。
- 名前:
[作成] をクリックします。
gcloud
カスタム VPC ネットワークを作成します。
gcloud compute networks create lb-network --subnet-mode=custom
サブネットを
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/22
と35.191.0.0/16
)からのトラフィックを許可します。この例では、ターゲットタグallow-health-check
を使用して、適用するインスタンスを識別します。
これらのファイアウォール ルールがない場合は、デフォルトの上り(内向き)拒否ルールによってバックエンド インスタンスへの受信トラフィックがブロックされます。
コンソール
Google Cloud コンソールで [ファイアウォール ポリシー] ページに移動します。
[ファイアウォール ルールを作成] をクリックして次の情報を入力し、サブネット トラフィックを許可するルールを作成します。
- 名前:
fw-allow-lb-subnet
- ネットワーク:
lb-network
- 優先度:
1000
- トラフィックの方向: 上り(内向き)
- 一致したときのアクション: 許可
- ターゲット: ネットワーク内のすべてのインスタンス
- ソースフィルタ: IPv4 の範囲
- 送信元 IPv4 範囲:
10.1.2.0/24
- プロトコルとポート: すべて許可
- 名前:
[作成] をクリックします。
[ファイアウォール ルールを作成] を再度クリックして、SSH 接続の受信を許可するルールを作成します。
- 名前:
fw-allow-ssh
- ネットワーク:
lb-network
- 優先度:
1000
- トラフィックの方向: 上り(内向き)
- 一致したときのアクション: 許可
- ターゲット: 指定されたターゲットタグ
- ターゲットタグ:
allow-ssh
- ソースフィルタ: IPv4 の範囲
- 送信元 IPv4 範囲:
0.0.0.0/0
- プロトコルとポート: 指定されたプロトコルとポートを選択してから、
tcp:22
のように入力します。
- 名前:
[作成] をクリックします。
[ファイアウォール ルールを作成] をもう一度クリックして、Google Cloud ヘルスチェックを許可するルールを作成します。
- 名前:
fw-allow-health-check
- ネットワーク:
lb-network
- 優先度:
1000
- トラフィックの方向: 上り(内向き)
- 一致したときのアクション: 許可
- ターゲット: 指定されたターゲットタグ
- ターゲットタグ:
allow-health-check
- ソースフィルタ: IPv4 の範囲
- 送信元 IPv4 範囲:
130.211.0.0/22
と35.191.0.0/16
- プロトコルとポート: すべて許可
- 名前:
[作成] をクリックします。
gcloud
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
ネットワーク タグ
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
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 の作成
Google Cloud コンソールで [VM インスタンス] ページに移動します。
次の手順を繰り返し、4 つの VM を作成します。次の名前とゾーンの組み合わせを使用します。
- 名前:
vm-a1
、ゾーン:us-west1-a
- 名前:
vm-a2
、ゾーン:us-west1-a
- 名前:
vm-c1
、ゾーン:us-west1-c
- 名前:
vm-c2
、ゾーン:us-west1-c
- 名前:
[インスタンスを作成] をクリックします。
ステップ 2 に示したように [名前] を設定します。
[リージョン] には、
us-west1
を選択し、ステップ 2 に示したゾーンを選択します。[ブートディスク] セクションで、選択したイメージが Debian GNU/Linux 10 (buster) であることを確認します。必要に応じてイメージを変更するには、[選択] をクリックします。
[詳細オプション] をクリックします。
[ネットワーキング] をクリックして次のフィールドを構成します。
- [ネットワーク タグ] に「
allow-health-check
」と「allow-ssh
」を入力します。 - [ネットワーク インターフェース] で、次のように選択します。
- ネットワーク:
lb-network
- サブネット:
lb-subnet
- ネットワーク:
- [ネットワーク タグ] に「
[管理] をクリックします。[起動スクリプト] フィールドに次のスクリプトを入力します。スクリプトの内容は 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
[作成] をクリックします。
インスタンス·グループの作成
Google Cloud コンソールの [インスタンス グループ] ページに移動します。
次の手順を繰り返し、それぞれ 2 つの VM を持つ 2 つの非マネージド インスタンス グループを作成します。以下の組み合わせを使用します。
- インスタンス グループ:
ig-a
、ゾーン:us-west1-a
、VM:vm-a1
とvm-a2
- インスタンス グループ:
ig-c
、ゾーン:us-west1-c
、VM:vm-c1
とvm-c2
- インスタンス グループ:
[インスタンス グループを作成] をクリックします。
[新しい非マネージド インスタンス グループ] をクリックします。
ステップ 2 に示したように [名前] を設定します。
[ロケーション] セクションで、[リージョン] に
us-west1
を選択し、ステップ 2 で示したように [ゾーン] を選択します。[ネットワーク] に「
lb-network
」と入力します。[サブネットワーク] に「
lb-subnet
」と入力します。[VM インスタンス] セクションに、ステップ 2 で示した VM を追加します。
[作成] をクリックします。
gcloud
VM_NAME
とZONE
の 4 つの組み合わせを使用して、次のコマンドを 4 回実行して 4 つの VM を作成します。スクリプトの内容は 4 つの VM ですべて同じです。vm-a1
のVM_NAME
とus-west1-a
のZONE
vm-a2
のVM_NAME
とus-west1-a
のZONE
vm-c1
のVM_NAME
とus-west1-c
のZONE
vm-c2
のVM_NAME
とus-west1-c
のZONE
gcloud compute instances create VM_NAME \ --zone=ZONE \ --image-family=debian-10 \ --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 つの非マネージド インスタンス グループを作成します。
gcloud compute instance-groups unmanaged create ig-a \ --zone=us-west1-a gcloud compute instance-groups unmanaged create ig-c \ --zone=us-west1-c
適切なインスタンス グループに 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-a1
のVM_NAME
とus-west1-a
のZONE
vm-a2
のVM_NAME
とus-west1-a
のZONE
vm-c1
のVM_NAME
とus-west1-c
のZONE
vm-c2
のVM_NAME
とus-west1-c
のZONE
次のように置き換えます。
PROJECT_ID
: プロジェクト IDZONE
: インスタンスのゾーンDEBIAN_IMAGE_NAME
: インスタンスの Debian イメージの名前。現在のDEBIAN_IMAGE_NAME
を取得するには、次のgcloud
コマンドを実行します。gcloud compute images list \ --filter="family=debian-10"
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
)。クライアントは、フェイルオーバーの仕組みを示すために使用されます。
コンソール
Google Cloud コンソールで [VM インスタンス] ページに移動します。
[インスタンスを作成] をクリックします。
[名前] を
vm-client
に設定します。[ゾーン] を
us-west1-a
に設定します。[詳細オプション] をクリックします。
[ネットワーキング] をクリックして次のフィールドを構成します。
- [ネットワーク タグ] に「
allow-ssh
」と入力します。 - [ネットワーク インターフェース] で、次のように選択します。
- ネットワーク:
lb-network
- サブネット:
lb-subnet
- ネットワーク:
- [ネットワーク タグ] に「
[作成] をクリックします。
gcloud
クライアント VM はロードバランサと同じリージョン内の任意のゾーンにあり、そのリージョン内の任意のサブネットを使用できます。この例では、クライアントは us-west1-a
ゾーンにあり、プライマリ VM とバックアップ VM が使用するサブネットと同じサブネットを使用します。
gcloud compute instances create vm-client \ --zone=us-west1-a \ --image-family=debian-10 \ --image-project=debian-cloud \ --tags=allow-ssh \ --subnet=lb-subnet
API
instances.insert
メソッドに POST
リクエストを送信します。
次のように置き換えます。
PROJECT_ID
: プロジェクト IDDEBIAN_IMAGE_NAME
: インスタンスの Debian イメージの名前。現在のDEBIAN_IMAGE_NAME
を取得するには、次のgcloud
コマンドを実行します。gcloud compute images list \ --filter="family=debian-10"
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
)を指定しています。
コンソール
構成を開始する
Google Cloud コンソールで、[ロード バランシング] ページに移動します。
- [ロードバランサを作成] をクリックします。
- [ロードバランサの種類] で [ネットワーク ロードバランサ(TCP / UDP / SSL)] を選択し、[次へ] をクリックします。
- [プロキシまたはパススルー] で [パススルー ロードバランサ] を選択し、[次へ] をクリックします。
- [インターネット接続または内部] で [内部] を選択し、[次へ] をクリックします。
- [構成] をクリックします。
基本構成
- [名前] を
be-ilb
に設定します。 - [リージョン] を
us-west1
に設定します。 - [ネットワーク] を
lb-network
に設定します。 - [バックエンドの構成] をクリックして、次の変更を行います。
- [バックエンド] の [新しいアイテム] セクションで
ig-a
インスタンス グループを選択します。[このインスタンス グループをバックアップ用のフェイルオーバー グループとして使用する] を必ずオフにしてください。[完了] をクリックします。 - [バックエンドを追加] をクリックします。[新しいアイテム] セクションが表示されたら、
ig-c
インスタンス グループを選択します。[このインスタンス グループをバックアップ用のフェイルオーバー グループとして使用する] をオンにします。[完了] をクリックします。 - [ヘルスチェック] で [別のヘルスチェックを作成] を選択し、次の情報を入力して [保存して次へ] をクリックします。
- 名前:
hc-http-80
- プロトコル:
HTTP
- ポート:
80
- プロキシ プロトコル:
NONE
- リクエストパス:
/
。Google Cloud コンソールを使用してロードバランサを作成すると、ヘルスチェックはグローバルになります。リージョン ヘルスチェックを作成する場合は、gcloud
または API を使用します。
- 名前:
- [詳細構成] をクリックします。[フェイルオーバー ポリシー] セクションで、次のように設定します。
- フェイルオーバー率:
0.75
- [フェイルオーバー時のコネクション ドレインを有効にする] をオンにします。
- フェイルオーバー率:
- 続行する前に、[バックエンドの設定] の隣に青いチェックマークがあることを確認します。ない場合は、この手順を確認します。
- [バックエンド] の [新しいアイテム] セクションで
- [フロントエンドの構成] をクリックします。[新しいフロントエンドの IP とポート] セクションで、次の変更を行います。
- 名前:
fr-ilb
- サブネットワーク:
ilb-subnet
- [内部 IP] から、[静的内部 IP アドレスの予約] を選択し、以下の情報を入力して [予約] をクリックします。
- 名前:
ip-ilb
- 静的 IP アドレス: 選択を許可
- カスタム IP アドレス:
10.1.2.99
- 名前:
- ポート: [単一] を選択して、ポート番号に「
80
」を入力します。 - 続行する前に、[フロントエンドの設定] の隣に青いチェックマークがあることを確認します。ない場合は、この手順を確認します。
- 名前:
- [確認と完了] をクリックします。設定を再度確認します。
- [作成] をクリックします。
gcloud
新しい HTTP ヘルスチェックを作成して、ポート 80 で VM との TCP 接続をテストします。
gcloud compute health-checks create http hc-http-80 \ --region=us-west1 \ --port=80
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
プライマリ バックエンドをバックエンド サービスに追加します。
gcloud compute backend-services add-backend be-ilb \ --region=us-west1 \ --instance-group=ig-a \ --instance-group-zone=us-west1-a
フェイルオーバー バックエンドをバックエンド サービスに追加します。
gcloud compute backend-services add-backend be-ilb \ --region=us-west1 \ --instance-group=ig-c \ --instance-group-zone=us-west1-c \ --failover
バックエンド サービスの転送ルールを作成します。転送ルールを作成するときは、サブネット内の内部 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 からロードバランサに接続します。この手順は、後ほど他のテストを完了するために使用します。
クライアント VM インスタンスに接続します。
gcloud compute ssh vm-client --zone=us-west1-a
curl
を使用して IP アドレスに接続するロードバランサへのウェブ リクエストを作成します。curl http://10.1.2.99
curl
コマンドを実行して戻された値の文字列をメモします。レスポンスを生成するバックエンド VM の名前が文字列内に表示されます(たとえば、Page served from: vm-a1
)。
初期状態のテスト
サンプルのロードバランサを構成した後は、通常、4 つのバックエンド VM すべてが正常に動作するようになります。
- 2 つのプライマリ VM(
vm-a1
とvm-a2
) - 2 つのバックアップ VM(
vm-c1
とvm-c2
)
クライアント テスト手順に沿って進めます。2 つ目のステップを数回繰り返します。想定される動作は、2 つのプライマリ VM(vm-a1
と vm-a2
)が両方とも正常になりトラフィックが正常に提供されることです。このロードバランサでセッション アフィニティが設定されていないため、約半分のレスポンスが各プライマリ VM によって処理されます。
フェイルオーバーのテスト
このテストでは、vm-a1
の障害をシミュレートしてフェイルオーバーの動作を確認できます。
vm-a1
VM に接続します。gcloud compute ssh vm-a1 --zone=us-west1-a
Apache ウェブサーバーを停止します。10 秒後、Google Cloud はこの VM を正常ではないと認識します(セットアップで作成した
hc-http-80
ヘルスチェックでは、デフォルトのチェック間隔は 5 秒とされ、連続で 2 回のプローブの失敗が異常しきい値として使用されます)。sudo apachectl stop
クライアント テスト手順に沿って進めます。2 つ目のステップを数回繰り返します。想定される動作は、2 つのバックアップ VM(
vm-c1
とvm-c2
)によってトラフィックが正常に提供されることです。正常なプライマリ VM(vm-a2
)は 1 つのみであるため、正常なプライマリ VM のすべてのプライマリ VM に対する割合は0.5
になります。この数はフェイルオーバーしきい値の0.75
よりも小さいため、Google Cloud によってバックアップ VM を使用するようにロードバランサのアクティブプールが再構成されます。このロードバランサでセッション アフィニティが構成されない限り、約半分のレスポンスが各バックアップ VM によって処理されます。
フェイルバックのテスト
このテストでは、vm-a1
上の Apache サーバーを再起動してフェイルバックをシミュレートします。
vm-a1
VM に接続します。gcloud compute ssh vm-a1 --zone=us-west1-a
Apache ウェブサーバーを起動し、10 秒待ちます。
sudo apachectl start
クライアント テスト手順に沿って進めます。2 つ目のステップを数回繰り返します。想定される動作は、2 つのプライマリ VM(
vm-a1
とvm-a2
)によりトラフィックが正常に提供されることです。両方のプライマリ VM が正常な場合、すべてのプライマリ VM に対する正常なプライマリ VM の割合は1.0
になります。この値は、フェイルオーバーしきい値0.75
よりも大きい値であるため、プライマリ VM が再び使用されるように Google Cloud によってアクティブプールが構成されます。
バックエンド VM の追加
このセクションでは、ロードバランサにさらにプライマリ VM とバックアップ VM を追加してサンプルの構成例を拡張します。同じリージョン内の複数のゾーンにプライマリ VM とバックアップ VM を分散できることを示す 2 つのバックエンド インスタンス グループを作成します。
- 第 3 のインスタンス グループ(
us-west1-c
のig-d
)は、2 つの VM を持つプライマリ バックエンドとして動作します。vm-d1
vm-d2
- 第 4 のインスタンス グループ(
us-west1-a
のig-b
)は、次の 2 つの VM を持つフェイルオーバー バックエンドとして動作します。vm-b1
vm-b2
この例の修正されたアーキテクチャは次のようになります。
追加の VM とインスタンス グループを作成する
追加のプライマリ VM とバックアップ VM、および対応する非マネージド インスタンス グループを作成します。
コンソール
バックエンド VM の作成
Google Cloud コンソールで [VM インスタンス] ページに移動します。
次の手順を繰り返し、4 つの VM を作成します。次の名前とゾーンの組み合わせを使用します。
- 名前:
vm-b1
、ゾーン:us-west1-a
- 名前:
vm-b2
、ゾーン:us-west1-a
- 名前:
vm-d1
、ゾーン:us-west1-c
- 名前:
vm-d2
、ゾーン:us-west1-c
- 名前:
[インスタンスを作成] をクリックします。
ステップ 2 に示したように [名前] を設定します。
[リージョン] には、
us-west1
を選択し、ステップ 2 に示したゾーンを選択します。[ブートディスク] セクションで、選択したイメージが Debian GNU/Linux 10 (buster) であることを確認します。必要に応じてイメージを変更するには、[選択] をクリックします。
[詳細オプション] をクリックして、次の変更を行います。
- [ネットワーク] をクリックして、ネットワーク タグ
allow-ssh
とallow-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
- [ネットワーク] をクリックして、ネットワーク タグ
[作成] をクリックします。
インスタンス·グループの作成
Google Cloud コンソールの [インスタンス グループ] ページに移動します。
次の手順を繰り返し、それぞれが 2 つの VM を持つ 2 つの非マネージド インスタンス グループを作成します。以下のような組み合わせを使用します。
- インスタンス グループ:
ig-b
、ゾーン:us-west1-a
、VM:vm-b1
とvm-b2
- インスタンス グループ:
ig-d
、ゾーン:us-west1-c
、VM:vm-d1
とvm-d2
- インスタンス グループ:
[インスタンス グループを作成] をクリックします。
[新しい非マネージド インスタンス グループ] をクリックします。
ステップ 2 に示したように [名前] を設定します。
[ロケーション] セクションで、[リージョン] に
us-west1
を選択し、ステップ 2 で示したように [ゾーン] を選択します。[ネットワーク] に「
lb-network
」と入力します。[サブネットワーク] に「
lb-subnet
」と入力します。[VM インスタンス] セクションに、ステップ 2 で示した VM を追加します。
[作成] をクリックします。
gcloud
VM_NAME
とZONE
の 4 つの組み合わせを使用して、次のコマンドを 4 回実行して 4 つの VM を作成します。スクリプトの内容は 4 つの VM ですべて同じです。vm-b1
のVM_NAME
とus-west1-a
のZONE
vm-b2
のVM_NAME
とus-west1-a
のZONE
vm-d1
のVM_NAME
とus-west1-c
のZONE
vm-d2
のVM_NAME
とus-west1-c
のZONE
gcloud compute instances create VM_NAME \ --zone=ZONE \ --image-family=debian-10 \ --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 つの非マネージド インスタンス グループを作成します。
gcloud compute instance-groups unmanaged create ig-b \ --zone=us-west1-a gcloud compute instance-groups unmanaged create ig-d \ --zone=us-west1-c
適切なインスタンス グループに 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-b1
のVM_NAME
とus-west1-a
のZONE
vm-b2
のVM_NAME
とus-west1-a
のZONE
vm-d1
のVM_NAME
とus-west1-c
のZONE
vm-d2
のVM_NAME
とus-west1-c
のZONE
次のように置き換えます。
PROJECT_ID
: プロジェクト IDDEBIAN_IMAGE_NAME
: インスタンスの Debian イメージの名前。現在のDEBIAN_IMAGE_NAME
を取得するには、次のgcloud
コマンドを実行します。gcloud compute images list \ --filter="family=debian-10"
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
ロードバランサに追加する方法を示します。
コンソール
Google Cloud コンソールの [ロード バランシング] ページに移動します。
[ロードバランサ] タブで、既存の内部 TCP または内部 UDP ロードバランサの名前をクリックします(この例の場合は、
be-ilb
)。編集アイコン
をクリックします。[バックエンドの構成] で、[バックエンドを追加] をクリックして、非マネージド インスタンス グループを選択します(この例の場合は、
ig-d
)。[このインスタンス グループをバックアップ用のフェイルオーバー グループとして使用する] を必ずオフにしてください。
[完了]、[更新] の順にクリックします。
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
: プロジェクト IDREGION
: ロードバランサのリージョン。たとえば、us-west1
を使用します。BACKEND_SERVICE_NAME
: ロードバランサのバックエンド サービスの名前。たとえば、be-ilb
を使用します。INSTANCE_GROUP_NAME
: プライマリ バックエンドとして追加するインスタンス グループの名前。たとえば、ig-d
を使用します。INSTANCE_GROUP_ZONE
: インスタンス グループが定義されているゾーン。たとえば、us-west1-c
を使用します。
フェイルオーバー バックエンドの追加
この手順は、既存の内部パススルー ネットワーク ロードバランサのバックエンド サービスに非マネージド インスタンス グループをフェイルオーバー バックエンドとして追加する際に使用できます。この構成例では、インスタンス グループ ig-b
をフェイルオーバー バックエンドとして be-ilb
ロードバランサに追加する方法を示します。
コンソール
Google Cloud コンソールの [ロード バランシング] ページに移動します。
[ロードバランサ] タブで、TCP / UDP(内部)タイプの既存のロードバランサの名前をクリックします(この例では
be-ilb
)。編集アイコン
をクリックします。[バックエンドの構成] で、[バックエンドを追加] をクリックして、非マネージド インスタンス グループを選択します(この例の場合は、
ig-b
)。[このインスタンス グループをバックアップ用のフェイルオーバー グループとして使用する] をオンにします。
[完了]、[更新] の順にクリックします。
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
: プロジェクト IDBACKEND_SERVICE_NAME
: ロードバランサのバックエンド サービスの名前。たとえば、be-ilb
を使用します。INSTANCE_GROUP_NAME
: プライマリ バックエンドとして追加するインスタンス グループの名前。たとえば、ig-b
を使用します。INSTANCE_GROUP_ZONE
: インスタンス グループが定義されているゾーン。たとえば、us-west1-a
を使用します。REGION
: ロードバランサのリージョン。たとえば、us-west1
を使用します。
プライマリ バックエンドまたはフェイルオーバー バックエンドの変換
内部パススルー ネットワーク ロードバランサのバックエンド サービスからインスタンス グループを削除せずに、プライマリ バックエンドをフェイルオーバー バックエンドに変換すること(またはその逆)ができます。
コンソール
Google Cloud コンソールの [ロード バランシング] ページに移動します。
[ロードバランサ] タブで、TCP / UDP(内部)タイプの既存のロードバランサの名前をクリックします。
編集アイコン
をクリックします。[バックエンドの構成] で、いずれかのバックエンド インスタンス グループの名前をクリックします。次に、以下のリソースをご覧ください。
- インスタンス グループをフェイルオーバー バックエンドにするには、[このインスタンス グループをバックアップ用のフェイルオーバー グループとして使用する] をオンにします。
- インスタンス グループをプライマリ バックエンドにするには、[このインスタンス グループをバックアップ用のフェイルオーバー グループとして使用する] をオフにします。
[完了]、[更新] の順にクリックします。
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
: プロジェクト IDBACKEND_SERVICE_NAME
: ロードバランサのバックエンド サービスの名前INSTANCE_GROUP_NAME
: プライマリ バックエンドとして追加するインスタンス グループの名前INSTANCE_GROUP_ZONE
: インスタンス グループが定義されているゾーンREGION
: ロードバランサのリージョン
フェイルオーバー ポリシーの構成
このセクションでは、内部パススルー ネットワーク ロードバランサのバックエンド サービスのフェイルオーバー ポリシーを管理する方法について説明します。フェイルオーバー ポリシーは次のように構成されます。
- フェイルオーバー率
- すべてのバックエンド VM が正常でない場合のトラフィックの廃棄
- フェイルオーバー時にコネクション ドレインを行う
フェイルオーバー ポリシーのパラメータについて詳しくは、以下をご覧ください。
フェイルオーバー ポリシーの定義
次の手順は、既存の内部パススルー ネットワーク ロードバランサのフェイルオーバー ポリシーを定義する方法について説明します。
コンソール
Google Cloud コンソールを使用してフェイルオーバー ポリシーを定義するには、少なくとも 1 つのフェイルオーバー バックエンドが必要です。
Google Cloud コンソールで、[ロード バランシング] ページに移動します。
[ロードバランサ] タブで、TCP / UDP(内部)タイプの既存のロードバランサの名前をクリックします。
編集アイコン
をクリックします。少なくとも 1 つのフェイルオーバー バックエンドが存在することを確認してください。ロードバランサのバックエンドの少なくとも 1 つで、[このインスタンス グループをバックアップ用のフェイルオーバー グループとして使用する] をオンにする必要があります。
[詳細構成] をクリックします。
- [フェイルオーバー ポリシー] で、[フェイルオーバー率] を
0.0
~1.0
の値に設定します。 - アクティブな VM とバックアップ VM がすべて正常でない場合にトラフィックをドロップするには、[トラフィックのドロップを有効にする] をオンにします。
- フェイルオーバーの際に既存の接続をすばやく終了させるには、[フェイルオーバー時にコネクション ドレインを有効にする] をオンにします。
- [フェイルオーバー ポリシー] で、[フェイルオーバー率] を
[確認と完了] をクリックしてから、[更新] をクリックします。
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.0
~1.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
: プロジェクト IDREGION
: ロードバランサのリージョンBACKEND_SERVICE_NAME
: ロードバランサのバックエンド サービスの名前FAILOVER_RATIO
: フェイルオーバー率。可能な値は、0.0
~1.0
です。dropTrafficIfUnhealthy
をtrue
に設定すると、プライマリ VM とバックアップ VM がすべて正常でない場合に、ロードバランサがトラフィックをドロップするように設定されます。バックエンド VM がすべて正常でない場合にすべてのプライマリ VM 間でトラフィックを分散させるには、この指定をfalse
に設定します。disableConnectionDrainOnFailover
をtrue
に設定すると、プライマリ 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
: プロジェクト IDREGION
: ロードバランサのリージョンBACKEND_SERVICE_NAME
: ロードバランサのバックエンド サービスの名前
{ ... "failoverPolicy": { "disableConnectionDrainOnFailover": false, "dropTrafficIfUnhealthy": false, "failoverRatio": 0.75 ... }
次のステップ
- 基礎知識については、内部パススルー ネットワーク ロードバランサの概要をご覧ください。
- フェイルオーバーに関する重要な情報については、内部パススルー ネットワーク ロードバランサのフェイルオーバーのコンセプトをご覧ください。
- 内部パススルー ネットワーク ロードバランサの構成例については、内部パススルー ネットワーク ロードバランサを設定するをご覧ください。
- 内部パススルー ネットワーク ロードバランサの Logging と Monitoring の構成については、内部パススルー ネットワーク ロードバランサのロギングとモニタリングをご覧ください。
- VPC ネットワークに接続されたピア ネットワークから内部パススルー ネットワーク ロードバランサにアクセスする方法については、内部パススルー ネットワーク ロードバランサと接続ネットワークをご覧ください。
- 内部パススルー ネットワーク ロードバランサの問題をトラブルシューティングする方法については、内部パススルー ネットワーク ロードバランサのトラブルシューティングをご覧ください。
- ロードバランサの設定をクリーンアップする。