高可用性構成を作成する

このページでは、AlloyDB Omni の高可用性構成を設定する方法について説明します。このページでは、高可用性構成で新しい AlloyDB Omni インスタンスを作成する方法のみについて説明します。既存のインスタンスを高可用性に変換する方法については説明しません。

始める前に

  1. 高可用性とデータの復元力をご覧ください。

  2. まだプロジェクトがない場合は、 Google Cloud プロジェクトを作成します。

  3. プロジェクトで課金が有効になっていることを確認します。

  4. Google Cloud コンソールで Cloud Shell を開きます。

  5. Google Cloud コンソールで、次のソース リポジトリのクローンを作成します。

    git clone https://github.com/GoogleCloudPlatform/cloud-solutions.git
    

インストール

このガイドでは、AlloyDB Omni を備えた 3 ノード Patroni クラスタと、構成ストアとして 3 ノード クラスタ etcd をデプロイします。クラスタの前面では、フローティング IP アドレスのマネージド インスタンス グループで HAProxy を使用して、フェイルオーバーがクライアントに対して透過的になります。

この設定の初期構成を次の図に示します。

HAProxy がクライアントとプライマリ ノードの間の接続を管理する構成

図 1: HAProxy がクライアントとプライマリ ノード間の接続を管理する構成。

停止が発生すると、構成は次の図のように変更されます。

障害が発生したプライマリ ノードがスタンバイ ノードに置き換えられた構成の更新

図 2. 障害が発生したプライマリ ノードがスタンバイ ノードに置き換えられた構成が更新されました。

データベースに接続するクライアントの数が問題になり、同時データベース接続数の多さによってパフォーマンスの問題が発生している場合は、アプリケーション側の接続プーリングを追加することをおすすめします。これができない場合は、PgBouncer などのツールを使用してデータベース側の接続プールを追加できます。

デプロイ

  1. Cloud Shell で Cloud Solutions リポジトリのクローンを作成したら、terraform ディレクトリに移動します。

    cd cloud-solutions/projects/alloydbomni-ha-patroni-etcd/terraform
    
  2. 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 の変数構成ファイルをご覧ください。

  3. Terraform スクリプトを実行して、すべてのリソースを作成します。

    terraform init && terraform apply
    

    このスクリプトは、次のものを作成して構成します。

    • etcd クラスタ用の 3 つのノード

    • Patroni クラスタ用の 3 つのノード

    • HAProxy 用に 1 つのノード

Patroni を同期に構成する

Patroni が 3 ノード クラスタで同期レプリケーションのみを使用するようにするには、Patroni 構成ファイルのブートストラップ セクションに synchronous_modesynchronous_node_countsynchronous_commitsynchronous_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 のドキュメントのレプリケーション モードのセクションをご覧ください。

次のステップ