すべてのプロダクト
Search
ドキュメントセンター

PolarDB:論理レプリケーションスロットのフェールオーバー

最終更新日:Apr 28, 2025

このトピックでは、PolarDB for PostgreSQL の論理レプリケーションスロットフェールオーバー機能について説明します。プライマリノードに障害が発生した場合、この機能により、論理レプリケーションスロットがプライマリノードからスタンバイノードに同期されます。

前提条件

PolarDB for PostgreSQL クラスタで PostgreSQL 11(リビジョンバージョン 1.1.27 以降)が実行されていること。

説明

SHOW polar_version 文を実行して、クラスタのリビジョンバージョンを確認します。必要に応じて、リビジョンバージョンをアップグレードします。

背景情報

PostgreSQL のストリーミングレプリケーションプロトコルによると、プライマリノードの論理レプリケーションスロットは、スタンバイノードとして機能する読み取り専用ノードに同期されません。フェールオーバーが発生した場合、論理レプリケーションスロットは失われ、その結果、論理サブスクリプションが中断されます。この問題を解決するために、PolarDB for PostgreSQL は、論理レプリケーションスロットのフェールオーバーをサポートすることでシステムを強化しています。

説明
  • 物理レプリケーションスロットのフェールオーバーはサポートされていません。

  • 詳細については、PostgreSQL の「Logical decoding concepts」の「Replication slots」セクションをご参照ください。

論理レプリケーションスロットのフェールオーバー機能を有効または無効にする

polar_failover_slot_mode パラメーターを設定することで、論理レプリケーションスロットのフェールオーバー機能を有効または無効にすることができます。コンソールでパラメーターを設定する。有効な値は次のとおりです。

  • sync: 論理レプリケーションスロットのフェールオーバーを有効にし、同期モードに設定します。

    説明
    • 同期モードでは、クラスタのフェールオーバー中に論理レプリケーションでデータが失われないことが保証されます。

    • これは、論理レプリケーションクライアントがスタンバイノードよりも早く変更を受信しないようにすることで実現されます。ただし、長時間の切断と再接続、またはスタンバイノードの再構築が発生した場合、タイムウィンドウが大きくなり、プライマリストレージ間の同期レイテンシが比較的高くなり、論理レプリケーションクライアントがスタンバイノードよりも早く変更を受信する可能性があります。このタイムウィンドウ中にフェールオーバーが発生した場合、論理レプリケーションでデータが失われる可能性があります。さらに、新しいプライマリノードで生成されたデータも失われる可能性があります。

      このようなデータ損失を回避するには、お問い合わせいただき、polar_priority_replication_force_wait パラメーターを on に設定してください。これにより、スタンバイノードが切断された場合、プライマリノードはスタンバイノードが再接続または再構築されるまで、論理レプリケーションクライアントに変更を送信しません。ただし、これは論理レプリケーションの可用性を低下させます。注意して進めてください。

  • async(デフォルト): 論理レプリケーションスロットのフェールオーバーを有効にし、非同期モードに設定します。

    説明
    • 非同期モードでは、HA クラスタのフェールオーバー中に論理レプリケーションでデータが失われることはありません。ただし、重複データが論理レプリケーションクライアントに送信される場合があります。フェールオーバーの完了後、クライアントが新しいプライマリよりも新しいデータを持っている場合、クライアントはフェールオーバー中に失われたデータ(もしあれば)を保持している可能性があります。

    • 不整合なデータがビジネスに影響を与える場合は、同期モードを使用することをお勧めします。

  • off: 論理レプリケーションスロットのフェールオーバーを無効にします。