Converting to logical replication#

Postgresディストリビューションのメジャーバージョンのアップグレードと、その後のPostgres Distributedのインストールを促進するには、シードノードへのレプリケーションストリームを論理レプリケーションに変換する必要があります。データ損失のないシームレスな移行を行うには、物理レプリケーションが中断されたソースノードのWALストリーム内の正確なログシーケンス番号LSNで論理レプリケーションを再開する必要があります。これは、スイッチオーバーLSNと呼ばれます。

ソースノードでのパブリケーションの作成#

レプリケートするデータを定義し、WALファイルを保持する専用スロットを作成することにより、ソースノードを準備します。

  1. データベース内のすべてのテーブルのパブリケーションを作成します。

CREATE PUBLICATION migration_seed_pub FOR ALL TABLES;
  1. パブリケーションを確認します。

SELECT * FROM pg_publication;
SELECT * FROM pg_publication_tables;
  1. 論理レプリケーションスロットを作成します。

SELECT pg_create_logical_replication_slot(migration_node_${SEED_NODE_NAME}, pgoutput);

この段階でスロットを作成すると、ソースノードは、スイッチオーバー操作の前に必要なWALデータの保持を開始します。ソースノードは最終的にマルチプルのPGDノードをサポートするため、各スロットには、サービスを提供するターゲットノードを識別するように特に名前が付けられます。

シードノードの昇格#

シードノードを昇格させると、着信物理レプリケーションストリームが停止され、ノードがスタンドアロンの書き込み可能なインスタンスに変換されます。

警告

データの整合性を維持するには、この段階でシードノードへのアプリケーションの書き込みを防止する必要があります。アプリケーションは、ソースノードに排他的に書き込みを続ける必要があります。

シードノードで、次のコマンドを実行します。

su -u enterprisedb --command "pg_ctl promote"

シードノードへの論理レプリケーションの有効化#

昇格後、新しい論理レプリケーションスロットを物理レプリケーションが終了したポイントに合わせる必要があります。

  1. シードノードで、物理ストリームから再生された最後のLSNを特定します。

SELECT pg_last_wal_replay_lsn();
  1. ソースノードで、論理スロットをそのLSNに手動で移動します。 ${SWITCH_OVER_LSN} を、上記の手順で取得した値に置き換えます。

SELECT pg_replication_slot_advance(migration_node_${SEED_NODE_NAME}, ${SWITCH_OVER_LSN});
  1. シードノードで論理サブスクリプションを作成します。

CREATE SUBSCRIPTION migration_seed_sub
        CONNECTION ${SOURCE_DSN}
        PUBLICATION migration_seed_pub
            WITH (
                enabled = false,
                copy_data = false,
                create_slot = false,
                slot_name = migration_node_${SEED_NODE_NAME}
                );
  1. サブスクリプションがレプリケーションのテーブルを正しく識別したことを確認します。

SELECT n.nspname AS schemaname,
    c.relname AS tablename,
    sr.srsubstate AS state,
    s.subname AS subscription_name
FROM pg_subscription_rel sr
JOIN pg_class c ON sr.srrelid = c.oid
JOIN pg_namespace n ON c.relnamespace = n.oid
JOIN pg_subscription s ON sr.srsubid = s.oid
WHERE s.subname = migration_seed_sub
ORDER BY n.nspname, c.relname;
  1. 論理レプリケーションを有効にします。

ALTER SUBSCRIPTION migration_seed_sub ENABLE;

物理レプリケーションのクリーンアップ#

  1. 論理ストリームが検証されアクティブになったら、ソースノードで次のコマンドを実行して、古い物理レプリケーションコンポーネントを削除し、リソースを解放します。

SELECT pg_drop_replication_slot(migration_phy_slot);
  1. シードノードで、次のコマンドを実行して、物理レプリケーションの残りの構成パラメーターを削除します。

ALTER SYSTEM RESET primary_conninfo;
ALTER SYSTEM RESET primary_slot_name;

次のステップ Upgrading the seed node and installing PGD 。