以降のセクションでは、レプリケーション用に 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/24DATA_DIR: プライマリ サーバーのデータ ディレクトリ パス。
プライマリ サーバーを再起動します。
Docker
docker restart CONTAINER_NAMEPodman
podman restart CONTAINER_NAME
レプリカ サーバーの作成と構成
AlloyDB Omni レプリカ サーバーを作成して構成するには、次の操作を行います。
レプリカがプライマリ サーバーとネットワーク接続していることを確認します。
ping SOURCE_IPSOURCE_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/alloydbomniPodman
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 行が含まれます。
レプリケーションを設定すると、プライマリ データベース サーバーの行に対するすべての挿入、更新、削除が数秒以内にレプリカで読み取り可能になります。