このページでは、Memorystore for Redis Cluster インスタンスがスケーリング時にどのように動作するかを説明します。
インスタンスの容量は、次の方法でスケーリングできます。
インスタンスのシャード数を変更できます。これは水平スケーリングです。インスタンスは、次のいずれかの方法で水平方向にスケーリングできます。
スケールアウト: インスタンスの容量を増やします。これにより、インスタンスのメモリと処理能力が増加し、より多くのデータやトラフィックを処理できるようになります。インスタンスの容量は、インスタンス内のシャードの数によって決まります。
インスタンスをスケールアウトすることで、アプリケーションはパフォーマンスの低下なしで需要の増加に対応できます。インスタンスをスケールアウトするには、インスタンスにシャードを追加します。
スケールイン: インスタンスの容量を減らします。これにより、処理能力とデータを保存するために使用できるメモリの量が減少します。これは、アプリケーションのデータ需要が減少し、コストを削減するためにリソース使用量を減らす必要がある場合に発生します。インスタンスをスケールインするには、インスタンスのシャード数を減らします。
インスタンスのノードタイプを変更できます。これは垂直方向のスケーリングです。インスタンスは、次のいずれかの方法で垂直方向にスケーリングできます。
- スケールアップ: インスタンスの容量を増やします。インスタンスの容量は、インスタンスのノードタイプによって決まります。インスタンスをスケールアップするには、ノードタイプをより大きなノードタイプに変更します。たとえば、インスタンスを
redis-standard-small
ノードタイプからredis-highmem-medium
ノードタイプにスケールアップします。 スケールダウン: インスタンスの容量を減らします。インスタンスをスケールダウンするには、ノードタイプをより小さいノードタイプに変更します。たとえば、インスタンスを
redis-highmem-medium
ノードタイプからredis-standard-small
ノードタイプにスケールダウンします。
- スケールアップ: インスタンスの容量を増やします。インスタンスの容量は、インスタンスのノードタイプによって決まります。インスタンスをスケールアップするには、ノードタイプをより大きなノードタイプに変更します。たとえば、インスタンスを
スケーリングの影響
スケーリング オペレーション中、インスタンスの可用性に影響はありません。ただし、インスタンスのシャード数を変更すると、Memorystore for Redis Cluster はインスタンスのキースペースを再調整します。これにより、スケーリング オペレーション中にレイテンシが増加する可能性があります。
また、ノードタイプを変更してインスタンスを垂直方向にスケーリングした場合の影響は、メンテナンス オペレーションの場合と同様です。
障害シナリオ
スケーリング オペレーション中にエラーが発生した場合は、次のいずれかのシナリオが原因である可能性があります。
インスタンスのシャード数を更新したいが、インスタンスの
redis-shared-core-nano
ノードタイプに十分な空きメモリがない。この問題を解決するには、インスタンスをスケールアップするか、インスタンスのノードからメモリを解放します。メモリを解放するには、次の操作を行います。
- Memorystore for Redis Cluster インスタンスに接続する。
- 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 が高い期間(負荷テスト中など)にインスタンスをスケーリングした。この問題を解決するには、インスタンス トラフィックが少ない期間にスケーリングします。
大きなキーを含むスロットがあり、このキーを別のノードに移行したい。ただし、このノードには鍵をサポートするのに十分なメモリがありません。そのため、クラスタを更新できません。この問題を解決するには、鍵のサイズを小さくして、更新オペレーションを再試行します。
クラスタのノードが所有するスロット番号は不明で、スロット範囲のみがわかっている。Memorystore for Redis Cluster がエラー メッセージを返します。この場合は、鍵のサイズを小さくして、更新オペレーションを再試行してください。
シャード数を減らしてスケールアウトしましたが、Memorystore for Redis Cluster にこのリクエストに対応する十分なメモリがありません。この問題を解決するには、元の大きなシャード数にスケールインします。
ベスト プラクティス
インスタンスの容量をスケーリングし、インスタンスのスケーリングの速度と信頼性を向上させるには、可能な限り、トラフィックの少ない期間にスケーリングします。インスタンスのトラフィックをモニタリングする方法については、クラスタをモニタリングするをご覧ください。