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 を生成できます。または、ご自身でお試しになることもできます。このステップを終えた後は変更できず、プロジェクト期間中は維持されます。
  • なお、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 の 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 で次のコマンドを実行します。

リージョン 1 の Cloud Router

コマンド

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

リージョン 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 コマンドを使用してウェブサーバーを作成します。2 つのウェブサーバーを作成する必要があります。1 つは REGION_1 に、もう 1 つは REGION_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 ウェブサーバー

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 コマンドを使用して、2 つの非マネージド インスタンス グループを作成します。1 つは us-west1 ウェブサーバー用、もう 1 つは us-east4 ウェブサーバー用です。

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.4 で、us-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] ボタンをクリックして、コンソールからクライアント インスタンスにログインします。

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 レコードを更新する

次に、プライマリが正常な場合でもトラフィックの 30% がバックアップ セットにトリクリングされるように、failover.example.com の DNS レコードを変更します。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 がプライマリ ロードバランサの IP 約に解決されることがわかります。バックアップ ロードバランサの IP アドレスに約 70% の30% の割合です

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

13. クリーンアップ手順

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

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