Redis 用 Amazon ElastiCache
Redis 用 ElastiCache ユーザーガイド (API バージョン 2015-02-02)

予約メモリの管理

予約メモリは、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 を予約します。詳細については、以下のトピックを参照してください。

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

2017 年 3 月 16 日以降、Redis 用 Amazon ElastiCache には reserved-memoryreserved-memory-percent という Redis メモリを管理するための 2 つの相互に排他的なパラメーターがあります。これらのパラメータのいずれも Redis ディストリビューションには含まれていません。新しい Redis クラスターまたはレプリケーショングループを作成し、デフォルトのパラメーターグループを使用するたびに、ElastiCache ユーザーになった時に応じて、これらのパラメーターのいずれか一方がデフォルトのメモリ管理パラメータになります。2017 年 3 月 16 日の時点で既にユーザーだった場合、デフォルトのパラメータグループを使用して Redis クラスターまたはレプリケーショングループを作成するたびに、メモリ管理パラメータは reserved-memory になり、ゼロ (0) バイトのメモリが予約されます。2017 年 3 月 16 日以降にユーザーになった場合、デフォルトのパラメータグループを使用して Redis クラスターまたはレプリケーショングループを作成するたびに、メモリ管理パラメータは reserved-memory-percent になり、ノードの maxmemory の 25% がデータ以外の用途に予約されます。

2 つの Redis メモリ管理パラメータの説明を確認した上で、デフォルトではないパラメータや、デフォルトではない値のパラメータを使用する場合は、他の予約済みメモリ管理パラメータに変更することができます。次に、値を変更する必要がある場合は、カスタムパラメータグループを作成し、好みのメモリ管理パラメータと値を使用するように変更することができます。これで、新しい 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 パラメーターグループファミリーを指定して) カスタムパラメータグループを作成します。詳細については、「パラメーターグループを作成する」を参照してください。

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

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

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

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

  4. カスタムパラメータグループを使用するように Redis クラスターまたはレプリケーショングループを変更します。

    次の CLI の例では、カスタムパラメータグループ redis28-m3xl をすぐに使用するようにクラスター my-redis-cluster を変更しています。詳細については、「ElastiCache クラスターの変更」を参照してください。

    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 を変更しています。詳細については, レプリケーショングループの変更.

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

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

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 は Redis の ElastiCache に固有であり、Redis のディストリビューションには含まれていません。

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

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

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

     

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

     

    reserved-memory-percent のパーセント値を変更するには

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

      aws elasticache create-cache-parameter-group \ --cache-parameter-group-name redis28-50 \ --description "Redis 2.8.x 50% reserved" \ --cache-parameter-group-family redis2.8

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

    2. reserved-memory-percent が 50 (50 パーセント) であるようにカスタムパラメータグループを変更します。詳細については、「パラメータグループを変更する」を参照してください。

      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-50 をすぐに使用するように Redis クラスター my-redis-cluster を変更しています。詳細については、「ElastiCache クラスターの変更」を参照してください。

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

      次の CLI の例では、カスタムパラメータグループ redis28-50 をすぐに使用するように Redis レプリケーショングループ my-redis-repl-grp を変更しています。詳細については、「レプリケーショングループの変更」を参照してください。

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

予約メモリ管理パラメータの指定

2017 年 3 月 16 日時点で ElastiCache ユーザーだった場合、デフォルトの予約済みメモリ管理パラメーターは reserved-memory であり、予約されるメモリはゼロ (0) バイトです。2017 年 3 月 16 日よりも後に ElastiCache ユーザーになった場合、デフォルトの予約済みメモリ管理パラメーターは reserved-memory-percent であり、ノードのメモリの 25% が予約されます。これは、Redis 用 ElastiCache クラスターまたはレプリケーショングループを作成した場合にも当てはまります。ただし、AWS CLI または ElastiCache API を使用して、必要に応じて予約メモリ管理パラメーターを変更できます。

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

reserved-memory-percent を指定するには

予約メモリ管理パラメータとして reserved-memory-percent を使用するには、parameter-name-values パラメータを指定して modify-cache-parameter-group コマンドを使用し、reserved-memory-percent とその値を指定するようにカスタムパラメータグループを変更します。

次の CLI の例では、reserved-memory-percent を使用して予約メモリを管理するように、カスタムパラメータグループ redis32-cluster-on を変更します。パラメータグループが予約メモリ管理に ParameterName パラメータを使用するには、ParameterValue に値を割り当てる必要があります。詳細については、「パラメータグループを変更する」を参照してください。

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

reserved-memory を指定するには

予約メモリ管理パラメータとして reserved-memory を使用するには、parameter-name-values パラメータを指定して modify-cache-parameter-group コマンドを使用し、reserved-memory とその値を指定するようにカスタムパラメータグループを変更します。

次の CLI の例では、reserved-memory を使用して予約メモリを管理するように、カスタムパラメータグループ redis32-m3xl を変更します。パラメータグループが予約メモリ管理に ParameterName パラメータを使用するには、ParameterValue に値を割り当てる必要があります。エンジンバージョンは 2.8.22 より新しいため、値を cache.m3.xlargemaxmemory の 25% である 3565158400 に設定します。詳細については、「パラメータグループを変更する」を参照してください。

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