RDS for PostgreSQL の論理スロット同期の管理 - Amazon Relational Database Service

RDS for PostgreSQL の論理スロット同期の管理

コミュニティ PostgreSQL 17 以降、プライマリサーバーからスタンバイサーバーに論理レプリケーションスロットを自動的に同期する新機能が、パラメータ sync_replication_slots や関連する関数 pg_sync_replication_slots() を通じて導入されました。これは、実行時にスロットを手動で同期します。

これらの機能は、RDS for PostgreSQL 17 以降で使用できます。一般的なセットアップには、プライマリインスタンスとそのリードレプリカと、プライマリへの論理レプリケーションサブスクライバーがあります。

サブスクリプションがフェイルオーバーオプションを true に設定して作成されていることを確認します。

CREATE SUBSCRIPTION subname CONNECTION 'host=...' PUBLICATION pubname 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_replication1 である必要があります。

  • hot_standby_feedback はスタンバイ時に 1 である必要があります。

  • スタンバイの rds.logical_slot_sync_dbname には有効なデータベース名を設定する必要があります。

    パラメータのデフォルト値は postgres です。論理パブリッシングインスタンスに postgres データベースがある場合、デフォルトのパラメータを変更する必要はありません。

  • プライマリの synchronized_standby_slots は、同期するスタンバイの物理レプリケーションスロットに設定する必要があります。

  • 自動同期を有効にするには sync_replication_slots1 である必要があります。

フェイルオーバー対応のサブスクリプションスロットと上記のパラメータ値を使用すると、スタンバイが昇格したとき、サブスクライバーはサブスクリプションをこの新しく昇格されたインスタンスに変更し、論理レプリケーションをシームレスに続行できます。