このページでは、Memorystore for Redis Cluster のクラスタがスケーリング時にどのように動作するかを説明します。
クラスタの容量は、次の方法でスケーリングできます。
クラスタのシャード数は変更できます。これは水平スケーリングです。クラスタを水平方向にスケーリングするには、次のいずれかの方法を使用します。
スケールアウト: クラスタの容量を増やします。これにより、クラスタのメモリと処理能力が向上し、より大量のデータやトラフィックを処理できるようになります。クラスタの容量は、クラスタ内のシャード数によって決まります。
クラスタをスケールアウトすると、アプリケーションはパフォーマンスを低下させることなく、需要の増加に対応できます。クラスタをスケールアウトするには、クラスタにシャードを追加します。
スケールイン: クラスタの容量を削減します。これにより、処理能力と、データの保存に使用できるメモリ量の両方が減少します。これは、アプリケーションのデータ需要が減少し、費用を節約するためにリソース使用量を削減する必要がある場合に発生します。クラスタをスケールインするには、クラスタ内のシャード数を減らします。
クラスタのノードタイプを変更できます。これは垂直スケーリングです。クラスタを垂直方向にスケーリングするには、次のいずれかの方法を使用します。
- スケールアップ: クラスタの容量を増やします。クラスタの容量は、クラスタのノードタイプによって決まります。クラスタをスケールアップするには、ノードタイプをより大きなノードタイプに変更します。たとえば、クラスタを
redis-standard-smallノードタイプからredis-highmem-mediumノードタイプにスケールアップします。 スケールダウン: クラスタの容量を削減します。クラスタをスケールダウンするには、ノードタイプをより小さいノードタイプに変更します。たとえば、クラスタを
redis-highmem-mediumノードタイプからredis-standard-smallノードタイプにスケールダウンします。
- スケールアップ: クラスタの容量を増やします。クラスタの容量は、クラスタのノードタイプによって決まります。クラスタをスケールアップするには、ノードタイプをより大きなノードタイプに変更します。たとえば、クラスタを
スケーリングの影響
スケーリング オペレーション中に、クラスタの可用性が影響を受けることはありません。ただし、クラスタ内のシャード数を変更すると、Memorystore for Redis Cluster はクラスタのキースペースをリバランスします。これにより、スケーリング オペレーション中にレイテンシが増加する可能性があります。
また、ノードタイプを変更してクラスタを垂直方向にスケーリングした場合の影響は、メンテナンス オペレーションの場合と同様です。
障害シナリオ
スケーリング オペレーション中にエラーが発生した場合は、次のいずれかのシナリオが原因である可能性があります。
クラスタのシャード数を更新したいが、クラスタの
redis-shared-core-nanoノードタイプに十分な空きメモリがない。この問題を解決するには、クラスタをスケールアップするか、クラスタのノードからメモリを解放します。メモリを解放するには、次の操作を行います。
- クラスタに接続する。
- IP アドレスやポート番号など、クラスタの詳細を取得するには、
gcloud redis clusters describeコマンドを使用します。 - クラスタの IP アドレスとポート番号をメモします。
クラスタのノードに関する情報を取得するには、次のコマンドを使用します。
redis-cli -h IP_ADDRESS -p PORT_NUMBER cluster nodes
IP_ADDRESS と PORT_NUMBER は、前の手順でメモした値に置き換えます。
十分な空き容量がないノードの IP アドレスとポート番号をメモします。このノードの ID は、エラーに表示される ID と一致します。
このノードに接続するには、次のコマンドを使用します。
redis-cli -h IP_ADDRESS -p PORT_NUMBER
IP_ADDRESS と PORT_NUMBER は、前の手順でメモした値に置き換えます。
プロンプトで
info memoryコマンドを入力します。出力に、
used_memoryパラメータとmaxmemoryパラメータの値が表示されます。used_memoryはノードが使用するメモリ量、maxmemoryはノードで使用可能なメモリ量です。used_memoryパラメータの値をmaxmemoryパラメータの値で割り、商が 98% を超えていることを確認します。ノードの空き容量を増やすには、ノードのキーの一部を削除します。
info memoryコマンドを再度入力します。出力では、used_memoryパラメータの値が小さくなります。used_memoryパラメータの値をmaxmemoryパラメータの値で割り、商が 98% 未満になっていることを確認します。そうでない場合は、さらに鍵を削除します。十分な空き容量がない他のノードについては、この手順のステップ 4 ~ 11 を繰り返します。
Memorystore for Redis Cluster が元のクラスタに保存するすべてのキーを保持する容量がない、より小さいシャード数にスケーリングしました。この問題を解決するには、保存されているすべてのキーを保持できる、より大きなシャード数にスケーリングします。クラスタのシャード数を増やす方法については、シャード数をスケーリングするをご覧ください。
Memorystore for Redis Cluster が元のノードタイプに保存するすべてのデータを保持する容量がない、より小さいノードタイプにスケールしました。この場合、Memorystore for Redis Cluster は、垂直方向にスケールダウンするための推奨ノードタイプを提供します。
クラスタのノードタイプを更新し、元のノードタイプのデフォルト設定を上書きするか、これらの設定がすでに上書きされている。ただし、新しいスケーリングされたノードタイプがデフォルト設定の値をサポートしていないか、設定がノードタイプに対して有効ではありません。この場合、Memorystore for Redis Cluster はエラーを返します。この問題を解決するには、新しいノードタイプで有効になるように設定を手動で変更します。
Write pressure が高い期間(負荷テスト中など)にクラスタをスケーリングした。この問題を解決するには、クラスタ トラフィックが少ない期間にスケーリングします。
大きなキーを含むスロットがあり、このキーを別のノードに移行する場合。ただし、このノードには鍵をサポートするのに十分なメモリがありません。クラスタを更新できません。この問題を解決するには、キーのサイズを 128 MB 未満に縮小します。その後、更新オペレーションを再試行します。
クラスタのノードが所有するスロット番号は不明ですが、スロット範囲のみがわかります。Memorystore for Redis Cluster がエラー メッセージを返します。この場合は、キーのサイズを小さくして、更新オペレーションを再試行します。
シャード数を小さくスケールアウトして、クラスタの容量を増やしました。ただし、Memorystore for Redis Cluster には、このリクエストに対応するのに十分なメモリがありません。この問題を解決するには、元のより大きなシャード数にスケールインして、クラスタの容量を減らします。
ベスト プラクティス
クラスタの容量をスケーリングするには、次のベスト プラクティスをおすすめします。
- スケーリングのタイミングを選択する: クラスタのスケーリングの速度と信頼性を向上させるには、トラフィックが少ない期間にスケーリングします。クラスタ トラフィックをモニタリングする方法については、クラスタをモニタリングするをご覧ください。
- スケーリングできない場合に再試行する: リソースの可用性は頻繁に変化します。一時的なリソース制約のためにクラスタをスケーリングできない場合は、後でクラスタをスケーリングしてみてください。