Legacy synchronous replication using PGD#

Postgresは physical streaming replication を提供します

PSR、これは一方向ですが synchronous variant を提供します。

下位互換性を維持するために、PGDはsynchronous_commit およびsynchronous_standby_names を使用した同期レプリケーションの構成を引き続きサポートしています。

グループコミット または PGD Synchronous Commit の使用を検討します

代わりに。

PGDレプリケーションオプションとは異なり、PSR同期は最初に持続し、コミットレコードのWALフラッシュの後にレプリケートします。

使用法#

PGDを使用した同期レプリケーションを有効にするには、関連するPGDピアノードのアプリケーション名をsynchronous_standby_names に追加する必要があります。 FIRST x またはANY x を使用すると、非PGDスタンバイノードの要件と競合しない場合、ある程度の柔軟性が提供されます。

追加したら、 synchronous_commit を使用してトランザクションごとの同期レベルを構成できます。デフォルトはon です。この設定は、アプリケーション名をsynchronous_standby_names に追加することにより、既に同期レプリケーションが有効になっていることを意味します。 synchronous_commit をlocal またはoff に設定すると、同期レプリケーションがオフになります。

PGDは永続化する前にトランザクションを適用するため、値on およびremote_apply は論理レプリケーションでは等価です。

比較#

次の表は、トランザクションが発行されたオリジンノードからCOMMIT確認を受信した後、クライアントがレプリケートされたピアノードから期待できることをまとめています。 Mode列は、バリアントに応じて異なる意味を持ちます。 PSRおよびPGDを使用した古い同期レプリケーションの場合、synchronous_commit 設定を参照します。

Variant

Mode

Received

Visible

Durable

PSR Async

off (default)

no

no

no

PSR Sync

remote_write (2)

yes

no

no (3)

PSR Sync

on (2)

yes

no

yes

PSR Sync

remote_apply (2)

yes

yes

yes

PGD Legacy Sync (1)

remote_write (2)

yes

no

no

PGD Legacy Sync (1)

on (2)

yes

yes

yes

PGD Legacy Sync (1)

remote_apply (2)

yes

yes

yes

(1)代わりにグループコミットの使用を検討します。

    1. synchronous_replication_availability をasync' に設定してローカルモードに切り替えない限り、許可されている場合。それ以外の場合、非同期PGDデフォルトの値が適用されます。

(3) OSに書き込まれ、OSが実行されたままでPostgresのみがクラッシュした場合に持続します。

Postgres構成パラメーター#

次の表は、デフォルト以外の値に設定する必要がある構成設定reqと、オプショナルですが特定のバリアントに影響を与える構成設定の概要を提供します。

Setting (GUC)

Group Commit

Lag Control

PSR

Legacy Sync

synchronous_standby_names

n/a

n/a

req

req

synchronous_commit

n/a

n/a

opt

opt

synchronous_replication_availability

n/a

n/a

opt

opt

コミットスコープへの移行#

synchronous_commit およびsynchronous_standby_names とは無関係に、PGDのグループコミット機能を構成します。代わりに、bdr.commit_scope GUCを使用すると、トランザクションごとにスコープを選択できます。また、各ノードでsynchronous_standby_names を個別に構成するのではなく、グループコミットはグローバルに同期したコミットスコープを使用します。

注釈

synchronous_standby_names およびコミットスコープの文法は似ていますが、前者はオリジンノードを考慮していませんが、後者は考慮します。したがって、たとえば synchronous_standby_names = 'ANY 1 (..)' は、ANY 2 (...) のコミットスコープと同等です。この選択により、マジョリティに関する推論が簡単になり、起点ノードがトランザクションの耐久性と可視性にも貢献することを反映しています。 !!!