Cloud DNS ルーティング ポリシーと内部 TCP/UDP ロードバランサのヘルスチェックを使用したマルチリージョン フェイルオーバー

1. はじめに

最終更新日: 2022 年 9 月 22 日

DNS ルーティング ポリシーとは

Cloud DNS ルーティング ポリシーを使用すると、重み付け、位置情報、ヘルスチェックなどの特定の条件に応じて DNS ベースのトラフィック ステアリングを構成できます。

Cloud DNS でサポートされるルーティング ポリシーは次のとおりです。

  • 重み付きラウンドロビン ルーティング ポリシー
  • 位置情報に基づくルーティング ポリシー
  • ジオフェンス ルーティング ポリシー
  • フェイルオーバー ルーティング ポリシー

このラボでは、フェイルオーバー ルーティング ポリシーを構成してテストします。

フェイルオーバー ルーティング ポリシー

Cloud DNS では、グローバル アクセスが有効になっている内部 TCP/UDP ロードバランサのヘルスチェックがサポートされています。フェイルオーバー ルーティング ポリシーでは、リソース レコードにプライマリ IP とバックアップ IP を構成できます。通常のオペレーションでは、Cloud DNS はプライマリ セットでプロビジョニングされた IP アドレスを使用してクエリに応答します。プライマリ セット内のすべての IP アドレスに障害が発生した(健全性が異常を示した)場合、Cloud DNS はバックアップ セット内の IP アドレスの提供を開始します。

ヘルスチェック

DNS ルーティング ポリシーは、ネイティブの内部ロードバランサの統合ヘルスチェック(UHC)に依存します。バックエンドの 20% 以上が正常な場合、内部ロードバランサは正常とみなされます。内部 TCP/UDP ロードバランサと内部 HTTP(S) ロードバランサのヘルスチェックでは、異なる情報が提供されます。内部 HTTP(S) ロードバランサの場合、UHC はすべての Envoy プロキシのヘルス ステータスを提供しますが、内部 TCP/UDP ロードバランサの場合、Cloud DNS は個々のバックエンド インスタンスから直接ヘルスシグナルを取得します。ヘルスチェックの詳細については、こちらをご覧ください。

作成するアプリの概要

この Codelab では、2 つのリージョンで実行されるウェブサイトを作成し、フェイルオーバー DNS ルーティング ポリシーを関連付けます。設定は次のようになります。

アクティブなリソース -

  • REGION_1 の L4 内部ロードバランサ
  • REGION_1 で Apache ウェブサーバーを実行している VM

バックアップ リソース -

  • REGION_2 の L4 内部ロードバランサ
  • REGION_2 で Apache ウェブサーバーを実行している VM

設定は次のようになります。

d0a91d3d3698f544.png

学習内容

  • フェイルオーバー ルーティング ポリシーを作成する方法
  • DNS フェイルオーバーをトリガーする
  • バックアップ セットにトラフィックを少しずつ転送する方法

必要なもの

  • DNS の基礎知識
  • Google Compute Engine に関する基本的な知識
  • L4 内部ロードバランサの基本的な知識

2. 設定と要件

  1. Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列です。この設定はいつでも変更できます。
  • プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud コンソールでは一意の文字列が自動生成されます。通常は、この内容を意識する必要はありません。ほとんどの Codelab では、プロジェクト ID(通常は PROJECT_ID と識別されます)を参照する必要があります。生成された ID が好みではない場合は、ランダムに別の ID を生成できます。または、ご自身で試して、利用可能かどうかを確認することもできます。このステップ以降は変更できず、プロジェクトを通して同じ ID になります。
  • なお、3 つ目の値として、一部の API が使用するプロジェクト番号があります。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
  1. 次に、Cloud のリソースや API を使用するために、Cloud コンソールで課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルの終了後に請求が発生しないようにリソースをシャットダウンするには、作成したリソースを削除するか、プロジェクト全体を削除します。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。

Cloud Shell の起動

Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では、Google Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。

Google Cloud Console で、右上のツールバーにある Cloud Shell アイコンをクリックします。

55efc1aaa7a4d3ad.png

プロビジョニングと環境への接続にはそれほど時間はかかりません。完了すると、次のように表示されます。

7ffe5cbb04455448.png

この仮想マシンには、必要な開発ツールがすべて用意されています。永続的なホーム ディレクトリが 5 GB 用意されており、Google Cloud で稼働します。そのため、ネットワークのパフォーマンスと認証機能が大幅に向上しています。この Codelab での作業はすべて、ブラウザ内から実行できます。インストールは不要です。

3. Google Cloud SDK のバージョン

このドキュメントの作成時点では、401.0.0 が最新の Google Cloud SDK バージョンです。このラボのすべてのコマンドは、最新バージョンの Google Cloud SDK を使用してテストされています。続行する前に、Cloud Shell で最新バージョンの SDK が使用されていることを確認してください。

SDK のバージョンを確認する

gcloud version コマンドを使用して SDK のバージョンを確認します。Cloud Shell で次のコマンドを実行します。

コマンド

gcloud version | grep "Google Cloud SDK"

出力例

Google Cloud SDK 401.0.0

次のステップ

  1. SDK バージョンが 401.0.0 以降の場合は、次のセクションに進みます。
  2. SDK のバージョンが 401.0.0 より低い場合は、次のコマンドを実行して SDK を更新します。

省略可能なコマンド

sudo apt-get update && sudo apt-get install google-cloud-sdk

4. 始める前に

上記で説明したアーキテクチャのデプロイを開始する前に、Cloud Shell が正しく構成され、必要な API がすべて有効になっていることを確認しましょう。

プロジェクト ID を設定する

Cloud Shell で、プロジェクト ID が設定されていることを確認します。Cloud Shell のプロンプトが次の出力のようになっている場合、プロジェクト ID を変更する予定がなければ、次のステップ(環境変数を設定する)に進むことができます。

USER@cloudshell:~ (PROJECT_ID)$

プロジェクト ID を変更する場合は、次のコマンドを使用します。Cloud Shell のプロンプトが (PROJECT_ID) から (YOUR-PROJECT-ID) に変わります。

省略可能なコマンド

gcloud config set project [YOUR-PROJECT-ID]

出力例

Updated property [core/project].
USER@cloudshell:~ (YOUR-PROJECT-ID)$

環境変数を設定する

環境変数を設定する

export コマンドを使用して環境変数を設定します。Cloud Shell で次のコマンドを実行します。

コマンド

export REGION_1=us-west1
export REGION_1_ZONE=us-west1-a
export REGION_2=us-east4
export REGION_2_ZONE=us-east4-a

確認

環境変数が設定されたので、echo コマンドを使用して確認します。各コマンドの出力は、上記の export コマンドを使用して構成した値になります。Cloud Shell で次のコマンドを実行します。

コマンド

echo $REGION_1
echo $REGION_1_ZONE
echo $REGION_2
echo $REGION_2_ZONE

必要なサービスをすべて有効にする

gcloud services enable コマンドを使用して、Compute API と DNS API を有効にします。Cloud Shell で次のコマンドを実行します。

Compute API を有効にする

コマンド

gcloud services enable compute.googleapis.com

DNS API を有効にする

コマンド

gcloud services enable dns.googleapis.com

確認

サービスが有効になったので、gcloud services list コマンドを使用して、有効になっているすべての API を一覧表示して確認しましょう。

コマンド

gcloud services list | grep -E 'compute|dns'

出力例

NAME: compute.googleapis.com
NAME: dns.googleapis.com

5. VPC ネットワーク、サブネット、ファイアウォール ルールを作成する

このセクションでは、VPC ネットワーク、2 つのサブネット(各リージョンに 1 つずつ)、必要なファイアウォール ルールを作成します。

VPC ネットワークを作成する

gcloud compute networks create コマンドを使用して VPC ネットワークを作成します。次のステップで独自のサブネットを作成するため、サブネット モードをカスタムに設定します。Cloud Shell で次のコマンドを実行します。

コマンド

gcloud compute networks create my-vpc --subnet-mode custom

サブネットを作成する

gcloud compute networks subnets create コマンドを使用して、REGION_1 と REGION_2 にそれぞれ 1 つずつ、2 つのサブネットを作成します。Cloud Shell で次のコマンドを実行します。

REGION_1 サブネット

コマンド

gcloud compute networks subnets create ${REGION_1}-subnet \
--network my-vpc \
--range 10.1.0.0/24 \
--region $REGION_1

REGION_2 サブネット

コマンド

gcloud compute networks subnets create ${REGION_2}-subnet \
--network my-vpc \
--range 10.2.0.0/24 \
--region $REGION_2

ファイアウォール ルールを作成する

VPC サブネットとロードバランサのヘルスチェック IP 範囲からのポート 80 のトラフィックを許可する必要があります。

また、クライアント VM で SSH トラフィックを許可するファイアウォール ルールも作成する必要があります。

gcloud compute firewall-rules create コマンドを使用して、ファイアウォール ルールを作成します。Cloud Shell で次のコマンドを実行します。

ポート 80 のトラフィックを許可する

コマンド

gcloud compute firewall-rules create allow-http-lb-hc \
--allow tcp:80 --network my-vpc \
--source-ranges 10.1.0.0/24,10.2.0.0/24,35.191.0.0/16,130.211.0.0/22 \
--target-tags=allow-http

クライアント VM で SSH トラフィックを許可する

コマンド

gcloud compute firewall-rules create allow-ssh \
--allow tcp:22 --network my-vpc \
--source-ranges 0.0.0.0/0 \
--target-tags=allow-ssh

6. Cloud NAT を作成する

プライベート VM がインターネットからパッケージをダウンロードしてインストールできるようにするには、両方のリージョンに Cloud NAT ゲートウェイが必要です。

  • ウェブサーバー VM は、Apache ウェブサーバーをダウンロードしてインストールする必要があります。
  • クライアント VM は、テストに使用する dnsutils パッケージをダウンロードしてインストールする必要があります。

各 Cloud NAT ゲートウェイは、1 つの VPC ネットワーク、リージョン、Cloud Router に関連付けられます。そのため、NAT ゲートウェイを作成する前に、各リージョンに Cloud Router を作成する必要があります。

クラウド ルーターを作成する

gcloud compute routers create コマンドを使用して、us-west1 リージョンと us-east4 リージョンに Cloud Router を作成します。Cloud Shell で次のコマンドを実行します。

Region_1 Cloud Router

コマンド

gcloud compute routers create "${REGION_1}-cloudrouter" \
--region $REGION_1 --network=my-vpc --asn=65501

Region_2 Cloud Router

コマンド

gcloud compute routers create "${REGION_2}-cloudrouter" \
--region $REGION_2 --network=my-vpc --asn=65501

NAT ゲートウェイを作成する

gcloud compute routers nat create コマンドを使用して、us-west1 リージョンと us-east4 リージョンに NAT ゲートウェイを作成します。Cloud Shell で次のコマンドを実行します。

Region_1 NAT ゲートウェイ

コマンド

gcloud compute routers nats create "${REGION_1}-nat-gw" \
--router="${REGION_1}-cloudrouter" \
--router-region=$REGION_1 \
--nat-all-subnet-ip-ranges --auto-allocate-nat-external-ips

Region_2 NAT ゲートウェイ

コマンド

gcloud compute routers nats create "${REGION_2}-nat-gw" \
--router="${REGION_2}-cloudrouter" \
--router-region=$REGION_2 \
--nat-all-subnet-ip-ranges --auto-allocate-nat-external-ips

7. Compute Engine VM を作成する

このセクションでは、ウェブサーバー、ウェブサーバー用の非マネージド インスタンス グループ、クライアント VM を作成します。

ウェブサーバー VM を作成する

gcloud compute instances create コマンドを使用してウェブサーバーを作成します。REGION_1 と REGION_2 にそれぞれ 1 つずつ、2 つのウェブサーバーを作成する必要があります。起動スクリプトを使用して、ウェブサーバーに Apache をインストールして構成します。

REGION_1 ウェブサーバー

Cloud Shell で次のコマンドを実行します。

コマンド

gcloud compute instances create "${REGION_1}-instance" \
--image-family=debian-11 --image-project=debian-cloud \
--zone=$REGION_1_ZONE \
--network-interface=network=my-vpc,subnet=${REGION_1}-subnet,no-address \
--tags=allow-http \
--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://169.254.169.254/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    systemctl restart apache2'

REGION_2 Web Server

Cloud Shell で次のコマンドを実行します。

コマンド

gcloud compute instances create "${REGION_2}-instance" \
--image-family=debian-11 --image-project=debian-cloud \
--zone=$REGION_2_ZONE \
--network-interface=network=my-vpc,subnet=${REGION_2}-subnet,no-address \
--tags=allow-http \
--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://169.254.169.254/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    systemctl restart apache2'

非マネージド インスタンス グループを作成する

このセクションでは、2 つの非マネージド インスタンス グループを作成します。次のセクションでは、これらのインスタンス グループを使用して ILB バックエンド サービスを構成します。インスタンス グループを作成したら、これらのインスタンス グループにウェブサーバー VM を追加します。

非マネージド インスタンス グループを作成する

gcloud compute instance-groups unmanaged create コマンドを使用して、us-west1 ウェブサーバー用と us-east4 ウェブサーバー用の 2 つの非マネージド インスタンス グループを作成します。

Region_1 インスタンス グループ

コマンド

gcloud compute instance-groups unmanaged create \
"${REGION_1}-instance-group" --zone=$REGION_1_ZONE

Region_2 インスタンス グループ

コマンド

gcloud compute instance-groups unmanaged create \
"${REGION_2}-instance-group" --zone=$REGION_2_ZONE

VM をインスタンス グループに追加する

gcloud compute instance-groups unmanaged add-instances コマンドを使用して、作成したインスタンス グループにインスタンスを追加します。REGION_1 ウェブサーバーを REGION_1 インスタンス グループに追加し、REGION_2 ウェブサーバーを REGION_2 インスタンス グループに追加する

Region_1 インスタンス グループ

コマンド

gcloud compute instance-groups unmanaged add-instances \
"${REGION_1}-instance-group" --instances $REGION_1-instance \
--zone=$REGION_1_ZONE

Region_2 インスタンス グループ

コマンド

gcloud compute instance-groups unmanaged add-instances \
"${REGION_2}-instance-group" --instances $REGION_2-instance \
--zone=$REGION_2_ZONE

クライアント VM を作成する

この VM を使用してテストを実行し、DNS 構成を検証します。起動スクリプトを使用して dnsutils パッケージをインストールします。Cloud Shell で次のコマンドを実行します。

コマンド

gcloud compute instances create client-instance --image-family=debian-11 \
--image-project=debian-cloud \
--zone=$REGION_1_ZONE \
--network-interface=network=my-vpc,subnet=${REGION_1}-subnet,no-address \
--tags=allow-ssh \
--metadata=startup-script='#! /bin/bash
    apt-get update
    apt-get install dnsutils -y'

8. L4 内部ロードバランサを作成する

L4 ILB を作成するには、ヘルスチェック、バックエンド サービス、転送ルールを作成する必要があります。

ヘルスチェックを作成

gcloud compute health-checks create コマンドを使用して、ヘルスチェックを作成します。基本的な HTTP ヘルスチェックを作成し、ターゲット ポートをポート 80 に設定します。Cloud Shell で次のコマンドを実行します。

コマンド

gcloud compute health-checks create http http-hc --port 80

バックエンド サービスを構成する

gcloud compute backend-services create コマンドを使用してバックエンド サービスを作成します。バックエンド サービスを作成したら、gcloud compute backend-services add-backend コマンドを使用して、非マネージド インスタンス グループをバックエンド サービスに追加します。Cloud Shell で次のコマンドを実行します。

バックエンド サービスを作成する

コマンド

gcloud compute backend-services create $REGION_1-backend-service \
--load-balancing-scheme=INTERNAL --protocol=TCP \
--health-checks=http-hc --region=$REGION_1
gcloud compute backend-services create $REGION_2-backend-service \
--load-balancing-scheme=INTERNAL --protocol=TCP \
--health-checks=http-hc --region=$REGION_2

バックエンドを追加

コマンド

gcloud compute backend-services add-backend $REGION_1-backend-service \
--instance-group=$REGION_1-instance-group \
--region=$REGION_1 \
--instance-group-zone=$REGION_1_ZONE
gcloud compute backend-services add-backend $REGION_2-backend-service \
--instance-group=$REGION_2-instance-group \
--region=$REGION_2 \
--instance-group-zone=$REGION_2_ZONE

転送ルールを作成する

gcloud compute forwarding-rules create コマンドを使用して、両方のリージョンに転送ルールを作成します。Cloud Shell で次のコマンドを実行します。

REGION_1 転送ルール

コマンド

gcloud compute forwarding-rules create $REGION_1-ilb \
    --region=$REGION_1 \
    --load-balancing-scheme=internal \
    --network=my-vpc \
    --subnet=$REGION_1-subnet \
    --ip-protocol=TCP \
    --ports=80 \
    --backend-service=$REGION_1-backend-service \
    --backend-service-region=$REGION_1 \
    --allow-global-access

REGION_2 転送ルール

gcloud compute forwarding-rules create $REGION_2-ilb \
    --region=$REGION_2 \
    --load-balancing-scheme=internal \
    --network=my-vpc \
    --subnet=$REGION_2-subnet \
    --ip-protocol=TCP \
    --ports=80 \
    --backend-service=$REGION_2-backend-service \
    --backend-service-region=$REGION_2 \
    --allow-global-access

9. DNS を構成する

このセクションでは、限定公開ゾーンとフェイルオーバー ルーティング ポリシーを含む DNS レコードセットを作成します。

限定公開 DNS ゾーンを作成する

gcloud dns managed-zones create コマンドを使用して、example.com の限定公開ゾーンを作成します。このゾーンを使用して、フェイルオーバー ルーティング ポリシーを含むリソース レコードセットを作成します。Cloud Shell で次のコマンドを実行します。

コマンド

gcloud dns managed-zones create example-com \
--dns-name example.com. --description="My private zone" \
--visibility=private --networks my-vpc 

フェイルオーバー ルーティング ポリシーを使用して DNS レコードを作成する

gcloud dns record-sets create コマンドを使用して、フェイルオーバー ルーティング ポリシーを含む DNS レコードを作成します。プライマリ ターゲットは REGION_1 のロードバランサです。Cloud DNS は地域ベースのバックアップ ターゲットのみをサポートします。バックアップ セットは、REGION_1 と REGION_2 の両方のターゲットとして REGION_2 ロードバランサを使用する位置情報ポリシーです。Cloud Shell で次のコマンドを実行します。

コマンド

gcloud dns record-sets create failover.example.com --ttl 5 --type A \
--routing-policy-type=FAILOVER \
--routing-policy-primary-data=$REGION_1-ilb \
--routing-policy-backup-data="${REGION_1}=${REGION_2}-ilb;${REGION_2}=${REGION_2}-ilb" \
--routing-policy-backup-data-type=GEO \
--zone=example-com \
--enable-health-checking

出力例

NAME: failover.example.com.
TYPE: A
TTL: 5
DATA: Primary: "10.1.0.4, 80, tcp, https://www.googleapis.com/compute/v1/projects/my-clouddns-codelab/global/networks/my-vpc, my-clouddns-codelab, us-west1, regionalL4ilb" Backup: us-west1: "10.2.0.3, 80, tcp, https://www.googleapis.com/compute/v1/projects/my-clouddns-codelab/global/networks/my-vpc, my-clouddns-codelab, us-east4, regionalL4ilb";us-east4: "10.2.0.3, 80, tcp, https://www.googleapis.com/compute/v1/projects/my-clouddns-codelab/global/networks/my-vpc, my-clouddns-codelab, us-east4, regionalL4ilb"

10. DNS 解決をテストする

フェイルオーバー設定をテストする前に、両方の内部ロードバランサの IP アドレスをメモしておきましょう。Cloud Shell で次のコマンドを実行します。

コマンド

gcloud compute forwarding-rules list --filter="name:($REGION_1-ilb $REGION_2-ilb)"

出力例

この例では、us-west1-ilb の IP アドレスは 10.1.0.4us-east4-ilb の IP アドレスは 10.2.0.3 です。

NAME: us-west1-ilb
REGION: us-west1
IP_ADDRESS: 10.1.0.4
IP_PROTOCOL: TCP
TARGET: us-west1/backendServices/us-west1-backend-service

NAME: us-east4-ilb
REGION: us-east4
IP_ADDRESS: 10.2.0.3
IP_PROTOCOL: TCP
TARGET: us-east4/backendServices/us-east4-backend-service

次に、クライアント インスタンスにログインして、DNS 解決をテストします。ウェブ コンソールで、[Compute Engine | VM インスタンス] に移動します。

5c824940bf414501.png

[SSH] ボタンをクリックして、コンソールから client-instance にログインします。

b916eb32c60a4156.png

クライアント VM にログインしたら、dig コマンドを使用して failover.example.com ドメイン名を解決します。

次のループは、このコマンドを 10 回実行するように構成されています。6 秒のスリープ タイマーが設定されています。

コマンド

for i in {1..10}; do echo $i; dig failover.example.com +short; sleep 6; done

6 秒のスリープ タイマーが追加されているのは、DNS レコードの TTL が 5 秒に設定されているからです。これにより、各 DNS リクエストの DNS レスポンスがキャッシュから返されることはなくなります。このコマンドの実行には 1 分ほどかかります。

出力には、リソース レコードのプライマリ セットにロードバランサの IP アドレスが表示されます。この設定では、us-west1 リージョンのロードバランサの IP アドレスになります。

11. フェイルオーバーをテストする

REGION_1 VM からネットワーク タグを削除して、フェイルオーバーをシミュレートします。これにより、ポート 80 へのアクセスがブロックされ、ヘルスチェックが失敗し始めます。

ネットワーク タグを削除する

gcloud compute instances remove-tags コマンドを使用して、VM からネットワーク タグを削除します。Cloud Shell で次のコマンドを実行します。

コマンド

gcloud compute instances remove-tags $REGION_1-instance \
--zone=$REGION_1_ZONE --tags=allow-http

ヘルスチェックは 10 秒後に失敗します。DNS 解決テストをもう一度実行します。

DNS 解決

クライアント インスタンスから次のコマンドを実行します。

コマンド

for i in {1..10}; do echo $i; dig failover.example.com +short; sleep 6; done

出力には、リソース レコードのバックアップ セットにロードバランサの IP アドレスが表示されます。この設定では、これは us-east4 リージョンのロードバランサの IP になります。

12. トラフィックのテスト トリックリング

デフォルトでは、フェイルオーバー ポリシーはすべての DNS リクエストに対してプライマリ エンドポイント IP を返し、プライマリがヘルスチェックに失敗した場合にのみバックアップ IP を返します。Cloud DNS では、ユーザーがトリクル比率を構成できます。これにより、プライマリ ターゲットが正常な場合でも、Cloud DNS はトラフィックの一部をバックアップ ターゲットに送信できます。比率は 01 の範囲の値にする必要があります。デフォルト値は 0 です。

これをテストするには、REGION_1 ウェブサーバーにネットワーク タグを追加します。

ネットワーク タグを追加

タグをウェブサーバー VM に追加して、プライマリ リージョン VM への HTTP トラフィックを許可します。Cloud Shell で次のコマンドを実行します。

コマンド

gcloud compute instances add-tags $REGION_1-instance \
--zone $REGION_1_ZONE --tags allow-http

ヘルスチェックは 10 秒で合格します。

DNS 解決がプライマリ ロードバランサを指していることを確認します。この設定では、us-west1 リージョンのロードバランサの IP アドレスになります。

クライアント インスタンスから次のコマンドを実行します。

コマンド

dig +short failover.example.com

DNS レコードを更新する

次に、failover.example.com の DNS レコードを変更して、プライマリが正常な場合でもトラフィックの 30% をバックアップ セットに転送します。Cloud Shell で次のコマンドを実行します。

コマンド

gcloud dns record-sets update failover.example.com --ttl 30 --type A \
--routing-policy-type=FAILOVER \
--routing-policy-primary-data=$REGION_1-ilb \
--routing-policy-backup-data="${REGION_1}=${REGION_2}-ilb;${REGION_2}=${REGION_2}-ilb" \
--routing-policy-backup-data-type=GEO \
--zone=example-com --enable-health-checking \
--backup-data-trickle-ratio=0.3

DNS 解決

クライアント VM から次のコマンドを実行します。DNS レコード failover.example.com は、約 70% の確率でプライマリ ロードバランサの IP アドレスに解決され、約 30% の確率でバックアップ ロードバランサの IP アドレスに解決されます。

for i in {1..10}; do echo $i; dig failover.example.com +short; sleep 6; done

13. クリーンアップ手順

このラボで使用したリソースをクリーンアップするには、Cloud Shell から次のコマンドを実行します。

gcloud dns record-sets delete failover.example.com --type=A \
--zone=example-com --quiet

gcloud dns managed-zones delete example-com --quiet

gcloud compute forwarding-rules delete $REGION_1-ilb \
--region=$REGION_1 --quiet

gcloud compute forwarding-rules delete $REGION_2-ilb \
--region=$REGION_2 --quiet

gcloud compute backend-services delete $REGION_1-backend-service \
--region=$REGION_1 --quiet

gcloud compute backend-services delete $REGION_2-backend-service \
--region=$REGION_2 --quiet

gcloud compute health-checks delete http-hc --quiet

gcloud compute instances delete client-instance --zone=$REGION_1_ZONE --quiet

gcloud compute instance-groups unmanaged delete $REGION_1-instance-group \
--zone=$REGION_1_ZONE --quiet

gcloud compute instance-groups unmanaged delete $REGION_2-instance-group \
--zone=$REGION_2_ZONE --quiet

gcloud compute instances delete $REGION_1-instance \
--zone=$REGION_1_ZONE --quiet

gcloud compute instances delete $REGION_2-instance \
--zone=$REGION_2_ZONE --quiet

gcloud compute routers nats delete $REGION_1-nat-gw \
--router=$REGION_1-cloudrouter --region=$REGION_1 --quiet

gcloud compute routers nats delete $REGION_2-nat-gw \
--router=$REGION_2-cloudrouter --region=$REGION_2 --quiet

gcloud compute routers delete $REGION_1-cloudrouter \
--region=$REGION_1 --quiet

gcloud compute routers delete $REGION_2-cloudrouter \
--region=$REGION_2 --quiet

gcloud compute firewall-rules delete allow-ssh allow-http-lb-hc --quiet

gcloud compute networks subnets delete $REGION_1-subnet \
--region=$REGION_1 --quiet

gcloud compute networks subnets delete $REGION_2-subnet \
--region=$REGION_2 --quiet

gcloud compute networks delete my-vpc --quiet

14. 完了

お疲れさまでした。これで、Cloud DNS フェイルオーバー ルーティング ポリシーのデプロイとテストが完了しました。

学習した内容

  • Cloud DNS フェイルオーバー ルーティング ポリシーを構成する方法
  • DNS フェイルオーバーをテストする
  • バックアップ セットにトラフィックを少しずつ転送する方法

次のステップ

  • アクティブ セットとバックアップ セットに複数の IP を設定してみる
  • 非マネージド インスタンス グループに複数のバックエンド VM を追加してみる
  • バックアップ セットの位置情報ポリシー用に、異なるリージョンに複数のロードバランサを設定してみてください。

その他の情報

https://cloud.google.com/dns/docs/zones/manage-routing-policies