すべてのプロダクト
Search
ドキュメントセンター

Tair (Redis® OSS-Compatible):クラスタープロキシモードにおけるコネクションプールのベストプラクティス

最終更新日:Jun 03, 2026

クラスタープロキシモードのコネクションプールは、プロキシから DB への接続を再利用することで、ステートフルコマンドによるバックエンド接続の枯渇を防ぎ、Tair (Redis OSS-compatible) インスタンスの安定性を確保します。

シナリオ

クラウドネイティブのクラスタープロキシモードでは、標準コマンドは共有接続を使用するため、クライアント接続が増加してもバックエンドの DB 接続には影響しません。しかし、特定のステートフルコマンドは、プロキシからデータノードへの接続を共有モードから専用モードに切り替えます。

専用モードでは、各クライアント接続がデータノード上に専用の接続を作成します。高い同時実行性の場合、データノードの接続数はクライアント接続数に比例して増加し、max number of clients reached エラーを引き起こし、サービス中断の原因となる可能性があります。

シャードを追加してスケールアウトしても、WATCH やブロッキングコマンドによって引き起こされるシャードごとの接続枯渇は解決されません。

専用モードをトリガーするコマンド:

  • トランザクションコマンド: MULTI/EXEC (WATCH の後)

  • ブロッキングコマンドBLPOPBRPOPBRPOPLPUSHXREAD ... BLOCK ...

コネクションプールは、専用モードのプロキシからデータノードへの接続を再利用することで、データノードの接続数を削減し、接続制限の超過による障害を防ぎます。

アーキテクチャ

各プロキシの子インスタンスは独立したコネクションプールを実行し、各データノードに対して専用のプールを維持します。

image

例:

コネクションプールがない場合、各クライアントとプロキシの接続は、バックエンドの各シャードに対して個別の接続を確立します。たとえば、10 個のクライアント接続が 5 つのシャードにアクセスすると、10 × 5 = 50 個の接続が作成されます。

コネクションプールを有効にすると、プロキシは各シャードに対して限定されたプールを維持し、クライアントリクエストはプールされた接続を再利用します。たとえば、同じ 10 個のクライアント接続でも、シャードあたり 2 つのプールされた接続のみが必要となり、合計で 2 × 5 = 10 個の接続で済みます。

ワークフロー:

  1. クライアントが専用モードのリクエストを開始すると、プロキシはターゲットシャードのコネクションプールからアイドル接続を取得します。

  2. プールヒット: アイドル接続がリクエストのためにクライアント接続にアタッチされます。完了後、接続はデタッチされ、再利用のためにプールに戻されます。

  3. プールミス: プロキシは新しい接続を作成します。リクエスト完了後:

    1. プールが上限 (private_conn_pool_max_idle_per_db) に達していない場合、接続はプールに追加されます。

    2. プールが満杯の場合、接続はすぐに解放されます (短命な接続モード)。

これにより、接続管理のオーバーヘッドが削減され、データベースのリソース消費が減り、安定性とスループットが向上します。

要件

インスタンスは以下の要件を満たす必要があります:

コネクションプールの有効化

インスタンスパラメーターを変更することで、コネクションプールを有効にします。これはホットアップデートであり、再起動は不要で、実行中のサービスに影響を与えません。

  1. インスタンスページに移動します。上部メニューでリージョンを選択します。次に、対象インスタンスの ID をクリックします。

  2. 左側メニューで、[パラメータ設定] をクリックします。

  3. private_conn_pool_enabled を見つけ、[操作] 列の [変更] をクリックします。

  4. ダイアログボックスで、値を 1 に設定し、[OK] をクリックします。

検証するには、Cloud Monitor コンソール[インフラストラクチャモニタリング] にある [プロキシからDBへの接続] メトリックを確認し、機能の有効化前後のデータを比較してください。

設定とチューニング

設定名

説明

デフォルト値

値の範囲

private_conn_pool_enabled

接続プーリングを有効にするか無効にするかを指定します。1: 有効。0: 無効。

0

[0|1]

private_conn_idle_time_sec

プール内のアイドル接続の TTL (秒単位)。このしきい値を超えてアイドル状態の接続はクローズされます。 0: 即座にクローズされます。

60

[0-4294967295]

private_conn_pool_max_idle_per_db

各プロキシノードがデータノードごとに維持するアイドル接続の最大数。この制限に達すると、解放された接続はプールに戻されずにクローズされます。

1000

[0-4294967295]

private_conn_pool_min_idle_per_db

各プロキシノードがデータノードごとに維持するアイドル接続の最小数。このしきい値を下回る接続は、private_conn_idle_time_sec を超えても保持されます。

0

[0-4294967295]

チューニングの推奨事項

  • 一般的なシナリオ: デフォルト値を使用します。ほとんどのワークロードに適しています。

  • 高い同時実行性、短命なトランザクションのシナリオ (フラッシュセールなど)

    • 特徴: 頻繁な借用/返却サイクルを伴う短命な接続。

    • 推奨: ピーク時の同時リクエストをカバーできる十分な値に private_conn_pool_max_idle_per_db を設定し、再利用を最大化して短命な接続を回避します。オプションで private_conn_idle_time_sec を低く設定すると、オフピーク時にリソースをより速く解放できます。

  • 長時間ブロッキングするサービスのシナリオ (キューコンシューマーなど)

    • 特徴: 長時間保持され、めったにプールに返却されない接続。

    • 推奨: 同時コンシューマー数に合わせて private_conn_pool_max_idle_per_db を増やします。平均的な同時接続数よりわずかに高く private_conn_pool_min_idle_per_db を設定し、接続をプリフェッチして新しいコンシューマーのレイテンシを削減します。

  • メモリに制約がある、または小規模なインスタンスのシナリオ

    • 特徴: 厳格なメモリ予算。

    • 推奨: private_conn_pool_max_idle_per_dbprivate_conn_pool_min_idle_per_db の値を下げます。これにより、データノード上の再利用効率をある程度犠牲にして、メモリ消費量を削減できます。

注意事項

  • private_conn_pool_min_idle_per_db に適切な値を設定

    各アイドル接続はバックエンド DB ノードのメモリを消費します。複数のシャードとプロキシノードがある場合、private_conn_pool_min_idle_per_db の値が高いと、過剰なメモリ使用量を引き起こす可能性があります。

  • 不要な DB コンテキストの切り替えを避ける

    クライアントが異なる DB インデックスにアクセスするためにプールされた接続を再利用すると、プロキシはコンテキストを切り替えるために SELECT コマンドを実行し、DB の負荷とレイテンシーが増加します。アプリケーションは、単一の DB インデックス (通常は DB 0) を使用するように設計してください。

  • パブリッシュ/サブスクライブコマンドには適用されない

    コネクションプールは SUBSCRIBE および PSUBSCRIBE コマンドには適用されません。これらのコマンドは接続を永続的に占有し、プールによって管理されません。

関連ドキュメント