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

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

最終更新日:Apr 25, 2025

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

前提条件

PolarDB for PostgreSQL(Oracle 互換) クラスタは、PolarDB for PostgreSQL(Oracle 互換) 1.0(リビジョンバージョン 1.1.27 以降)を実行しています。

説明

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

背景情報

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

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

  • 詳細については、PostgreSQL の「論理デコードの概念」の「レプリケーションスロット」セクションをご参照ください。

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

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

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

    説明
    • 同期モードでは、クラスタのフェールオーバー中に論理レプリケーションでデータが失われません。

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

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

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

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

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

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