Legacy synchronous replication using PGD#
Postgresは physical streamingreplication を提供します
PSR、これは一方向ですが synchronousvariant を提供します。
下位互換性を維持するために、PGDはsynchronous_commit
およびsynchronous_standby_names
を使用した同期レプリケーションの構成を引き続きサポートしています。
How Quorum Commit works または 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) 代わりにクォーラムコミットの使用を検討します。
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 (...) のコミットスコープと同等です。この選択により、マジョリティに関する推論が簡単になり、起点ノードがトランザクションの耐久性と可視性にも貢献することを反映しています。