Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Redisクラスターを構成するためのベストプラクティスは何ですか


Redisクラスターを構成するためのベストプラクティスは何ですか


Redis Clusterは、Redis展開をスケーリングするための一般的なソリューションであり、複数のノードにわたってより高い可用性、フォールトトレランス、およびデータシャードを実現します。 Redisクラスターの適切な構成には、最適なパフォーマンス、信頼性、および管理性を確保するいくつかのベストプラクティスが含まれます。

###クラスターアーキテクチャとノード構成

Redisクラスターには、確実に動作するために少なくとも3つのマスターノードが必要です。理想的には、生産クラスターには最低6つのノードが含まれ、各マスターには1つ以上のレプリカが含まれている必要があります。このセットアップにより、高可用性が保証され、マスターノードが失敗した場合に備えて自動フェールオーバーが可能になります。各ノードはクラスターモードで実行され、以下を含む特定の構成を有効にする必要があります。

- `Cluster-Exabled Yes`各Redisインスタンスでクラスターモードを有効にします。
- `cluster-config-file`クラスターノード状態が保存されているファイルを指定します(例:` nodes.conf`)。
- 「クラスターノードタイムアウト」の最大時間を定義すると、失敗と見なされる前にノードが到達できない場合があります(一般に5000〜15000ミリ秒に設定されています)。

`cluster-config-file`はRedisによって自動的に管理されており、ノードID、マッピング、スロットの所有権などの重要な状態情報を維持するため、手動で編集してはなりません。各ノードは、スタートアップで一意のノードIDを割り当てます。これは、IPやポートが変更されたとしても、生涯にわたって持続します。

###ハードウェアとネットワークのセットアップ

単一の障害点を避けるために、ノードを個別の物理マシンまたは仮想マシンに展開する必要があります。ノード間のネットワーク接続では、クライアント通信ポート(通常はTCP 6379または使用中のサービスポート)とクラスターバスポート(2番目のポートは通常TCPサービスポート + 10000、たとえば16379)の両方を使用する必要があります。

ネットワークインターフェイスとファイアウォールを慎重に構成して、ノード間のこのトラフィックとオプションでクライアントとクラスターノード間でこのトラフィックを許可します。すべてのインターフェイスにバインドするのではなく、「バインド」指令を特定のプライベートIPに設定すると、セキュリティが強化されます。

###持続性とデータの耐久性

必要なデータの耐久性とパフォーマンストレードオフに応じて、RDBスナップショットやAOF(ファイルのみを追加)などの永続性メカニズムを有効にします。 AOFは、すべての書き込み操作を記録することにより、より良い耐久性を提供しますが、レイテンシとIOオーバーヘッドを追加する場合があります。 RDBスナップショットとAOFを組み合わせることで、パフォーマンスと耐久性のバランスをとることができます。

`appendonly yes`指令は、AOFモードを有効にします。これらの設定は、ワークロードパターンと許容可能なデータ損失ウィンドウに従って慎重に調整する必要があります。

###メモリ管理と立ち退きポリシー

`maxmemory`設定を構成して、ノードで利用可能なメモリにRedisが適合するようにします。 「allkeys-lru」などの「maxmemory-policy」を使用して適切な立ち退きポリシーを選択して、メモリ制限に到達したときにすべてのキーで最近使用されていないアルゴリズムを使用します。メモリ使用量とヒット/ミス比の一貫した監視が重要です。

Redisクラスターは、データセットが各ノードのメモリに完全に収まる場合に最適に機能します。過度の交換やメモリの過剰コミットメントを避けてください。

###スロット管理とデータ分布

クラスターは、キースペースをすべてのマスターノードに分布する16,384ハッシュスロットに分割します。クラスターを作成するときは、すべてのスロットがマスターノードで覆われていることを確認します。クライアントは、ハッシュスロット計算に基づいて正しいノードにクエリをルーティングするためにクラスターを意識する必要があります。

さまざまなスロットにマッピングされた複数のキーを含む操作は避けてください。これらには、制限または効率が低いクロススロットコマンドが必要です。

適切なスロット割り当てとレプリカ割り当てを備えた「Redis-Cli-Cluster Create」などのツールを使用します。

###クラスター認識のクライアント構成

クライアントライブラリを構成して、Redisクラスタートポロジの変更を優雅に処理します。多くのクライアントライブラリは、スロットが故障したり、変更したりするときに、クラスターノードの自動発見や再構成など、クラスターサポートを提供します。これにより、クライアントのエラーが防止され、ノードフェールオーバーまたはスケーリング操作中の信頼性が向上します。

クライアントは、移動したときに再試行するか、リダイレクトを尋ね、クラスター状態の最新のビューを維持するように構成する必要があります。

###セキュリティ上の考慮事項

パスワード認証を有効にして(「要求パス」ディレクティブ)、ファイアウォールルールを介してネットワークアクセスを制限し、「バインド」構成を介して露出したインターフェイスを制限することにより、クラスターノードをセキュアします。可能であれば、TLS暗号化を使用して、輸送中のデータを保護します。

クラスターモードでRedisを実行するときに保護されたモードを無効にしますが、ネットワーク構成により、信頼できないクライアントからクラスターを分離するようにします。

###監視とメンテナンス

ノードの可用性、レイテンシ、メモリ使用量、複製遅延、クラスター状態の変更など、クラスターの健康の包括的な監視を実装します。 Redis Sentinel、サードパーティの監視プラットフォーム、クラウドプロバイダーソリューションなどのツールは、運用戦略の一部である必要があります。

フェイルオーバーメカニズムを定期的にテストし、制御されたノードの再起動またはスケーリングエクササイズを実行して、クラスターの回復力を確認します。

###パフォーマンスチューニング

ワークロードの詳細に基づいて、Redisとクラスター構成をチューニングします。

- ブロッキングコマンドを最小限に抑え、パイプライニングまたはLUAスクリプトを使用してスループットを最適化します。
- ネットワークレイテンシ特性に従って「クラスターノードタイムアウト」を調整して、誤ったフェイルオーバーを回避します。
- 一貫したハッシュとスマートキーの命名を使用して、スロット分布を最適化します。
- 大きなキーや値を避け、大きなオブジェクトを小さなチャンクに壊すことを検討してください。
- ノードを追加または削除し、スロットを再調整することにより、Redis Clusterのネイティブメカニズムを水平方向にスケーリングするためのネイティブメカニズムを利用します。

###バックアップとリカバリ

クラスターのセットアップに沿ったデザインバックアップ戦略。マスターノードまたはレプリカからの定期的なRDBスナップショットを使用して、バックアップを外部から保存します。適切なスロットとノード状態の同期なしに、ライブクラスターのバックアップを直接復元しないでください。

回復のために、保存された構成とバックアップからクラスターを再構築するためにRedisが推奨する手順を使用します。

### まとめ

Redisクラスター構成カバーのベストプラクティス:

- フェールオーバーのためにレプリカを使用して少なくとも3つのマスターノードをセットアップします。
- 適切なクラスター関連の構成ディレクティブ( `cluster-enabled`、` cluster-config-file`、 `cluster-node-timeout」を確保します。
- クライアントおよびクラスターバス通信用の正しいネットワーク設定を使用して、適切なハードウェアにノードを展開します。
- ワークロードの要求に合わせて、持続性とチューニングメモリと立ち退きポリシーを有効にします。
- ハッシュスロットを効果的に管理し、クライアントがクラスターを認識していることを確認します。
- 認証とネットワークコントロールでクラスターを固定します。
- クラスターの健康とパフォーマンスを定期的に監視します。
- バックアップ、回復、およびスケーリング操作の計画慎重に。

これらのベストプラクティスを適用することで、生産ワークロードに適した堅牢でスケーラブルで非常に利用可能なRedisクラスター環境が保証されます。上記のトピックには、Redisクラスターの展開に関する重要な運用、建築、およびセキュリティの考慮事項が含まれます。