kubectl コマンドライン ツールの使用に関する基本的な知識があることを前提に作成されています。
概要
データベース クラスタで HA を有効にするには、プライマリ データベース インスタンスのスタンバイ レプリカを作成するように AlloyDB Omni Kubernetes オペレーターを構成します。AlloyDB Omni オペレーターは、このレプリカのデータを継続的に更新するようにデータベース クラスタを構成し、プライマリ インスタンスのすべてのデータ変更と照合します。
HA を有効にする
データベース クラスタで HA を有効にする前に、Kubernetes クラスタに次のものがあることを確認します。
- データの完全なコピーを 2 つ保存するストレージ 
- 2 つのデータベース インスタンスを並列で実行するためのコンピューティング リソース 
HA を有効にする手順は次のとおりです。
- データベース クラスタのマニフェストを変更して、 - specセクションの下に- availabilityセクションを追加します。このセクションでは、- numberOfStandbysパラメータを使用して、追加するスタンバイの数を指定します。- spec: availability: numberOfStandbys: NUMBER_OF_STANDBYS- NUMBER_OF_STANDBYSは、追加するスタンバイの数に置き換えます。最大値は- 5です。必要なスタンバイの数がわからない場合は、まず値を- 1または- 2に設定します。
- マニフェストを再度適用します。 
HA を無効にする
HA を無効にする手順は次のとおりです。
- クラスタのマニフェストで - numberOfStandbysを- 0に設定します。- spec: availability: numberOfStandbys: 0
- マニフェストを再度適用します。 
データベース クラスタの HA を確認する
データベース クラスタの HA のステータスを確認するには、HAReady ステータスを確認します。HAReady のステータスが True の場合は、クラスタで HA が有効かつ動作しています。False の場合は、有効になっていますが、設定中であるため、まだ準備ができていません。
kubectl コマンドラインを使用して HAReady のステータスを確認するには、次のコマンドを実行します。
kubectl get dbcluster.alloydbomni.dbadmin.goog DB_CLUSTER_NAME -o jsonpath={.status.conditions[?(@.type == \'HAReady\')]} -n NAMESPACE次のように置き換えます。
- DB_CLUSTER_NAME: データベース クラスタの名前。
- NAMESPACE: データベース クラスタの Namespace。
スタンバイ インスタンスにフェイルオーバーする
プライマリ インスタンスが構成可能な一定期間にわたり使用できなくなった場合、AlloyDB Omni Operator はプライマリ データベース インスタンスからスタンバイ インスタンスに自動的にフェイルオーバーします。自動フェイルオーバーを開始するタイミングは、次のパラメータによって決まります。
- ヘルスチェックの間隔(デフォルトは 30 秒) 
- ヘルスチェックの連続失敗回数(デフォルトは 3 回) 
自動フェイルオーバーは、各ヘルスチェックの失敗間に指定された時間が経過した形で、指定された回数連続してヘルスチェックに失敗すると開始されます。デフォルト値をそのまま使用した場合、30 秒間隔で 3 回連続してヘルスチェックに失敗すると、自動フェイルオーバーが発生します。
手動フェイルオーバーは、予期しない障害から迅速に復旧し、ダウンタイムを最小限に抑える場合に適しています。
AlloyDB Omni Operator は、自動フェイルオーバーと手動フェイルオーバーの両方をサポートしています。自動フェイルオーバーはデフォルトで有効になっています。
フェイルオーバー後に、次の一連のイベントが発生します。
- AlloyDB Omni Operator がプライマリ データベース インスタンスをオフラインにします。 
- AlloyDB Omni Operator がスタンバイ レプリカを新しいプライマリ データベース インスタンスにプロモートします。 
- AlloyDB Omni Operator が以前のプライマリ データベース インスタンスを削除します。 
- AlloyDB Omni Operator が新しいスタンバイ レプリカを作成します。 
自動フェイルオーバーを無効にする
データベース クラスタでは、自動フェイルオーバーはデフォルトで有効になっています。
自動フェイルオーバーを無効にする手順は次のとおりです。
- クラスタのマニフェストで - enableAutoFailoverを- falseに設定します。- spec: availability: enableAutoFailover: false
自動フェイルオーバー トリガーの設定を調整する
設定を使用して、各データベース クラスタの自動フェイルオーバーを調整できます。
AlloyDB Omni Operator は、プライマリ データベース インスタンスとすべてのスタンバイ レプリカに対して定期的なヘルスチェックを実行します。ヘルスチェックのデフォルトの頻度は 30 秒です。インスタンスが自動フェイルオーバー トリガーのしきい値に達すると、AlloyDB Omni オペレーターは自動フェイルオーバーをトリガーします。
しきい値は、フェイルオーバーがトリガーされるまでのへルスチェックの連続失敗回数です。ヘルスチェックの期間またはしきい値を変更するには、クラスタのマニフェストで healthcheckPeriodSeconds フィールドと autoFailoverTriggerThreshold フィールドを整数値に設定します。
spec:
  availability:
    healthcheckPeriodSeconds: HEALTHCHECK_PERIOD
    autoFailoverTriggerThreshold: AUTOFAILOVER_TRIGGER_THRESHOLD
次のように置き換えます。
- HEALTHCHECK_PERIOD: 次のヘルスチェックまでの待機時間(秒数)を示す整数値。デフォルト値は- 30です。最小値は- 1、最大値は- 86400(1 日に相当)です。
- AUTOFAILOVER_TRIGGER_THRESHOLD: フェイルオーバーがトリガーされるまでのヘルスチェックの連続失敗回数を示す整数値。デフォルト値は- 3です。最小値は- 0です。最大値はありません。このフィールドが- 0に設定されている場合、代わりにデフォルト値の- 3が使用されます。
手動フェイルオーバーをトリガーする
手動フェイルオーバーをトリガーするには、新しいフェイルオーバー リソースのマニフェストを作成して適用します。
apiVersion: alloydbomni.dbadmin.goog/v1
kind: Failover
metadata:
  name: FAILOVER_NAME
  namespace: NAMESPACE
spec:
  dbclusterRef: DB_CLUSTER_NAME
次のように置き換えます。
- FAILOVER_NAME: このリソースの名前(例:- failover-1)。
- NAMESPACE: このフェイルオーバー リソースの Namespace。適用先のデータベース クラスタの Namespace と一致する必要があります。
- DB_CLUSTER_NAME: フェイルオーバーするデータベース クラスタの名前。
フェイルオーバーをモニタリングするには、次のコマンドを実行します。
kubectl get failover FAILOVER_NAME -o jsonpath={.status.state} -n NAMESPACE次のように置き換えます。
- FAILOVER_NAME: 作成時にフェイルオーバー リソースに割り当てた名前。
- NAMESPACE: データベース クラスタの Namespace。
新しいプライマリ データベース インスタンスの使用準備が整うと、コマンドが Success を返します。新しいスタンバイ インスタンスのステータスをモニタリングするには、次のセクションをご覧ください。
スタンバイ インスタンスへのスイッチオーバー
スイッチオーバーは、プライマリ データベースとスタンバイ レプリカのロールの切り替えが必要な障害復旧の設定やその他の計画済みアクティビティをテストする場合に行われます。
スイッチオーバーが完了すると、レプリケーションの方向とプライマリ データベース インスタンスおよびスタンバイ レプリカのロールが逆になります。スイッチオーバーを使用して、データ損失なしで障害復旧設定のテストをより細かく制御できます。
AlloyDB Omni Operator は手動スイッチオーバーをサポートしています。スイッチオーバーでは、次の一連のイベントが発生します。
- AlloyDB Omni Operator がプライマリ データベース インスタンスをオフラインにします。 
- AlloyDB Omni Operator がスタンバイ レプリカを新しいプライマリ データベース インスタンスにプロモートします。 
- AlloyDB Omni Operator が以前のプライマリ データベース インスタンスをスタンバイ レプリカに切り替えます。 
スイッチオーバーを行う
スイッチオーバーを開始する前に、次の操作を行います。
- プライマリ データベース インスタンスとスタンバイ レプリカの両方が正常な状態であることを確認します。詳細については、AlloyDB Omni を管理してモニタリングするをご覧ください。 
- 現在の HA ステータスが - HAReady状態であることを確認します。詳細については、データベース クラスタの HA を確認するをご覧ください。
スイッチオーバーを実行するには、新しい切り替えリソースのマニフェストを作成して適用します。
apiVersion: alloydbomni.dbadmin.goog/v1
kind: Switchover
metadata:
    name: SWITCHOVER_NAME
spec:
     dbclusterRef: DB_CLUSTER_NAME
     newPrimary: STANDBY_REPLICA_NAME
次のように置き換えます。
- SWITCHOVER_NAME: この切り替えリソースの名前。例:- switchover-1
- DB_CLUSTER_NAME: スイッチオーバー オペレーションが適用されるプライマリ データベース インスタンスの名前。
- STANDBY_REPLICA_NAME: 新しいプライマリにプロモートするデータベース インスタンスの名前。- スタンバイ レプリカ名を特定するには、次のコマンドを実行します。 - kubectl get instances.alloydbomni.internal.dbadmin.goog
スタンバイ インスタンスを自動的に修復する
スタンバイ インスタンスが使用できなくなった場合、AlloyDB Omni オペレーターは古いスタンバイ レプリカを削除し、その代わりとなる新しいスタンバイ レプリカを作成してインスタンスを修復します。自動修復をトリガーするデフォルトの時間は 90 秒です。
データベース クラスタを自動的に修復すると、プライマリ データベースの正常で継続的なレプリケーションを維持できます。
インスタンスの自動修復を無効にする
スタンバイ インスタンスの自動修復は、データベース クラスタでデフォルトで有効になっています。
自動修復を無効にする手順は次のとおりです。
- クラスタのマニフェストで、 - enableAutoHealを- falseに設定します。- spec: availability: enableAutoHeal: false
自動修復トリガーの設定を調整する
データベース クラスタごとに、設定を使用して自動修復を調整できます。
AlloyDB Omni Operator は、構成可能な定期的なヘルスチェックを実行します。詳細については、自動フェイルオーバー トリガーの設定を調整するをご覧ください。スタンバイ レプリカが自動修復トリガーのしきい値に達すると、AlloyDB Omni オペレーターが自動修復をトリガーします。
しきい値は、修復がトリガーされるまでのへルスチェックの連続失敗回数です。しきい値を変更するには、クラスタのマニフェストで autoHealTriggerThreshold を設定します。
spec:
  availability:
    autoHealTriggerThreshold: AUTOHEAL_TRIGGER_THRESHOLD
次のように置き換えます。
- AUTOHEAL_TRIGGER_THRESHOLD: 修復がトリガーされるまでのヘルスチェックの連続失敗回数を示す整数値。デフォルト値は- 5です。スタンバイ ヘルスチェックで一時的な 1 回限りのエラーが発生する可能性があるため、最小値は- 2です。
インスタンスの修復のトラブルシューティング
単一の Kubernetes クラスタで大量のデータベース クラスタを使用している場合や、プロビジョニング不足のデータベース クラスタが存在する場合、自動修復により AlloyDB Omni オペレーターまたはデータベース クラスタが使用できなくなる可能性があります。HealthCheckProber: health check for instance failed で始まるエラーが発生し、そのエラーがタイムアウトまたは接続エラーを参照している場合は、次の推奨修正方法を試してください。
- Kubernetes クラスタで管理しているデータベース クラスタの数を減らす。 
- ヘルスチェックの頻度が減るよう、 - healthcheckPeriodSecondsしきい値を引き上げます。詳細については、自動フェイルオーバー トリガーの設定を調整するをご覧ください。
- 自動修復の頻度が減るよう、 - autoHealTriggerThresholdの値を引き上げる。詳細については、自動修復トリガーの設定を調整するをご覧ください。
- データベース クラスタでの自動修復を無効にする。詳細については、インスタンスの自動修復を無効にするをご覧ください。 
- AlloyDB Omni オペレーターの CPU 上限、メモリ上限、またはその両方を引き上げる。詳細については、自動メモリ管理についてと AlloyDB Omni オペレーターのメモリヒープ使用量を分析するをご覧ください。 
- AlloyDB Omni データベース クラスタのリソース上限を引き上げる。詳細については、Kubernetes ベースのデータベース クラスタのサイズを変更するをご覧ください。 
自動修復の処理が過剰になった場合に発生する可能性のあるエラーの例を次に示します。これらの例では、エラーの原因特定に役立つ環境の詳細(クラスタ名や IP アドレスなど)を省略しています。
- HealthCheckProber: health check for instance failed" err="DBSE0005: DBDaemon Client Error. secure dbdaemon connection failed: context deadline exceeded...
- HealthCheckProber: health check for instance failed" err="rpc error: code = Code(10303) desc = DBSE0303: Healthcheck: Health check table query failed. dbdaemon/healthCheck: read healthcheck table: timeout...
- HealthCheckProber: health check for instance failed" err="rpc error: code = Code(12415) desc = DBSE2415: Postgres: failed to connect to database. dbdaemon/healthCheck: failed to connect...
スタンバイ レプリカを読み取り専用インスタンスとして使用する
スタンバイ レプリカを読み取り専用インスタンスとして使用する手順は次のとおりです。
- データベース クラスタのマニフェストで - enableStandbyAsReadReplicaを- trueに設定します。- spec: availability: enableStandbyAsReadReplica: true
- マニフェストを再度適用します。 
- 読み取り専用エンドポイントが - 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