インスタンス容量のスケーリングについて

このページでは、Memorystore for Redis Cluster インスタンスがスケーリング時にどのように動作するかを説明します。

インスタンスの容量は、次の方法でスケーリングできます。

  • インスタンスのシャード数を変更できます。これは 水平スケーリングです。インスタンスを水平方向にスケーリングするには、次のいずれかの方法を使用します。

    • スケールアウト: インスタンスの容量を増やします。これにより、 インスタンスのメモリと処理能力が増え、より大量のデータまたは トラフィックを処理できるようになります。インスタンスの容量は、インスタンス内のシャード数によって決まります。

      インスタンスをスケールアウトすることで、アプリケーションはパフォーマンスを低下させることなく需要の増加に対応できます。インスタンスをスケールアウトするには、インスタンスにシャードを追加します。

    • スケールイン: インスタンスの容量を減らします。これにより、 処理能力とデータを保存するために使用できるメモリの両方が減少します。これは、アプリケーションのデータ要件が減少し、リソース使用量を減らしてコストを削減する必要がある場合に発生します。インスタンスをスケールインするには、インスタンス内のシャード数を減らします。

  • インスタンスのノードタイプを変更できます。これは 垂直スケーリングです。 インスタンスを垂直方向にスケーリングするには、次のいずれかの方法を使用します。

    • スケールアップ: インスタンスの容量を増やします。インスタンスの容量は、インスタンスのノードタイプによって決まります。インスタンスをスケールアップするには、ノードタイプをより大きなノードタイプに変更します。たとえば、インスタンスを redis-standard-small ノードタイプから redis-highmem-medium ノードタイプにスケールアップします。
    • スケールダウン: インスタンスの容量を減らします。インスタンスをスケールダウンするには、ノードタイプをより小さなノードタイプに変更します。たとえば、インスタンスを redis-highmem-medium ノードタイプから redis-standard-small ノードタイプにスケールダウンします。

スケーリングの影響

スケーリング オペレーション中、インスタンスの可用性は影響を受けません。 ただし、インスタンスのシャード数を変更すると、Memorystore for Redis Cluster はインスタンスのキースペースを再調整します。これにより、スケーリング オペレーション中にレイテンシが増加する可能性があります。

また、ノードタイプを変更してインスタンスを垂直方向にスケーリングした場合の影響 は、メンテナンス オペレーションの場合と似ています。

障害シナリオ

スケーリング オペレーション中にエラーが発生した場合は、次のいずれかのシナリオが原因である可能性があります。

  • インスタンスのシャード数を更新しようとしていますが、インスタンスの redis-shared-core-nano ノードタイプに十分な空きメモリがありません。

    この問題を解決するには、インスタンスをスケールアップするか、 インスタンスのノードからメモリを解放します。メモリを解放するには、次の操作を行います。

    1. Memorystore for Redis Cluster インスタンスに接続します
    2. IP アドレスやポート番号など、インスタンスの詳細を取得するには、gcloud redis clusters describe コマンドを使用します。
    3. インスタンスの IP アドレスとポート番号をメモします。
    4. インスタンスのノードに関する情報を取得するには、次のコマンドを使用します。

      redis-cli -h IP_ADDRESS -p PORT_NUMBER cluster nodes
      

      IP_ADDRESSPORT_NUMBER は、 前の手順でメモした値に置き換えます。

    5. 十分な空き容量がないノードの IP アドレスとポート番号をメモします。このノードの ID は、エラーに表示される ID と一致します。

    6. このノードに接続するには、次のコマンドを使用します。

      redis-cli -h IP_ADDRESS -p PORT_NUMBER
      

      IP_ADDRESSPORT_NUMBER は、前の手順でメモした値 に置き換えます。

    7. プロンプトで info memory コマンドを入力します。

      出力には、used_memory パラメータと maxmemory パラメータの値が表示されます。used_memory はノードが使用するメモリ量、maxmemory はノードで使用できるメモリ量です。

    8. used_memory パラメータの値を maxmemory パラメータの値で割り、商が 98% を超えていることを確認します。

    9. ノードの空き容量を増やすには、ノードのキーの一部を削除します

    10. もう一度 info memory コマンドを入力します。出力では、used_memory パラメータの値が小さくなっています。

    11. used_memory パラメータの値を maxmemory パラメータの値で割り、商が 98% 未満になっていることを確認します。そうでない場合は、さらにキーを削除します。

    12. 十分な空き容量がない他のノードについては、この手順のステップ 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 には、このリクエストに対応するのに十分なメモリがありません。この問題を解決するには、スケールインして元の大きなシャード数に戻し、クラスタの容量を減らします。

ベスト プラクティス

インスタンスの容量をスケーリングし、インスタンスのスケーリングの速度と信頼性を向上させるには、可能な限りトラフィックの少ない期間にスケーリングします。インスタンスのトラフィックをモニタリングする方法については、クラスタをモニタリングするをご覧ください。