メニュー
Amazon ElastiCache
ユーザーガイド (API Version 2015-02-02)

予約メモリの管理 (Redis)

予約メモリは、nondata 用に確保されるメモリです。バックアップまたはフェイルオーバーを実行すると、Redis は、クラスターのデータが .rdb ファイルに書き込まれる間にクラスターに書き込みオペレーションを記録している、使用可能なメモリを使用します。すべての書き込みに十分なメモリが使用可能できない場合、プロセスは失敗します。以下は、ElastiCache、Redis 用の予約メモリを管理するためのオプション、およびそれらのオプションを適用する方法についての情報です。

予約メモリはどれくらい必要ですか。

2.8.22 前の Redis のバージョンを実行する場合、Redis 2.8.22 以降を実行する場合よりバックアップとフェイルオーバーのためにより多くのメモリを確保する必要があります。この要件は Redis 用 ElastiCache がバックアッププロセスを実装するさまざまな方法が原因です。大まかな方法として、2.8.22 前のバージョンの Redis オーバーヘッドのためにノードタイプの maxmemory 値の半分を、Redis のバージョン 2.8.22 以降のために 4 分の 1 を予約します。詳細については、「Redis スナップショットを作成するための十分なメモリがあることの確認」および「同期とバックアップの実装方法」を参照してください。

予約メモリを管理するパラメータ

予約メモリのパラメータ

2017 年 3 月 16 日以前は、Redis 用 ElastiCache の予約メモリの管理すべては、パラメータ reserved-memory を使用して行われました。reserved-memory のデフォルト値は 0 です。このデフォルトは Redis のオーバーヘッド用にメモリを確保せず、Redis はノードのメモリすべてをデータ用に消費できます。バックアップ用およびフェイルオーバー用に使用できる十分なメモリを持てるように reserved-memory を変更するには、カスタムパラメータグループを作成する必要があります。このカスタムパラメータグループで、reserved-memory をクラスターおよびクラスターのノードタイプで実行している Redis のバージョンに適切な値に設定します。

Redis の ElastiCache パラメータ reserved-memory は Redis の ElastiCache に固有であり、Redis のディストリビューションには含まれていません。

次の手順で reserved-memory を使用して Redis クラスターのメモリを管理する方法を示します。

reserved-memory を使用してメモリを予約するには

  1. 実行しているエンジンバージョンと一致するパラメータグループファミリーを指定して (たとえば、redis2.8 パラメータグループファミリーを指定して) カスタムパラメータグループを作成します。

    Copy
    aws elasticache create-cache-parameter-group \ --cache-parameter-group-name redis28-m3xl \ --cache-parameter-group-family redis2.8
  2. Redis のオーバーヘッドのために必要なメモリのバイト数を計算します。ノードタイプに対する maxmemory 値を Redis のノードタイプ固有のパラメータ で確認できます。

  3. パラメータ reserved-memory が前の手順で計算したバイト数であるように、カスタムパラメータグループを変更します。次の AWS CLI 例では、2.8.22 以前の Redis のバージョンを実行しており、ノードの maxmemory の半分を予約する必要があることを前提としています。

    Copy
    aws elasticache modify-cache-parameter-group \ --cache-parameter-group-name redis28-m3xl \ --parameter-name-values “ParameterName=reserved-memory, ParameterValue=7130316800

    各ノードタイプには異なる maxmemory 値があるため、使用する各ノードタイプに対して個別のカスタムパラメータグループが必要であることに注意してください。したがって、各ノードタイプには reserved-memory に対して異なる値が必要です。

  4. クラスターに、カスタムパラメータグループを適用します。

    次の CLI の例では redis28-m3xl パラメータグループを、クラスター my-redis-cluster に適用します。

    Copy
    aws elasticache modify-cache-cluster \ --cache-cluster-id my-redis-cluster \ --cache-parameter-group-name redis28-m3xl \ --apply-immediately

    次の CLI の例では、redis28-m3xl パラメータグループを、レプリケーショングループ (コンソールのクラスター) my-redis-repl-grp に適用します。

    Copy
    aws elasticache modify-replication-group \ --replication-group-id my-redis-repl-grp \ --cache-parameter-group-name redis28-m3xl \ --apply-immediately

詳細については、「ElastiCache クラスターの変更」または「レプリカを持つクラスターの変更」を参照してください。

 

予約メモリパーセントパラメータ

2017 年 3 月 16 日に、Amazon ElastiCache は、パラメータ reserved-memory-percent を導入し、Redis の ElastiCache のすべてのバージョンで利用できるようにしました。reserved-memory-percent の目的は、すべてのクラスターに対して予約メモリ管理を簡易化することです。ノードタイプにかかわらずクラスターの予約メモリを管理するために、各パラメータグループファミリー (redis2.8 など) に対して単一のパラメータグループを持てるようにすることによって実行します。reserved-memory-percent のデフォルト値は 25 (25 パーセント) です。

Redis の ElastiCache パラメータ reserved-memory-percent は、reserved-memory のように Redis の ElastiCache に固有であり、Redis のディストリビューションには含まれていません。

reserved-memory-percent を使用して、Redis クラスターの ElastiCache でメモリを管理するには、以下のいずれかを実行します。

  • Redis 2.8.22 以降を実行している場合は、クラスターに、デフォルトのパラメータグループを割り当てます。デフォルトの 25 パーセントで十分です。そうでない場合、次の箇条書きの手順に従って値を変更することができます。

     

  • 2.8.22 より前の Redis のバージョンを実行している場合、reserved-memory-percent のデフォルトの 25 パーセントよりも多くのメモリを確保する必要があります。そのためには、次の手順を使用します。

reserved-memory-percent を使用してメモリを予約するには

  1. 実行しているエンジンバージョンと一致するパラメータグループファミリーを指定して (たとえば、redis2.8 パラメータグループファミリーを指定して) カスタムパラメータグループを作成します。カスタムパラメータグループは、デフォルトのパラメータグループを変更できないため必要です。

    Copy
    aws elasticache create-cache-parameter-group \ --cache-parameter-group-name redis28-50 \ --cache-parameter-group-family redis2.8

    reserved-memory-percent は、ノードの maxmemory に対する割合としてメモリを予約するため、各ノードタイプに対応するカスタムパラメータグループは必要ありません。

  2. reserved-memory-percent が 50 (50 パーセント) であるようにカスタムパラメータグループを変更します。

    Copy
    aws elasticache modify-cache-parameter-group \ --cache-parameter-group-name redis28-50 \ --parameter-name-values "ParameterName=reserved-memory-percent, ParameterValue=50"
  3. 2.8.22 より前の Redis のバージョンを実行している Redis クラスターに対して、このカスタムパラメータグループを使用します。

    次の CLI の例では redis28 パラメータグループを、クラスター my-redis-cluster に適用します。

    Copy
    aws elasticache modify-cache-cluster \ --cache-cluster-id my-redis-cluster \ --cache-parameter-group-name redis28-50 \ --apply-immediately

    次の CLI の例では、redis28-50 パラメータグループを、レプリケーショングループ (コンソールのクラスター) my-redis-repl-grp に適用します。

    Copy
    aws elasticache modify-replication-group \ --replication-group-id my-redis-repl-grp \ --cache-parameter-group-name redis28-50 \ --apply-immediately

詳細については、「ElastiCache クラスターの変更」または「レプリカを持つクラスターの変更」を参照してください。

予約メモリと予約メモリパーセントパラメータ間の変更

2017 年 3 月 16 日 現在 ElastiCache 顧客であった場合、デフォルトの予約メモリ管理パラメータは reserved-memory です。2017 年 3 月 16 日より後に ElastiCache の顧客になった場合、デフォルトの予約メモリ管理パラメータは、reserved-memory-percent です。AWS CLI または ElastiCache API を使用して、必要に応じて予約メモリ管理パラメータを変更できます。

パラメータ reserved-memory および reserved-memory-percent は相互に排他的です。パラメータグループには、常にどちらかがありますが、両方があることはありません。パラメータグループを変更することによって、パラメータグループが予約メモリ管理のためにどちらのパラメータを使用するかを変更できます。デフォルトのパラメータグループは変更できないため、パラメータグループはカスタムである必要があります。

次の CLI の例では、reserved-memory-percent を使用して予約メモリを管理するように、カスタムパラメータグループ redis32-cluster-on を変更します。エンジンバージョンは 2.8.22 より新しいため、reserved-memory-percent の値を、デフォルトではありますが 25 (25 パーセント) に設定します。これは、パラメータグループを reserved-memory から reserved-memory-percent に変換するために、reserved-memory-percent に何らかの値を割り当てる必要があるからです。

Copy
aws elasticache modify-cache-parameter-group \ --cache-parameter-group-name redis32-cluster-on \ --parameter-name-values "ParameterName=reserved-memory-percent, ParameterValue=25"

次の CLI の例では、reserved-memory を使用して予約メモリを管理するように、カスタムパラメータグループ redis32-m3xl を変更します。エンジンバージョンは 2.8.22 より新しいため、値を cache.m3.xlargemaxmemory の 4 分の 1 である 3565158400 に設定します。

Copy
aws elasticache modify-cache-parameter-group \ --cache-parameter-group-name redis32-m3xl \ --parameter-name-values "ParameterName=reserved-memory, ParameterValue=3565158400"