読み取り専用レプリカを作成する

読み取りスループットと可用性を向上させるには、既存の AlloyDB Omni サーバーの AlloyDB Omni レプリカ サーバーを作成します。レプリカ サーバーは、プライマリ データベース サーバーの読み取り専用クローンを提供します。プライマリ サーバーのデータを反映するように、独自のデータを継続的に更新します。

以降のセクションでは、レプリケーション用に AlloyDB Omni プライマリ サーバーを構成し、レプリカ サーバーを構成し、プライマリ サーバーでレプリケーション ステータスを確認する手順について説明します。

詳細については、Kubernetes に AlloyDB Omni をインストールするをご覧ください。

レプリケーション用にプライマリ サーバーを構成する

  1. プライマリ サーバーのホストからレプリカ サーバーのホストへの上り(内向き)トラフィックがプライマリ サーバーの Postgres ポートを通過できるように、プライマリ サーバーのホストのネットワークまたはファイアウォールの設定を更新します。

  2. レプリケーション ユーザーを作成します。

    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 コンテナのインストール時に割り当てた名前。
  3. /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: このレプリカがデータ ディレクトリに使用するファイル システム パス。
  4. プライマリ サーバーを再起動します。

    Docker

    docker restart CONTAINER_NAME

    Podman

    podman restart CONTAINER_NAME

レプリカ サーバーを作成して構成する

AlloyDB Omni レプリカ サーバーを作成して構成するには、次の操作を行います。

  1. レプリカがプライマリ サーバーとネットワーク接続していることを確認します。

    ping SOURCE_IP

    SOURCE_IP は、レプリケート元のプライマリ AlloyDB Omni インスタンスの IP アドレスに置き換えます。

  2. レプリカがプライマリ サーバーに接続できることを確認します。

    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)
    
  3. レプリカには、ディスク上の永続ストレージ ロケーションが必要です。

    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: レプリケーション スロットの名前のラベル。
  4. レプリカ インスタンスを起動します。

    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 行が含まれます。

レプリケーションを設定すると、プライマリ データベース サーバーの行に対するすべての挿入、更新、削除が数秒以内にレプリカで読み取り可能になります。

次のステップ