このページでは、AlloyDB Omni の高可用性構成を設定する方法について説明します。このページでは、高可用性構成で新しい AlloyDB Omni インスタンスを作成する方法についてのみ説明します。既存のインスタンスを高可用性に変換する方法については説明しません。
始める前に
- 高可用性とデータの復元力をご覧ください。 
- まだ作成していない場合は、 Google Cloud プロジェクトを作成します。 
- プロジェクトの課金を有効にします。 
- Google Cloud コンソールで Cloud Shell を開きます。 
- Google Cloud コンソールで、次のソース リポジトリのクローンを作成します。 - git clone https://github.com/GoogleCloudPlatform/cloud-solutions.git
インストール
このガイドでは、AlloyDB Omni を備えた 3 ノード Patroni クラスタと、構成ストアとして 3 ノードクラスタ etcd をデプロイします。クラスタのフロントでは、フローティング IP アドレスのマネージド インスタンス グループで HAProxy を使用します。これにより、フェイルオーバーがクライアントに対して透過的になります。
この設定の初期構成を次の図に示します。
図 1.HAProxy がクライアントとプライマリ ノード間の接続を管理する構成。
停止が発生すると、構成は次の図のように変更されます。
図 2. 障害が発生したプライマリ ノードがスタンバイ ノードに置き換えられた構成
データベースに接続するクライアントの数が問題になり、データベースの同時接続数が多くパフォーマンスの問題が発生している場合は、アプリケーション側の接続プーリングを追加することをおすすめします。これができない場合は、PgBouncer などのツールを使用してデータベース側の接続プールを追加します。
デプロイ
- Cloud Shell で Cloud Solutions リポジトリのクローンを作成した後、terraform ディレクトリに移動します。 - cd cloud-solutions/projects/alloydbomni-ha-patroni-etcd/terraform 
- terraform.tfvarsファイルを作成して編集します。ファイルで、次の変数の値を設定します。- project_id = "PROJECT_ID" region = "REGION" zones = "ZONES" node_count = 3 cluster_name = "CLUSTER_NAME" replication_user_password = "REPLICATION_USER_PASSWORD" postgres_super_user_password = "PG_SUPER_USER_PASSWORD"- 各変数の説明については、GitHub の変数構成ファイルをご覧ください。 
- Terraform スクリプトを実行して、すべてのリソースを作成します。 - terraform init && terraform apply - このスクリプトは、次のものを作成して構成します。 - etcd クラスタ用に 3 つのノード 
- Patroni クラスタ用に 3 つのノード 
- HAProxy 用に 1 つのノード 
 
Patroni を同期するように構成する
Patroni が 3 ノードクラスタで同期レプリケーションのみを使用するようにするには、Patroni 構成ファイルのブートストラップ セクションに synchronous_mode、synchronous_node_count、synchronous_commit、synchronous_standby_names などの構成項目を追加します。Patroni 構成は、起動スクリプト テンプレートと Patroni ノードの /alloydb/config/patroni.yml ファイルで定義されます。同期レプリケーションを使用する場合、Patroni ブートストラップ構成は次のようになります。
bootstrap:
  dcs:
    ttl: 30
    loop_wait: 10
    retry_timeout: 10
    maximum_lag_on_failover: 1048576
    synchronous_mode: true
    synchronous_node_count: 2
    postgresql:
      use_pg_rewind: true
      use_slots: true
      parameters:
        hot_standby: "on"
        wal_keep_segments: 20
        max_wal_senders: 8
        max_replication_slots: 8
        synchronous_commit: remote_apply
        synchronous_standby_names: '*'
synchronous_mode がオンの場合、Patroni はプライマリと他のレプリカ間で同期レプリケーションを使用します。synchronous_node_count パラメータは、Patroni が同期スタンバイ レプリカの数を管理するために使用します。Patroni は、synchronous_node_count パラメータに基づいて同期スタンバイ レプリカの正確な数を管理し、メンバーの参加と離脱に応じて構成ストアと synchronous_standby_names の状態を調整します。同期レプリケーションの詳細については、Patroni のドキュメントでレプリケーション モードのセクションをご覧ください。