復元性に優れた環境のフェイルオーバー テストを実行する

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

このページでは、復元力の高い環境でデータベースとクラスタのフェイルオーバー テストを実行する方法について説明します。

環境のフェイルオーバー テストでは、データセンター内のゾーンの完全な停止をシミュレートします。このようなシナリオでは、クラスタのゾーン停止とデータベースのゾーン停止が同時に発生する可能性があります。2 つのフェイルオーバー テストを実行することで、復元力の高い環境でフェイルオーバーがどのように実行されるかをモニタリングし、DAG とタスクへの影響をチェックできます。

始める前に

  • フェイルオーバー テストを実行するには、アカウントに次のロールと権限が必要です。

    • composer.environments.update 権限。この権限を持つロールの一覧については、IAM を使用したアクセス制御をご覧ください。

    • 環境のクラスタで kubectl コマンドを実行するための Kubernetes Engine クラスタ管理者roles/container.clusterAdmin)ロール。別の方法としては、GKE で Kubernetes RBAC ロールを直接プロビジョニングすることもできます。

  • 承認済みネットワークを使用している場合は、GKE クラスタのコントロール プレーン エンドポイントにアクセスできるマシンから kubectl コマンドを実行する必要があります。環境のコントロール プレーン エンドポイントへのアクセスを設定する方法に応じて、いくつかのオプションを使用できます。詳細については、プライベート IP 環境でのコマンドの実行をご覧ください。

環境が正常であることを確認する

データベースと環境のクラスタ フェイルオーバー テストは、正常な環境でのみ実行してください。

環境が正常であることを確認するには:

  1. Google Cloud コンソールで [環境] ページに移動します。

    [環境] に移動

  2. 環境のリストで、ご利用の環境の名前をクリックします。[環境の詳細] ページが開きます。

  3. [Monitoring] タブに移動します。

  4. すべての健全性指標が緑色であることを確認します。

データベース フェイルオーバー テストを実行する

Google Cloud CLI コマンドでトリガーすることで、ゾーンの停止をシミュレートするデータベース フェイルオーバー テストを実行できます。たとえば、環境のデータベースが別のゾーンに切り替わるまでの時間を測定できます。

ご使用の環境でデータベース フェイルオーバー テストを実行するには:

  1. 環境が正常であることを確認します。

  2. 環境のデータベースのプライマリ ゾーンを取得します。

    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
    
  3. データベース フェイルオーバー テストを開始します。

    gcloud composer environments database-failover \
        ENVIRONMENT_NAME \
        --location LOCATION
    

    以下を置き換えます。

    • ENVIRONMENT_NAME: Cloud Composer 環境の名前。
    • LOCATION: 環境が配置されているリージョン。

    例:

    gcloud composer environments database-failover \
        example-environment \
        --location us-central1
    
  4. データベース フェイルオーバー テストが完了するまで待ちます。この処理には最長で 3 分ほどかかる場合があります。

  5. 環境のデータベースのプライマリ ゾーンが変更されていることを確認します。

    gcloud composer environments fetch-database-properties \
        ENVIRONMENT_NAME \
        --location LOCATION
    
  6. 環境の健全性指標を調べて、環境が正常であることを確認します。

  7. フェイルオーバーに使用できるデータベースcomposer.googleapis.com/environment/database/available_for_failover)環境指標が True になると、環境のデータベースが別のフェイルオーバーに対する準備が整います。Cloud Monitoring で環境の指標を表示する方法の詳細については、環境をモニタリングするをご覧ください。

環境のクラスタ フェイルオーバー テストを実行する

環境のクラスタのフェイルオーバー テストを実行して、ゾーンの停止をシミュレートできます。たとえば、環境が別のゾーンに切り替わるまでの時間を測定できます。

環境が正常であることを確認する

テストを開始する前に、環境が正常であることを確認します。

環境のクラスタの認証情報を構成する

クラスタの認証情報を取得するには:

  1. Google Cloud コンソールで [環境] ページに移動します。

    [環境] に移動

  2. 環境のリストで、ご利用の環境の名前をクリックします。[環境の詳細] ページが開きます。

  3. [環境の設定] タブに移動します。

  4. [クラスタの詳細を表示] をクリックします。

  5. [接続] をクリックします。

  6. 表示された Google Cloud CLI コマンドをコピーして実行します。

    次に例を示します。

    gcloud container clusters get-credentials \
      us-central1-exam-db23ee12-gke \
      --region us-central1 \
      --project example-project
    

環境のクラスタを検査する

環境のクラスタでワークロードが実行されているゾーンとノードを確認します。この情報は、後でゾーンの停止をシミュレートするために使用します。フェイルオーバー テストの実行中にこれらのコマンドを再度実行して、環境のクラスタがフェイルオーバーをどのように実行するかを確認することもできます。

  1. ノードとゾーンを確認します。

    kubectl get nodes \
      -o=custom-columns=NAME:.metadata.name,NODE:.metadata.labels.topology\\.gke\\.io/zone
    
  2. Pod を確認します。

    kubectl get pods --all-namespaces \
    -o=custom-columns=NAME:.metadata.name,STATUS:.status.phase,NODE:.spec.nodeName \
    --field-selector metadata.namespace!=kube-system
    
  3. 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: クラスタのゾーン障害をシミュレートするゾーン。

環境の指標を確認する

シミュレートされたゾーン停止中の環境指標
図 1 シミュレートされたゾーン停止中の環境指標(クリックして拡大)
  1. Google Cloud コンソールで [環境] ページに移動します。

    [環境] に移動

  2. 環境のリストで、ご利用の環境の名前をクリックします。[環境の詳細] ページが開きます。

  3. [Monitoring] タブに移動します。

  4. 次の指標が、フェイルオーバー オペレーション中に「緑色」であるか、最大で数分間「赤色」のステータスのままであることを確認します。

    • 環境のヘルス
    • スケジューラのハートビート
    • ウェブサーバーのヘルス
    • データベースのヘルス
    • アクティブ ワーカー数
    • アクティブなスケジューラ
    • アクティブなウェブサーバー
    • アクティブなトリガー

    シミュレートされた停止は「クラスタのメンテナンス オペレーション」としてマークされます。

  5. テスト後に環境のクラスタを Failover readiness に戻すには、追加のアクションを行う必要はありません。テスト中、環境のクラスタは、シミュレートされた停止の影響を受けたノードを置き換える新しいノードを自動的に追加します。

次のステップ