RDS for PostgreSQL の論理スロット同期の管理
コミュニティ PostgreSQL 17 以降、プライマリサーバーからスタンバイサーバーに論理レプリケーションスロットを自動的に同期する新機能が、パラメータ sync_replication_slots
や関連する関数 pg_sync_replication_slots()
を通じて導入されました。これは、実行時にスロットを手動で同期します。
これらの機能は、RDS for PostgreSQL 17 以降で使用できます。一般的なセットアップには、プライマリインスタンスとそのリードレプリカと、プライマリへの論理レプリケーションサブスクライバーがあります。
サブスクリプションがフェイルオーバーオプションを true に設定して作成されていることを確認します。
CREATE SUBSCRIPTION
subname
CONNECTION 'host=...' PUBLICATIONpubname
WITH (failover = true);
これにより、フェイルオーバーを有効にした状態でパブリッシャーに論理スロットが作成されます。
postgres=> SELECT slot_name, slot_type, failover FROM pg_catalog.pg_replication_slots; slot_name | slot_type | failover -----------+-----------+---------- subname | logical | t (1 row)
スロット同期を有効にすると、プライマリのすべてのフェイルオーバー論理レプリケーションスロットが物理スタンバイに自動的に作成され、定期的に同期されます。パラメータグループを通じて次の値が設定されていることを確認します。
-
論理レプリケーションを有効にするには
rds.logical_replication
が1
である必要があります。 -
hot_standby_feedback
はスタンバイ時に1
である必要があります。 -
スタンバイの
rds.logical_slot_sync_dbname
には有効なデータベース名を設定する必要があります。パラメータのデフォルト値は
postgres
です。論理パブリッシングインスタンスにpostgres
データベースがある場合、デフォルトのパラメータを変更する必要はありません。 -
プライマリの
synchronized_standby_slots
は、同期するスタンバイの物理レプリケーションスロットに設定する必要があります。 -
自動同期を有効にするには
sync_replication_slots
が1
である必要があります。
フェイルオーバー対応のサブスクリプションスロットと上記のパラメータ値を使用すると、スタンバイが昇格したとき、サブスクライバーはサブスクリプションをこの新しく昇格されたインスタンスに変更し、論理レプリケーションをシームレスに続行できます。