RDS for PostgreSQL の論理スロット同期の管理
コミュニティ PostgreSQL 17 以降、プライマリサーバーからスタンバイサーバーに論理レプリケーションスロットを自動的に同期する新機能が、パラメータ sync_replication_slots や関連する関数 pg_sync_replication_slots() を通じて導入されました。これは、実行時にスロットを手動で同期します。
これらの機能は、RDS for PostgreSQL 17 以降で使用できます。一般的なセットアップには、プライマリインスタンスとそのリードレプリカと、プライマリへの論理レプリケーションサブスクライバーがあります。
サブスクリプションがフェイルオーバーオプションを true に設定して作成されていることを確認します。
CREATE SUBSCRIPTIONsubnameCONNECTION 'host=...' PUBLICATIONpubnameWITH (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である必要があります。
フェイルオーバー対応のサブスクリプションスロットと上記のパラメータ値を使用すると、スタンバイが昇格したとき、サブスクライバーはサブスクリプションをこの新しく昇格されたインスタンスに変更し、論理レプリケーションをシームレスに続行できます。