Kubernetes で高可用性を管理する

このページでは、Kubernetes ベースの AlloyDB Omni データベース クラスタで高可用性(HA)を有効にしてテストする方法について説明します。ここで説明するタスクを実行するには、Kubernetes マニフェスト ファイルの適用と kubectl コマンドライン ツールの使用に関する基本的な知識が必要です。

概要

データベース クラスタで HA を有効にするには、AlloyDB Omni Kubernetes オペレーターにプライマリ データベース インスタンスのスタンバイ レプリカの作成を指示します。AlloyDB Omni Operator は、このレプリカのデータを継続的に更新し、プライマリ インスタンスのデータのすべての変更と一致するようにデータベース クラスタを構成します。

HA の有効化

データベース クラスタで HA を有効にする前に、Kubernetes クラスタに次のものがあることを確認します。

  • データの完全なコピーを 2 つ保存するストレージ
  • 並列で実行される 2 つのデータベース インスタンスのコンピューティング リソース

HA を有効にする手順は次のとおりです。

  1. データベース クラスタのマニフェストを変更して、spec セクションの下に availability セクションを追加します。このセクションでは、numberOfStandbys パラメータを設定して追加するスタンバイの数を定義します。

    spec:
      availability:
        numberOfStandbys: NUMBER_OF_STANDBYS
    

    NUMBER_OF_STANDBYS は、追加するスタンバイの数に置き換えます。最大値は 5 です。HA を設定して、必要なスタンバイの数がわからない場合は、まず値を 1 または 2 に設定します。

  2. マニフェストを再度適用します。

HA を無効にする

HA を無効にする手順は次のとおりです。

  1. クラスタのマニフェストで numberOfStandbys0 に設定します。

    spec:
      availability:
        numberOfStandbys: 0
    
  2. マニフェストを再度適用します。

データベース クラスタで HA を確認する

データベース クラスタの現在の HA ステータスを確認するには、そのクラスタのステータスの HAReady 状態を確認します。この値の statusTrue に設定されている場合、HA が設定され、データベース クラスタで動作しています。

この値をコマンドラインで確認するには、次のコマンドを実行します。

kubectl get dbcluster.alloydbomni.dbadmin.goog DB_CLUSTER_NAME -o jsonpath={.status.conditions[?(@.type == \'HAReady\')]} -n NAMESPACE

次のように置き換えます。

  • DB_CLUSTER_NAME: データベース クラスタの名前。

  • NAMESPACE: データベース クラスタの Namespace。

スタンバイ インスタンスにフェイルオーバーする

プライマリ インスタンスが 90 秒以上使用できなくなった場合、AlloyDB Omni オペレーターはプライマリ データベース インスタンスからスタンバイ インスタンスに自動的にフェイルオーバーします。

フェイルオーバーは、予期しない障害から迅速に復旧し、ダウンタイムを最小限に抑える場合に適しています。バックアップが完全に更新される前にプライマリ データベースが使用できなくなった場合、少量のデータが失われる可能性があります。

AlloyDB Omni オペレーターは、自動フェイルオーバーと手動フェイルオーバーの両方をサポートしています。自動フェイルオーバーはデフォルトで有効になっています。

フェイルオーバーでは、次の一連のイベントが発生します。

  1. AlloyDB Omni オペレーターは、プライマリ データベース インスタンスをオフラインにします。

  2. AlloyDB Omni オペレーターは、スタンバイ レプリカを新しいプライマリ データベース インスタンスに昇格させます。

  3. AlloyDB Omni オペレーターは、以前のプライマリ データベース インスタンスを削除します。

  4. AlloyDB Omni Operator が新しいスタンバイ レプリカを作成します。

自動フェイルオーバーを無効にする

自動フェイルオーバーは、データベース クラスタでデフォルトで有効になっています。

フェイルオーバーを無効にする手順は次のとおりです。

  1. クラスタのマニフェストで enableAutoFailoverfalse に設定します。

    spec:
      availability:
        enableAutoFailover: false
    
  2. マニフェストを再度適用します。

手動フェイルオーバーをトリガーする

手動フェイルオーバーをトリガーするには、新しいフェイルオーバー リソースのマニフェストを作成して適用します。

apiVersion: alloydbomni.dbadmin.goog/v1
kind: Failover
metadata:
  name: FAILOVER_NAME
  namespace: NAMESPACE
spec:
  dbclusterRef: DB_CLUSTER_NAME

次のように置き換えます。

  • FAILOVER_NAME: このリソースの名前(例: failover-1)。

  • NAMESPACE: このフェイルオーバー リソースの名前空間。適用先のデータベース クラスタの名前空間と一致する必要があります。

  • DB_CLUSTER_NAME: フェイルオーバーするデータベース クラスタの名前。

フェイルオーバーをモニタリングするには、次のコマンドを実行します。

kubectl get failover FAILOVER_NAME -o jsonpath={.status.state} -n NAMESPACE

次のように置き換えます。

  • FAILOVER_NAME: 作成時にフェイルオーバー リソースに割り当てた名前。

  • NAMESPACE: データベース クラスタの Namespace。

新しいプライマリ データベース インスタンスの使用準備が整うと、コマンドは Success を返します。新しいスタンバイ インスタンスのステータスをモニタリングするには、次のセクションをご覧ください。

スタンバイ インスタンスへのスイッチオーバー

スイッチオーバーは、障害復旧の設定をテストする場合や、プライマリ データベースとスタンバイ レプリカのロール切り替えが必要なその他の計画されたアクティビティを行う場合に実行されます。

スイッチオーバーが完了すると、プライマリ データベース インスタンスとスタンバイ レプリカのロールが、レプリケーションの方向とともに逆転します。データ損失なしで障害復旧設定をテストするプロセスをより細かく制御する場合は、切り替えを選択する必要があります。

AlloyDB Omni オペレーターは手動スイッチオーバーをサポートしています。

スイッチオーバーでは、次の一連のイベントが発生します。

  1. AlloyDB Omni オペレーターは、プライマリ データベース インスタンスをオフラインにします。

  2. AlloyDB Omni オペレーターは、スタンバイ レプリカを新しいプライマリ データベース インスタンスに昇格させます。

  3. AlloyDB Omni オペレーターは、以前のプライマリ データベース インスタンスをスタンバイ レプリカに切り替えます。

切り替えを行う

切り替えを行う前に、次のことを確認します。

スイッチオーバーを実行するには、新しいスイッチオーバー リソースのマニフェストを作成して適用します。

apiVersion: alloydbomni.dbadmin.goog/v1
kind: Switchover
metadata:
    name: SWITCHOVER_NAME
spec:
     dbclusterRef: DB_CLUSTER_NAME
     NewPrimary: STANBDY_REPLICA_NAME

次のように置き換えます。

  • SWITCHOVER_NAME: このスイッチオーバー リソースの名前(例: switchover-1)。

  • DB_CLUSTER_NAME: スイッチオーバー オペレーションが適用されるプライマリ データベース インスタンスの名前。

  • STANBDY_REPLICA_NAME: 新しいプライマリとして昇格するデータベース インスタンスの名前。

    スタンバイ レプリカ名を特定するには、次のコマンドを実行します。 posix-terminal kubectl get instances.alloydbomni.internal.dbadmin.goog

スタンバイ レプリカを読み取り専用インスタンスとして使用する

スタンバイ レプリカを読み取り専用インスタンスとして使用するには、次の操作を行います。

  1. データベース クラスタのマニフェストを変更して、enableStandbyAsReadReplica パラメータを true に設定します。

    spec:
      availability:
        enableStandbyAsReadReplica: true
    
  2. マニフェストを再度適用します。

  3. 読み取り専用エンドポイントが DBCluster オブジェクトの status フィールドに報告されていることを確認します。

    kubectl describe dbcluster -n NAMESPACE DB_CLUSTER_NAME

    次のレスポンス例は、読み取り専用インスタンスのエンドポイントを示しています。

      Status:
      [...]
      Primary: 
        [...]
        Endpoints:
          Name: Read-Write
          Value: 10.128.0.81:5432
          Name: Read-Only
          Value: 10.128.0.82:5432