バージョンごとのドキュメント一覧

29.3. Logical Replication Failover #

To allow subscriber nodes to continue replicating data from the publisher node even when the publisher node goes down, there must be a physical standby corresponding to the publisher node. The logical slots on the primary server corresponding to the subscriptions can be synchronized to the standby server by specifying <literal>failover = true</literal> when creating subscriptions. See <xref linkend="logicaldecoding-replication-slots-synchronization"/> for details. Enabling the <link linkend="sql-createsubscription-params-with-failover"><literal>failover</literal></link> parameter ensures a seamless transition of those subscriptions after the standby is promoted. They can continue subscribing to publications on the new primary server. 《機械翻訳》パブリッシャーノードがダウンになっても、サブスクライバーノードがパブリッシャーノードからデータを複製し続けることを可能にするためには、パブリッシャーノードに対応する物理的スタンバイが存在しなければならない。 サブスクリプションに対応するロジカルのプライマリサーバスロットは、サブスクリプションの作成時にスタンバイサーバ=真を指定することによって、フェイルオーバーに同期させることができます。 詳細は47.2.3を参照してください。 フェイルオーバーパラメータを有効にすると、スタンバイがプロモートされた後、これらのサブスクリプションのシームレスな移行が保証されます。 彼らは新しいプライマリサーバに関する出版物の購読を続けることができます。

Because the slot synchronization logic copies asynchronously, it is necessary to confirm that replication slots have been synced to the standby server before the failover happens. To ensure a successful failover, the standby server must be ahead of the subscriber. This can be achieved by configuring <link linkend="guc-synchronized-standby-slots"><varname>synchronized_standby_slots</varname></link>. 《機械翻訳》スロット同期化ロジックは非同期にコピーするため、レプリケーションスロットがスタンバイサーバ前に同期化されていることを確認する必要があります。 フェイルオーバーが発生します。 フェイルオーバーを成功させる保証には、スタンバイサーバがサブスクライバーよりも先行している必要があります。 これは、synchronized_スタンバイ_slotsを設定することで実現できます。

To confirm that the standby server is indeed ready for failover, follow these steps to verify that all necessary logical replication slots have been synchronized to the standby server: 《機械翻訳》スタンバイサーバが実際にフェイルオーバーの準備ができていることを確認するには、次の手順に従って、必要なすべてのロジカルレプリケーションスロットがスタンバイサーバに同期されていることを確認します。

  1. On the subscriber node, use the following SQL to identify which replication slots should be synced to the standby that we plan to promote. This query will return the relevant replication slots associated with the failover-enabled subscriptions. 《機械翻訳》サブスクライバーノードでは、次のSQLを使用して、プロモートにプランするスタンバイに同期するレプリケーションスロットを特定します。 このクエリは、フェイルオーバー対応のサブスクリプションに関連するレプリケーションスロットを結果します。

    test_sub=# SELECT
                   array_agg(quote_literal(s.subslotname)) AS slots
               FROM  pg_subscription s
               WHERE s.subfailover AND
                     s.subslotname IS NOT NULL;
     slots
    -------
     {'sub1','sub2','sub3'}
    (1 row)
    
  2. On the subscriber node, use the following SQL to identify which table synchronization slots should be synced to the standby that we plan to promote. This query needs to be run on each database that includes the failover-enabled subscription(s). Note that the table sync slot should be synced to the standby server only if the table copy is finished (See <xref linkend="catalog-pg-subscription-rel"/>). We don't need to ensure that the table sync slots are synced in other scenarios as they will either be dropped or re-created on the new primary server in those cases. 《機械翻訳》サブスクライバーノードでは、次のSQLを使用して、プロモートにプランするスタンバイに同期させるテーブル同期化スロットを特定します。 このクエリニーズは、フェイルオーバー対応のデータベースを含む各サブスクリプションで実行されます。 ノート同期スロットは、テーブルコピーが終了した場合にのみスタンバイサーバに同期される必要があります(51.55を参照)。 テーブル他のシナリオでは、テーブル同期スロットがドロップされるか、新しいプライマリサーバで再作成されるため、これらのスロットが同期されることを保証する必要はありません。

    test_sub=# SELECT
                   array_agg(quote_literal(slot_name)) AS slots
               FROM
               (
                   SELECT CONCAT('pg_', srsubid, '_sync_', srrelid, '_', ctl.system_identifier) AS slot_name
                   FROM pg_control_system() ctl, pg_subscription_rel r, pg_subscription s
                   WHERE r.srsubstate = 'f' AND s.oid = r.srsubid AND s.subfailover
               );
     slots
    -------
     {'pg_16394_sync_16385_7394666715149055164'}
    (1 row)
    
  3. Check that the logical replication slots identified above exist on the standby server and are ready for failover. 《機械翻訳》上記のチェックスロットがスタンバイサーバに存在し、フェイルオーバーの準備ができているロジカルレプリケーション。

    test_standby=# SELECT slot_name, (synced AND NOT temporary AND NOT conflicting) AS failover_ready
                   FROM pg_replication_slots
                   WHERE slot_name IN
                       ('sub1','sub2','sub3', 'pg_16394_sync_16385_7394666715149055164');
      slot_name                                 | failover_ready
    --------------------------------------------+----------------
      sub1                                      | t
      sub2                                      | t
      sub3                                      | t
      pg_16394_sync_16385_7394666715149055164   | t
    (4 rows)
    

If all the slots are present on the standby server and the result (<literal>failover_ready</literal>) of the above SQL query is true, then existing subscriptions can continue subscribing to publications now on the new primary server. 《機械翻訳》すべてのスロットがスタンバイサーバに存在し、上記のSQLクエリの結果(failover_ready)が真である場合、既存のサブスクリプションは、新しいプライマリサーバで現在のパブリケーションのサブスクリプションを継続できます。