Lag Control¶
BDRオリジンノード上のデータベースアプリケーションのデータスループットは、コミットされたデータをダウンストリームの同等なに安全にレプリケートできるレートを超える場合があります。この不一致が高可用性アプリケーションで一定期間を超えて、または慢性的に続く場合、ディザリカバリまたはビジネス継続性計画に関連する組織の目標が満たされない可能性があります。
Replication Lag Control(RLC)機能は、動的レート制限デバイスを使用してこの不均衡を調整し、 BDRグループノード間のデータフローがこれらの組織の目標に準拠するように設計されています。これは、 BDRノード間のレプリケーションラグのエクステントを制御することによって行います。
これらの目的の一部は次のとおりです。
1)目標復旧時点(RPC)は、通常時間として表される計画外のイベントが原因で失われる可能性のあるデータの最大量を指定します。レプリケートされないシステムでは、RPCを使用してバックアップ間隔を設定し、コミットされたデータが障害によって失われるリスクを制限します。レプリケートされたシステムの場合、RPCは、1つ以上の同等なに安全に適用されていないコミットされたデータの許容量を判断します。
2)リソース制約目標(RCO)は、有限のストレージコンストレインがあることを認識しています。このストレージには、データベースファイル、WAL、およびオペレーションを続行するために必要な一時ファイルまたは中間ファイルが含まれます。レプリケートされたシステムの場合、遅延が増加すると、これらのストレージリソースに対する要求も増加します。
3)Group Elasticity Objective(GEO)は、ノードが同等なに許容できるように保存できないクリップで新しいデータを発信していないことを保証します。その場合、その条件の検出は、データベースノードの数を拡張する決定の1つのメトリックとして使用できます。同様に、その状態が緩和すると、データベースノードの数を縮小するという決定に影響を与える可能性があります。
ラグ制御は、クライアント接続が READ WRITE トランザクションをコミットレートを制御することにより、レプリケーションの遅延を管理します。レプリケーションラグは、達成する目的に応じて、ラグタイムまたはラグサイズとして測定されます。トランザクションのコミットレートは、構成されたBDRコミット遅延時間を使用して調整されます。
要件¶
ラグ制御の使用を開始するには、次の手順を実行します。
1)すべてのデータベースアプリケーションで許容できる最大のコミット遅延時間bdr.lag_control_max_commit_delay
を決定します。
2)使用するラグメジャーを決定します。ラグサイズbdr.lag_control_max_lag_size
またはラグタイムbdr.lag_control_max_lag_time
のいずれかを選択する必要があります。
3)ノードの最小許容数として、ステップ2)で選択したラグメジャーを満たす必要があるグループbdr.lag_control_min_conforming_nodes
内のBDRノードの数を決定します。
構成¶
ラグ制御は、 postgresql.conf
構成パラメーターを使用してグループ内の各BDRノードで構成されます。ラグ制御を有効にするには、
bdr.lag_control_max_commit_delay と、
bdr.lag_control_max_lag_size
またはbdr.lag_control_max_lag_time
のいずれかをゼロ以外の正の値に設定する必要があります。
bdr.lag_control_max_commit_delay
は、必要に応じてサブミリ秒設定を含む小数パートを使用したミリ秒の指定を許可し、推奨します。
デフォルトでは、 bdr.lag_control_min_conforming_nodes
は1に設定されています。完全なリストについては、
ラグ制御 を参照してください
概要¶
ラグ制御は、クライアント接続レベルで動作する動的な TPSレート制限メカニズムです。構成されたラグ制御のコンストレインを満たしながら、できるだけ目立たないように設計されています。これは、十分なBDRノードが構成されたラグメジャーしきい値を下回るのに十分な速度で変更をレプリケートできる場合、 BDRランタイムのコミット遅延は0ミリ秒に固定されることを意味します。
これに当てはまらない場合、 BDRランタイムのコミット遅延は必要に応じて最小限に調整されますが、準拠ノードの数が最小しきい値に戻るまでそれ以上にはなりません。
最小ノードしきい値に達した後でも、ラグ制御はBDRランタイムのコミット遅延をゼロに戻そドライブとし続けます。 BDRコミット遅延は、ほとんどの場合、平衡レベルで上下しますが、データスループットまたはラグ適用率が向上すると、コミット遅延は減少します。
BDRコミット遅延は、コミット後の遅延です。これは、トランザクションがコミットされた後、トランザクションによってロックまたは取得されたすべてのPostgresリソースが解放された後に発生します。したがって、遅延は、同時アクティブなトランザクションがその値を監視または変更したり、そのリソースを取得したりすることを妨げません。
Postgres拡張機能で管理される外部リソースについては、同じ保証はできません。拡張機能の依存関係に関係なく、
BDR拡張機能がpostgresql.conf
の拡張機能ベースのリソースマネージャーの前にリストされている場合、同じことが保証されます。
厳密に言えば、 BDRコミット遅延はトランザクションごとの遅延ではありません。これは、特定のクライアント接続のトランザクションのストリームでのコミット遅延の平均値です。この手法により、コミットの遅延と値のきめの細かい調整が、OSスケジューラの粗い粒度、クロック割り込み、システムロードによるバリエーションをエスケープます。また、 BDRランタイムのコミット遅延を可能な限り最小の期間のマイクロ秒以内に解決して、ラグメジャーのしきい値を維持できます。
最後に、 BDRのコミット遅延はPostgresのコミット遅延と混同しないでください。それらは無関係であり、異なる機能を実行するため、互いに置き換えないでください。
取引申請¶
BDRコミット遅延は、ユーザアプリケーションのデータを変更するすべてのREAD WRITEトランザクションに適用されます。これは、宣言された READ WRITE トランザクションを含む、データを変更しないトランザクションはコミット遅延から免除されることを意味します。
非同期トランザクションコミットは、 BDRコミット遅延も実行します。これは直観に反するように見えるかもしれませんが、非同期コミットは、そのパフォーマンスのおかげで、レプリケーションラグの最大の原因の1つになる可能性があります。
PostgresとBDRの補助プロセスは、トランザクションコミットで遅延しません。特に、 BDRライターは、ローカルノードでリモートトランザクションを適用するときにコミット遅延を実行しません。 BDRライターは送信レプリケーションのラグに何も寄与せず、トランザクションのコミットが遅延によって調整されないことにより、受信レプリケーションのラグを最も削減できるため、これはデザインです。
制限¶
最大コミット遅延bdr.lag_control_max_commit_delay
は、ハードリミットを表す上限値です。これは、いかなる状況においても、コミット遅延が設定された値を超えないことを意味します。逆に、最大ラグメジャーbdr.lag_control_max_lag_size
およびbdr.lag_control_max_lag_time
は、超えることができるソフト制限です。最大コミット遅延に達した場合、遅延の継続的な増加を防ぐための遅延メジャーに対する追加のバックプレッシャーはありません。
BDRレプリケーションセットを変更しないオリジントランザクションをコミット遅延から免除する方法はありません。これらのトランザクションでは、最大トランザクション遅延をゼロ(0)に設定すると役立つ場合があります。
注意事項¶
アプリケーション TPS は、レプリケーションの遅延に影響を与える可能性のある多くの要因の 1 つです。その他の要因には、 BDRコミット遅延の効果が低下する可能性のあるトランザクションの平均サイズが含まれます。特に、バルクロード操作ではレプリケーションの遅延が増加する可能性があり、最大許容遅延未満ではあるが、通常のアプリケーションで合理的に予想されるレベルを超えてBDRランタイムのコミット遅延が増加する可能性があります。
同様に、OLTP要件が非常に高く、データ変更が少ないアプリケーションは、許容可能なBDRコミット遅延設定によって過度に制限される可能性があります。
これらの場合、 SET [SESSION|LOCAL]
コマンドを使用して、これらのアプリケーションのラグ制御設定をカスタム構成したり、それらのアプリケーションを変更したりすると便利な場合があります。例、バルクロード操作は、トランザクションスナップショット期間とWAL保持サイズを制限したり、バルクロードが失敗した場合のリスタートポイントを確立したりするために、マルチプルの小さなトランザクションに分割される場合があります。ラグ制御に従うと、これらのトランザクションのコミットは、非常に長いBDRコミット遅延をスケジュールして、以前の部分的なバルクロードによって発生した遅延を消化できます。
組織目標の達成¶
前述の目標リストの例:
RPOは、適切な最大ラグタイムを設定することで満たすことができます。
RCOは、適切な最大ラグサイズを設定することで満たすことができます。
GEOは、 BDRランタイムのコミット遅延とBDRランタイムの測定値をモニタリングすることで満たすことができます。
前述のように、 BDRランタイムの最大コミット遅延がBDRで構成されたコミット遅延制限に固定され、ラグメジャーの一貫性がBDRで構成された最大レベルを超える場合、それはBDRグループ拡張のマーカーになる可能性があります。