Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3
このページでは、復元性に優れた環境でデータベースとクラスタのフェイルオーバー テストを実行する方法について説明します。
環境のフェイルオーバー テストでは、データセンター内のゾーンの完全な停止をシミュレートします。このようなシナリオでは、クラスタのゾーン停止とデータベースのゾーン停止が同時に発生する可能性があります。2 つのフェイルオーバー テストを実行することで、復元性に優れた環境でフェイルオーバーがどのように実行されるかをモニタリングし、DAG とタスクへの影響をチェックできます。
始める前に
フェイルオーバー テストを実行するには、アカウントに次のロールと権限が必要です。
composer.environments.update
権限。この権限を持つロールの一覧については、IAM によるアクセス制御をご覧ください。環境のクラスタで
kubectl
コマンドを実行するための Kubernetes Engine Cluster 管理者(roles/container.clusterAdmin
)ロール。別の方法としては、GKE で Kubernetes RBAC ロールを直接プロビジョニングすることもできます。
承認済みネットワークを使用している場合は、GKE クラスタのコントロール プレーン エンドポイントにアクセスできるマシンから
kubectl
コマンドを実行する必要があります。環境のコントロール プレーン エンドポイントへのアクセスを設定する方法に応じて、いくつかのオプションを使用できます。詳細については、プライベート IP 環境でのコマンドの実行をご覧ください。
環境が正常であることを確認する
データベースと環境のクラスタ フェイルオーバー テストは、正常な環境でのみ実行してください。
環境が正常であることを確認するには:
Google Cloud コンソールで [環境] ページに移動します。
環境のリストで、ご利用の環境の名前をクリックします。[環境の詳細] ページが開きます。
[Monitoring] タブに移動します。
すべての健全性指標が緑色であることを確認します。
データベース フェイルオーバー テストを実行する
Google Cloud CLI コマンドでトリガーすることで、ゾーンの停止をシミュレートするデータベース フェイルオーバー テストを実行できます。たとえば、環境のデータベースが別のゾーンに切り替わるまでの時間を測定できます。
ご使用の環境でデータベース フェイルオーバー テストを実行するには:
環境が正常であることを確認します。
環境のデータベースのプライマリ ゾーンを取得します。
gcloud composer environments fetch-database-properties \ ENVIRONMENT_NAME \ --location LOCATION
以下を置き換えます。
ENVIRONMENT_NAME
: Cloud Composer 環境の名前。LOCATION
: 環境が配置されているリージョン。
例:
gcloud composer environments fetch-database-properties \ example-environment \ --location us-central1
データベース フェイルオーバー テストを開始します。
gcloud composer environments database-failover \ ENVIRONMENT_NAME \ --location LOCATION
以下を置き換えます。
ENVIRONMENT_NAME
: Cloud Composer 環境の名前。LOCATION
: 環境が配置されているリージョン。
例:
gcloud composer environments database-failover \ example-environment \ --location us-central1
データベース フェイルオーバー テストが完了するまで待ちます。この処理には最長で 3 分ほどかかる場合があります。
環境のデータベースのプライマリ ゾーンが変更されていることを確認します。
gcloud composer environments fetch-database-properties \ ENVIRONMENT_NAME \ --location LOCATION
環境の健全性指標を調べて、環境が正常であることを確認します。
フェイルオーバーに使用できるデータベース(
composer.googleapis.com/environment/database/available_for_failover
)環境指標がTrue
になると、環境のデータベースが別のフェイルオーバーに対する準備が整います。Cloud Monitoring で環境の指標を表示する方法の詳細については、環境をモニタリングするをご覧ください。
環境のクラスタ フェイルオーバー テストを実行する
環境のクラスタのフェイルオーバー テストを実行して、ゾーンの停止をシミュレートできます。たとえば、環境が別のゾーンに切り替わるまでの時間を測定できます。
環境が正常であることを確認する
テストを開始する前に、環境が正常であることを確認します。
環境のクラスタの認証情報を構成する
クラスタの認証情報を取得するには:
Google Cloud コンソールで [環境] ページに移動します。
環境のリストで、ご利用の環境の名前をクリックします。[環境の詳細] ページが開きます。
[環境の設定] タブに移動します。
[クラスタの詳細を表示] をクリックします。
[接続] をクリックします。
表示された Google Cloud CLI コマンドをコピーして実行します。
例:
gcloud container clusters get-credentials \ us-central1-exam-db23ee12-gke \ --region us-central1 \ --project example-project
環境のクラスタを検査する
環境のクラスタでワークロードが実行されているゾーンとノードを確認します。 この情報は、後でゾーンの停止をシミュレートするために使用します。フェイルオーバー テストの実行中にこれらのコマンドを再度実行して、環境のクラスタがフェイルオーバーをどのように実行するかを確認することもできます。
ノードとゾーンを確認します。
kubectl get nodes \ -o=custom-columns=NAME:.metadata.name,NODE:.metadata.labels.topology\\.gke\\.io/zone
Pod を確認します。
kubectl get pods --all-namespaces \ -o=custom-columns=NAME:.metadata.name,STATUS:.status.phase,NODE:.spec.nodeName \ --field-selector metadata.namespace!=kube-system
Pod の詳細情報を表示します。
kubectl get pods --all-namespaces -o wide \ --field-selector metadata.namespace!=kube-system
ノードをドレインする
停止をシミュレートするゾーンを選択します。データベース フェイルオーバー テストとともにクラスタのフェイルオーバー テストを行う場合は、環境の高可用性 Cloud SQL インスタンスのプライマリ ゾーンを選択することをおすすめします。たとえば、プライマリ Cloud SQL インスタンスが us-central1-a
で実行されている場合、最初にデータベース フェイルオーバー テスト、次に us-central1-a
でのクラスタのフェイルオーバー テストを行い、us-central1-a
ゾーン全体が停止した場合のシミュレーションを行うことができます。
次のコマンドは、特定のゾーンでノードのセットが使用できなくなることをシミュレートします。指定したゾーン内のノードから Pod が強制排除され、それらのノード上の Pod の再スケジューリングが防止されます。新しい Pod をスケジュールできないため、新しいノードがクラスタに追加されます。
このコマンドは、composer-system
Namespace で実行されるワークロードには影響しません。コマンド出力に関連するエラー メッセージが表示される場合があります。これはフェイルオーバー テストには影響しません。選択したゾーンに存在するノードは、引き続きスケジュール不可としてマークされます。
選択したゾーンのクラスタゾーンの障害をシミュレートするには:
kubectl get nodes -o name -l "topology.gke.io/zone=ZONE" | \
xargs kubectl drain \
--ignore-daemonsets --delete-emptydir-data --force --disable-eviction
以下を置き換えます。
ZONE
: クラスタのゾーン障害をシミュレートするゾーン。
環境の指標を確認する
Google Cloud コンソールで [環境] ページに移動します。
環境のリストで、ご利用の環境の名前をクリックします。[環境の詳細] ページが開きます。
[Monitoring] タブに移動します。
次の指標が、フェイルオーバー オペレーション中に「緑色」であるか、最大で数分間「赤色」のステータスのままであることを確認します。
- 環境のヘルス
- スケジューラのハートビート
- ウェブサーバーのヘルス
- データベースのヘルス
- アクティブ ワーカー数
- アクティブなスケジューラ
- アクティブなウェブサーバー
- アクティブなトリガー
シミュレートされた停止は「クラスタのメンテナンス オペレーション」としてマークされます。
テスト後に環境のクラスタを Failover readiness に戻すには、追加のアクションを行う必要はありません。テスト中、環境のクラスタは、シミュレートされた停止の影響を受けたノードを置き換える新しいノードを自動的に追加します。