読み取りスループットと可用性を向上させるには、既存の AlloyDB Omni サーバーの AlloyDB Omni レプリカ サーバーを作成します。レプリカ サーバーは、プライマリ データベース サーバーの読み取り専用クローンを提供します。プライマリ サーバーのデータを反映するように、独自のデータを継続的に更新します。
以降のセクションでは、レプリケーション用に AlloyDB Omni プライマリ サーバーを構成し、レプリカ サーバーを構成し、プライマリ サーバーでレプリケーション ステータスを確認する手順について説明します。
詳細については、Kubernetes に AlloyDB Omni をインストールするをご覧ください。
レプリケーション用にプライマリ サーバーを構成する
プライマリ サーバーのホストからレプリカ サーバーのホストへの上り(内向き)トラフィックがプライマリ サーバーの Postgres ポートを通過できるように、プライマリ サーバーのホストのネットワークまたはファイアウォールの設定を更新します。
レプリケーション ユーザーを作成します。
Docker
docker exec CONTAINER_NAME psql -h localhost -U postgres -c "create user REPLICA_USER with replication password 'PASSWORD'"
次のように置き換えます。
REPLICA_USER
: レプリカ ユーザーの名前。PASSWORD
: レプリカ ユーザーのパスワード。CONTAINER_NAME
: AlloyDB Omni コンテナのインストール時に割り当てた名前。
Podman
podman exec CONTAINER_NAME psql -h localhost -U postgres -c "create user REPLICA_USER with replication password 'PASSWORD'"
次のように置き換えます。
REPLICA_USER
: レプリカ ユーザーの名前。PASSWORD
: レプリカ ユーザーのパスワード。CONTAINER_NAME
: AlloyDB Omni コンテナのインストール時に割り当てた名前。
/DATA_DIR/pg_hba.conf
ファイルに、ファイルに存在するhost all all all scram-sha-256
の前に次の行を追加します。host alloydbmetadata alloydbmetadata IP_RANGE trust host replication REPLICA_USER IP_RANGE scram-sha-256
次のように置き換えます。
IP_RANGE
: レプリカマシンが配置されているサブネットの IP 範囲(CIDR 表記)。例:203.0.113.0/24
DATA_DIR
: このレプリカがデータ ディレクトリに使用するファイル システム パス。
プライマリ サーバーを再起動します。
Docker
docker restart CONTAINER_NAME
Podman
podman restart CONTAINER_NAME
レプリカ サーバーを作成して構成する
AlloyDB Omni レプリカ サーバーを作成して構成するには、次の操作を行います。
レプリカがプライマリ サーバーとネットワーク接続していることを確認します。
ping SOURCE_IP
SOURCE_IP
は、レプリケート元のプライマリ AlloyDB Omni インスタンスの IP アドレスに置き換えます。レプリカがプライマリ サーバーに接続できることを確認します。
Docker
docker run -it --rm google/alloydbomni psql "host=SOURCE_IP user=REPLICA_USER replication=1" -c "IDENTIFY_SYSTEM;"
Podman
podman run -it --rm google/alloydbomni psql "host=SOURCE_IP user=REPLICA_USER replication=1" -c "IDENTIFY_SYSTEM;"
出力は次のようになります。
systemid | timeline | xlogpos | dbname ---------------------+----------+-----------+-------- 7376500460465963036 | 1 | 0/454B670 | (1 row)
レプリカには、ディスク上の永続ストレージ ロケーションが必要です。
Docker
mkdir alloydb && docker run --rm -it \ -e PGDATA=/var/lib/postgresql/data/pgdata \ -v "$PWD/alloydb":/var/lib/postgresql/data \ -p 5432:5432 \ --user $(id -u):$(id -g) \ google/alloydbomni \ /usr/lib/postgresql/15/bin/pg_basebackup \ --pgdata=/var/lib/postgresql/data/pgdata \ --checkpoint=fast \ --host="SOURCE_IP" \ --port="SOURCE_PORT" \ --username=REPLICA_USER \ --create-slot \ --write-recovery-conf \ --slot="SLOT_NAME"
次のように置き換えます。
SOURCE_PORT
: レプリケート元のプライマリ AlloyDB Omni インスタンスの TCP ポート。この値を指定しない場合、AlloyDB Omni はデフォルト値5432
を適用します。SLOT_NAME
: レプリケーション スロットの名前のラベル。
Podman
mkdir alloydb && podman run --rm -it \ -e PGDATA=/var/lib/postgresql/data/pgdata \ -v "$PWD/alloydb":/var/lib/postgresql/data \ -p 5432:5432 \ --user $(id -u):$(id -g) \ google/alloydbomni \ /usr/lib/postgresql/15/bin/pg_basebackup \ --pgdata=/var/lib/postgresql/data/pgdata \ --checkpoint=fast \ --host="SOURCE_IP" \ --port="SOURCE_PORT" \ --username=REPLICA_USER \ --create-slot \ --write-recovery-conf \ --slot="SLOT_NAME"
次のように置き換えます。
SOURCE_PORT
: レプリケート元のプライマリ AlloyDB Omni インスタンスの TCP ポート。この値を指定しない場合、AlloyDB Omni はデフォルト値5432
を適用します。SLOT_NAME
: レプリケーション スロットの名前のラベル。
レプリカ インスタンスを起動します。
Docker
docker run --detach \ --name pg-service \ -e POSTGRES_PASSWORD=a \ -e PGDATA=/var/lib/postgresql/data/pgdata \ -v "$PWD/alloydb":/var/lib/postgresql/data \ -v /dev/shm:/dev/shm \ -p 5432:5432 \ --user $(id -u):$(id -g) \ google/alloydbomni
Podman
podman run --detach \ --name pg-service \ -e POSTGRES_PASSWORD=a \ -e PGDATA=/var/lib/postgresql/data/pgdata \ -v "$PWD/alloydb":/var/lib/postgresql/data \ -v /dev/shm:/dev/shm \ -p 5432:5432 \ --user $(id -u):$(id -g) \ google/alloydbomni
プライマリ サーバーでレプリケーション ステータスを確認する
レプリケーションが正しく構成されていることを確認するには、プライマリ サーバーのホストで次のコマンドを実行します。
Docker
docker exec -it CONTAINER_NAME psql -h localhost -U postgres -c "select * from pg_stat_replication"
Podman
podman exec -it CONTAINER_NAME psql -h localhost -U postgres -c "select * from pg_stat_replication"
出力テーブルには、プライマリ データベース サーバーに接続されているレプリカごとに 1 行が含まれます。
レプリケーションを設定すると、プライマリ データベース サーバーの行に対するすべての挿入、更新、削除が数秒以内にレプリカで読み取り可能になります。