Redisは、主にRedisクラスターの展開、ステートフルセットの利用、Kubernetes-Nativeのスケーリングおよびオーケストレーション機能を活用することにより、Kubernetes環境での水平スケーリングをサポートします。 RedisがKubernetesで水平スケーリングをどのように達成するかについての詳細な説明を次に示します。
水平スケーリング用のRedisクラスタリング
Redisクラスターは、Redisが水平スケーリングをサポートする公式の方法です。シャードアプローチを使用して、複数のRedisノードにわたってデータを分割します。各ノードはキースペースのサブセットを管理し、クラスターはリクエストを適切なノードに自動的にルーティングします。 Kubernetesでは、Redisクラスターを複数のポッドに展開して、負荷とストレージを配布できます。クラスターは、高可用性とフェールオーバーを提供し、マスターノードとレプリカノード全体でデータを複製します。このセットアップにより、Redisは、クラスターにさらにノードを追加することにより、より多くの要求とより大きなデータセットを処理するためにスケールアウトできます。
安定したネットワークのアイデンティティとストレージのためのKubernetesステートフルセット
Redisノードには、一貫したクラスター操作のために、安定したネットワークのアイデンティティと永続的なストレージが必要です。 Kubernetesのステートフルセットは、通常、Redisクラスターの展開に使用されます。 StatefulSetsは、各Redis Podに、データの耐久性のための一意で安定したネットワークIDと永続的なボリュームを備えていることを確認します。これにより、Redisインスタンスは、さまざまなノードで再起動してアイデンティティとデータを維持し、さまざまなノードで再スケジュールすることができ、信頼できる水平スケーリングが促進されます。
Redisインスタンスの水平ポッド自動化
Kubernetesは、CPUやカスタムメトリックなどのリソース使用に基づいて、展開またはステートフルセットのポッドレプリカの数を自動的に調整するHorizontal Pod Autoscalers(HPAS)をサポートします。 Redis自体はステートフルであり、慎重な取り扱いが必要ですが、Redisクラスターと組み合わせてHPAを使用すると、需要に応じてRedisノードの数を動的にスケーリングするのに役立つため、負荷に応じて水平スケーリングをサポートします。
自動化のためのRedisオペレーター
KubedBやRedis EnterpriseオペレーターのRedisオペレーターなど、Redisの展開を管理するために、いくつかのKubernetesオペレーターが利用できます。これらのオペレーターは、ノードスケーリング、フェイルオーバー、更新、バックアップなどのタスクを自動化するRedisクラスターの宣言管理を提供します。水平スケーリングの場合、演算子はRedisマスターとレプリカノードを自動的に作成または削除するように構成でき、手動介入なしでスケーリング操作を簡素化できます。
レプリケーションとセンチネル
Redis Sentinelが管理するMaster-Replicaアーキテクチャを備えたRedis Replicationは、Kubernetesでも水平方向のスケーリングを提供するために使用できます。マスターの複数のレプリカを展開して、読み取り負荷を広め、高可用性を提供することができます。ただし、このアプローチはRedisクラスターと比較して制限されています。これは、すべての書き込みが1つのマスターに依然として進んでおり、水平の書き込みスケーリングを制限するためです。
シャードとデータの分割
Redisクラスターは、各ノードがキースペースのサブセットを処理し、複数のノードにデータを自動的に保留します。これは、データセットが単一のインスタンスのメモリ制限を超えて成長し、クエリ負荷も分散することを可能にするため、水平スケーリングの中心です。 Kubernetes Redisクラスターの展開により、各シャードが孤立したリソースを備えた別のポッドに存在することが保証されます。
構成に関する考慮事項
KubernetesでRedisを水平にスケーリングする場合、データの耐久性、各PODのリソース要求と制限を調整し、ノード間通信に適切なネットワークポリシーを設定するための永続的なボリュームを構成することが重要です。また、クラスターノードが互いに位置し、クライアントが正しく接続できるようにするには、適切なサービスの発見とDNS解像度が必要です。
水平スケーリング用のワークフローの例
-StateFulsetまたはStateFulsetsの管理を使用してRedisクラスターを展開します。
- 最初に必要なマスターとレプリカノードの数を定義します。
- クラスターがスロットを自動的に形成して割り当てることができるように、Redisクラスターの自己構成を使用します。
-Kubernetes水平ポッドオートスケーラーまたはオペレーターCRDSを使用して、荷重の変化に応じてレプリカの数を動的に調整します。
- 各ポッドに対して、永続的なボリュームとネットワーク設定が正しく設定されていることを確認します。
- クラスターの健康とパフォーマンスの指標を監視して、スケーリングの決定をガイドします。
分散キャッシュアプローチ
Kubernetesでは、ステートレスアプリケーションポッドの水平スケーリングには、レプリカ全体でデータの一貫性を維持するために分散キャッシュが必要になることがよくあります。水平にスケーリングされたクラスターとして展開されたRedisは、共有されたメモリ内キャッシュ層として機能します。これにより、アプリケーションポッドは、一貫性と高速データアクセスのために分散型Redisキャッシュに依存して、ローカルキャッシュ状態を失うことなくスケーリングできます。
課題と制限
-Redisシングルスレッドネイチャーは、単一のノードのパフォーマンスを制限し、高スループットに水平スケーリングが不可欠になります。
- すべてのRedisコマンドとデータ構造がクラスター化モードで完全に互換性があるか効率的ではないため、アプリケーションの認識が必要です。
- Kubernetesクラスターの永続的なストレージとフェールオーバーの管理は、運用上の複雑さを追加します。
- データの損失なしでRedisノードをスケーリングするには、慎重な再シャードとクラスター管理が必要です。
-Redisのようなステートフルなアプリケーションは、ステートレスポッドと比較して自動スケールが困難です。
まとめ
Redisは、安定したネットワークIDと永続的なボリュームを備えた複数のステートフルセットポッドにRedisクラスターを展開することにより、Kubernetesの水平スケーリングをサポートします。 Kubernetesオペレーターは、これらのクラスターの管理とスケーリングを自動化します。水平ポッド自動化は、負荷に基づいてRedisノードカウントを調整できます。 Redis Clusterのシャーディング機能とKubernetesオーケストレーションの組み合わせにより、Redisは多くのノードにデータとリクエストを広めることにより、Redisが大規模なデータセットと高いリクエストボリュームを処理できます。
このアプローチにより、Redisは、クラウドネイティブKubernetes環境のスケーラブルで高性能のメモリ内データストアまたはキャッシュとして機能することができます。
参考文献:-Kubernetesでの水平スケーリング用のRedisクラスター
-Kubernetesステートフルセットと水平ポッドオートスケーラー
-KubernetesのRedisオペレーター
- KubernetesのRedisを使用した分散キャッシュ
- レディスのスケーリングにおける課題とベストプラクティス