Using PG Failover Slots

フェールオーバー中、一貫性の理由により、スロットはすぐにはスタンバイに同期されません。 pg_failover_slots 拡張機能がアクティブ化されている場合、スタンバイは論理スロットよりも遅れているか、プライマリの論理スロットよりも進んでいる可能性があります。拡張機能は検証を行い、実際に安全な場合にのみスロットを同期します。

ただし、これにより、スロットが同期されていること、およびスタンバイが実際にすべてのスロットの一貫した論理デコードを使用してフェイルオーバー ターゲットになる準備ができていることを確認する必要があります。これは最初だけ行う必要があります。スロットが初めて同期されると、クラスター内で拡張機能がアクティブである限り、スロットは常に一貫しています。

スロットがプライマリと完全に同期しているかどうかのチェックは比較的簡単です。スロットは、スタンバイの pg_replication_slots ビューに存在し、アクティブ状態 false を持っている必要があります。アクティブ状態の true は、スロットが現在初期化されていることを意味します。

たとえば、次の psql セッションについて考えてみます。

#  SELECT slot_name, active FROM pg_replication_slots WHERE slot_type = logical;

__OUTPUT__
    slot_name    | active
- ----------------+--------
regression_slot1 | f
regression_slot2 | f
regression_slot3 | t

この例は、スロット regression_slot1 と regression_slot2 がプライマリからスタンバイに同期され、regression_slot3 がまだ同期されていることを示しています。この段階でフェイルオーバーが発生すると、regression_slot3 が失われます。

少し待ってから、再度クエリを実行できます。

```sql # SELECT slot_name, active FROM pg_replication_slots WHERE slot_type = logical;

OUTPUT slot_name | active - —————-+——– regression_slot1 | f regression_slot2 | f regression_slot3 | f ``` これで、3 つのスロットすべてが同期されました。それらの論理デコード状態を失うことなく、スタンバイをフェイルオーバーに使用できます。