Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/
データベース マニュアル
/ /

Ingress 接続確立レート制限の設定

この手順では、 MongoDBで ingressConnectionEstablishmentRateLimiterEnabled パラメータを使用してレート制限を構成する方法について説明します。レート制限は、システムの安定性とパフォーマンスに影響可能性のある接続ストームから配置を保護するのに役立ちます。

この手順を開始する前に、次の要件を満たしていることを確認してください。

  • MongoDBデプロイに対する管理特権がある

  • システムの接続負荷のパターンと要件を理解している

  • ドライバーのconnectTimeoutMS設定がわかっている

1

レート制限の使用を開始するには、まず ingressConnectionEstablishmentRateLimiterEnabled パラメータを true に設定して有効にします。

db.adminCommand( {
setParameter: 1,
ingressConnectionEstablishmentRateLimiterEnabled: true
} )
2

ingressConnectionEstablishmentRatePerSec を、スループットに悪影響を与えることなくクラスターが処理できる最大レートに設定します。これは、他のワークロード動化によって変化しない固定数である必要があります。

db.adminCommand( {
setParameter: 1,
ingressConnectionEstablishmentRatePerSec: 20
} )
3

ingressConnectionEstablishmentMaxQueueDepth 次の式に従って設定します。

maxQueueDepth < (establishmentRatePerSec / 1000) * (connectTimeoutMs - ((averageTimeToCompletedHelloMicros-averageTimeQueuedMicros)*1000))

この式により、次のことが保証されます。

  • ドライバーが接続を中断した時点を過ぎて、新しい接続試行がキューに残ることはありません。

  • タイムアウト エラーが発生して失敗するのではなく、ほとんどの hello+auth の試行は成功します。

averageTimeQueuedMicros メトリクスは約 (maxQueueDepth / establishRatePerSec) * 1e6 に等しいため、ingressConnectionEstablishmentMaxQueueDepth を調整するのに役立ちます。

重要

キューのサイズを調整するときは、短いキュー サイズよりも、長いキュー サイズを優先してください。接続が閉じられたために接続プールをクリアするドライバーは、キューに長時間残り、タイムアウトした接続よりもリスクが大きくなります。

4

接続が失敗した場合は、ドライバーの maxPoolSizemaxConnecting 設定を減らしてください。これらの設定を減らすと、ドライバーは接続を再利用する代わりにレイテンシが増加 した期間中にサーバーへの接続を再利用するため、接続ストームが発生する可能性があります。

注意

maxPoolSizemaxConnecting を減らすと、クエリがドライバーレイヤーでプールに接続を返されるまで待機する時間が長くなる可能性があります。これらの設定を小さくすると、可用性が維持されますが、負荷が急増したときのレイテンシが増加しコスト。

以下のメトリクスをモニターして、レートリミットが正しく設定されていることを確認します。

拒否された接続の数が増加している場合は、次の点を考慮してください。

  1. この負荷を処理するのに十分な CPU リソースがあると思われる場合は、ingressConnectionEstablishmentRatePerSec を増やします。

  2. 式に基づいて ingressConnectionEstablishmentMaxQueueDepth を調整します。

  3. ドライバー接続プールの設定を確認します。

項目一覧