このページでは、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 のドキュメントのレプリケーション モードのセクションをご覧ください。