Using predefined scopes#

クラスターが単一のノードグループを使用する場合、事前定義されたスコープで開始します。 PGDは、最も一般的なパターンをカバーする4つを同梱し、構成なしで使用できるため、開始するために完全なポリシー言語を理解する必要はありません。事前定義された各スコープは、単一のノードグループに適用されます。異なる要件を持つ複数のグループにまたがるクラスターの場合、代わりに Fine-tuning with custom scopes を使用します。

  • ``local protect`` は、低遅延が優先され、ノード障害による一部のデータ損失が許容されるワークロードに適しています。ローカルノードがトランザクションを持続するとすぐにコミットし、リモート確認は必要ありません。レプリケーションが追いつく前にそのノードに障害が発生すると、そのノードでコミットされたが、ピアにまだレプリケートされていないトランザクションは完全に失われます。他のノードにはコピーがあります。

  • ``lag protect`` は、非同期パフォーマンスを必要とするが、制限されたリカバリポイントを必要とする高スループットワークロードに適しています。レプリケーションラグがしきい値デフォルトで30秒以下にある間、非同期コミットします。遅延が大きくなりすぎると、レプリケーションが追いつくまでコミットの速度が低下します。遅延がしきい値を超えたときにブロックをコミットします。

  • ``majority protect`` は、強力な耐久性保証を必要とする実稼働書き込みワークロードに適しています。コミットが返される前に、オリジングループ内のノードの大部分が確認するのを待機します。コミットのレイテンシーは、非同期レプリケーションの場合よりも長くなります。

  • ``adaptive protect`` は、ネットワークの中断が一般的で、書き込みをブロックする余裕がないクロスサイト展開に適しています。 majority protect のようなマジョリティの確認を待機しますが、マジョリティが10秒以内に到達できない場合、自動的に非同期に低下します。マジョリティが再び利用可能になり次第、厳密な動作が再開されます。デグレード中に回復ポイントが一時的に弱まります。

事前定義されたスコープをノードグループのデフォルトとして設定します。

SELECT bdr.alter_node_group_option(
    node_group_name := top_group,
    config_key := default_commit_scope,
    config_value := majority protect
);

事前定義されたスコープを単一のトランザクションに適用します。

BEGIN;
SET LOCAL bdr.commit_scope = majority protect;
- - ... your writes ...
COMMIT;

そのグループ内のすべてのトランザクションが同じ耐久性保証を必要とし、アプリケーションコードに依存して一貫して設定したくない場合、グループレベルのデフォルトを設定します。 SET LOCAL は、別のレベルを必要とするトランザクションに使用します。たとえば、個々の支払レコードがマジョリティの確認を必要とする一方で、非同期を許容できる一括インポート。トランザクションレベルの設定は常にグループのデフォルトをオーバーライドします。

完全な定義については、 Predefined commit scopes を参照してください。

シナリオの例 DRグループを使用したプライマリアクティブグループ#

Primary active group, DR group 展開では、プライマリサイトに2つのノード書き込みリーダーとセカンドノードがあり、DRサイト内の単一のDRノードがプライマリサイトの完全な損失によるディザスターリカバリーに使用されます。

この設定のレプリケーション目標は次のとおりです。

  • プライマリグループ内 2番目のプライマリノードからの同期確認、到達不能な場合は10秒後に非同期に低下します

  • DRサイトへ 非同期レプリケーションのため、トランザクション遅延は影響を受けませんが、持続的なプライマリサイトの停止に対してDRノードを適度に最新の状態に保ちます

プライマリグループのデフォルトスコープとしてadaptive protect を適用します。

SELECT bdr.alter_node_group_option(
    node_group_name := primary_group,
    config_key := default_commit_scope,
    config_value := adaptive protect
);

コミットスコープはプライマリグループにのみ適用されます。 DRサイトへの非同期レプリケーションは暗黙的です。 DRノードは、個別に構成されたポリシーを介してではなく、プライマリグループのレプリケーションの結果として変更を受信します。

スコープを適用した後、次のことが予想されます。

  • 書き込みリーダーからのコミットは、2番目のプライマリノードが受信を確認した後にのみ返されます。

  • 2番目のプライマリノードが10秒間到達不能である場合、書き込みはブロックせずに続行されます。スコープは自動的に非同期に低下します。

  • 2番目のプライマリノードが再び到達可能になると、スコープはコミットが返される前に確認が必要な状態に戻ります。手動介入は必要ありません。

  • DRノードは変更を非同期で受信し、コミットを遅延しません。

  • フェイルオーバー時に、PGDは書き込みリーダーシップを自動的に再割り当てします。スコープの再構成は必要ありません。