この手順では、 MongoDBで ingressConnectionEstablishmentRateLimiterEnabled
パラメータを使用してレート制限を構成する方法について説明します。レート制限は、システムの安定性とパフォーマンスに影響可能性のある接続ストームから配置を保護するのに役立ちます。
始める前に
この手順を開始する前に、次の要件を満たしていることを確認してください。
MongoDBデプロイに対する管理特権がある
システムの接続負荷のパターンと要件を理解している
ドライバーの
connectTimeoutMS
設定がわかっている
手順
レート制限を有効にする
レート制限の使用を開始するには、まず ingressConnectionEstablishmentRateLimiterEnabled
パラメータを true
に設定して有効にします。
db.adminCommand( { setParameter: 1, ingressConnectionEstablishmentRateLimiterEnabled: true } )
接続確立率の設定
ingressConnectionEstablishmentRatePerSec
を、スループットに悪影響を与えることなくクラスターが処理できる最大レートに設定します。これは、他のワークロード動化によって変化しない固定数である必要があります。
db.adminCommand( { setParameter: 1, ingressConnectionEstablishmentRatePerSec: 20 } )
接続キューの深さを設定する
ingressConnectionEstablishmentMaxQueueDepth
次の式に従って設定します。
maxQueueDepth < (establishmentRatePerSec / 1000) * (connectTimeoutMs - ((averageTimeToCompletedHelloMicros-averageTimeQueuedMicros)*1000))
この式により、次のことが保証されます。
ドライバーが接続を中断した時点を過ぎて、新しい接続試行がキューに残ることはありません。
タイムアウト エラーが発生して失敗するのではなく、ほとんどの
hello+auth
の試行は成功します。
averageTimeQueuedMicros
メトリクスは約 (maxQueueDepth / establishRatePerSec) * 1e6
に等しいため、ingressConnectionEstablishmentMaxQueueDepth
を調整するのに役立ちます。
重要
キューのサイズを調整するときは、短いキュー サイズよりも、長いキュー サイズを優先してください。接続が閉じられたために接続プールをクリアするドライバーは、キューに長時間残り、タイムアウトした接続よりもリスクが大きくなります。
ドライバー設定を構成する
接続が失敗した場合は、ドライバーの maxPoolSize
と maxConnecting
設定を減らしてください。これらの設定を減らすと、ドライバーは接続を再利用する代わりにレイテンシが増加 した期間中にサーバーへの接続を再利用するため、接続ストームが発生する可能性があります。
注意
maxPoolSize
と maxConnecting
を減らすと、クエリがドライバーレイヤーでプールに接続を返されるまで待機する時間が長くなる可能性があります。これらの設定を小さくすると、可用性が維持されますが、負荷が急増したときのレイテンシが増加しコスト。
モニタリングとトラブルシューティング
以下のメトリクスをモニターして、レートリミットが正しく設定されていることを確認します。
拒否された接続の数が増加している場合は、次の点を考慮してください。
この負荷を処理するのに十分な CPU リソースがあると思われる場合は、
ingressConnectionEstablishmentRatePerSec
を増やします。式に基づいて
ingressConnectionEstablishmentMaxQueueDepth
を調整します。ドライバー接続プールの設定を確認します。