予約メモリの管理
予約メモリは、nondata 用に確保されるメモリです。バックアップまたはフェイルオーバーを実行すると、Redis は、クラスターのデータが .rdb ファイルに書き込まれる間にクラスターに書き込みオペレーションを記録している、使用可能なメモリを使用します。すべての書き込みに十分なメモリが使用可能できない場合、プロセスは失敗します。以下は、ElastiCache for Redis の予約メモリを管理するためのオプション、およびそれらのオプションを適用する方法についての情報です。
予約メモリはどれくらい必要ですか。
2.8.22 より前の Redis のバージョンを実行する場合、Redis 2.8.22 以降を実行する場合よりバックアップとフェイルオーバーのためにより多くのメモリを確保します。この要件は ElastiCache for Redis がバックアッププロセスを実装するさまざまな方法が原因です。大まかな方法として、2.8.22 より前のバージョンの Redis オーバーヘッドのためにノードタイプの maxmemory
値の半分を、Redis のバージョン 2.8.22 以降のために 4 分の 1 を予約します。
データ階層化でクラスターを使用する場合、書き込みが多いワークロードでは、ノードの使用可能なメモリの半分まで maxmemory を増やすことをお勧めします。
詳細については、次を参照してください。
予約メモリを管理するパラメータ
2017 年 3 月 16 日以降、Amazon ElastiCache for Redis には reserved-memory
と reserved-memory-percent
という Redis メモリを管理するための 2 つの相互に排他的なパラメータがあります。これらのパラメータのいずれも Redis ディストリビューションには含まれていません。
ElastiCache ユーザーになった時期に応じて、これらのパラメータのいずれか一方がデフォルトのメモリ管理パラメータになります。このパラメータは、新しい Redis クラスターまたはレプリケーショングループを作成し、デフォルトのパラメータグループを使用する場合に適用されます。
-
2017 年 3 月 16 日より前に開始したユーザーでは — デフォルトのパラメータグループを使用して Redis クラスターまたはレプリケーショングループを作成する場合、メモリ管理パラメータは
reserved-memory
になります。この場合、0 バイトのメモリが予約されます。 -
2017 年 3 月 16 日以降に開始したユーザーでは — デフォルトのパラメータグループを使用して Redis クラスターまたはレプリケーショングループを作成する場合、メモリ管理パラメータは
reserved-memory-percent
になります。この場合、ノードのmaxmemory
値の 25% がデータ以外の目的で予約されます。
2 つの Redis メモリ管理パラメータの説明を確認したならば、デフォルトではないものかデフォルト以外の値のものを使用することもできます。その場合は、他の予約メモリ管理パラメータに変更できます。
そのパラメータの値を変更するには、カスタムパラメータグループを作成し、希望のメモリ管理パラメータと値を使用するように変更します。これで、新しい Redis クラスターまたはレプリケーショングループを作成するたびに、そのカスタムパラメータグループを使用できるようになります。既存のクラスターまたはレプリケーショングループの場合は、カスタムパラメータグループを使用するように変更できます。
詳細については、次を参照してください。
予約メモリのパラメータ
2017 年 3 月 16 日までは、ElastiCache for Redis の予約メモリの管理すべては、パラメータ reserved-memory
を使用して行われました。reserved-memory
のデフォルト値は 0 です。このデフォルトは Redis のオーバーヘッド用にメモリを確保せず、Redis はノードのメモリすべてをデータ用に消費できます。
バックアップ用およびフェイルオーバー用に使用できる十分なメモリを持てるように reserved-memory
を変更するには、カスタムパラメータグループを作成する必要があります。このカスタムパラメータグループで、reserved-memory
をクラスターおよびクラスターのノードタイプで実行している Redis のバージョンに適切な値に設定します。詳細については、「予約メモリはどれくらい必要ですか。」を参照してください。
ElastiCache for Redis のパラメータ reserved-memory
は ElastiCache for Redis に固有であり、Redis のディストリビューションには含まれていません。
次の手順で reserved-memory
を使用して Redis クラスターのメモリを管理する方法を示します。
予約メモリを使用してメモリを予約するには
-
実行中のエンジンバージョンに一致するパラメータグループファミリーを指定するカスタムパラメータグループを作成します。たとえば、
redis2.8
パラメータグループファミリーを指定します。詳細については、「パラメータグループを作成する」を参照してください。aws elasticache create-cache-parameter-group \ --cache-parameter-group-name
redis6x-m3xl
\ --description "Redis 2.8.x for m3.xlarge node type
" \ --cache-parameter-group-familyredis6.x
-
Redis のオーバーヘッドのために予約するメモリのバイト数を計算します。ノードタイプに対する
maxmemory
値を Redis のノードタイプ固有のパラメータ で確認できます。 -
パラメータ
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
に対して異なる値が必要です。 -
カスタムパラメータグループを使用するように Redis クラスターまたはレプリケーショングループを変更します。
次の CLI の例では、カスタムパラメータグループ
redis28-m3xl
をすぐに使用するようにクラスターmy-redis-cluster
を変更しています。詳細については、「ElastiCache クラスターの変更」を参照してください。aws elasticache modify-cache-cluster \ --cache-cluster-id
my-redis-cluster
\ --cache-parameter-group-nameredis28-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-nameredis28-m3xl
\ --apply-immediately
予約メモリパーセントパラメータ
2017 年 3 月 16 日に、Amazon ElastiCache は、パラメータ reserved-memory-percent
を導入し、ElastiCache for Redis のすべてのバージョンで利用できるようにしました。reserved-memory-percent
の目的は、すべてのクラスターに対して予約メモリ管理を簡易化することです。ノードタイプにかかわらずクラスターの予約メモリを管理するために、各パラメータグループファミリー (redis2.8
など) に対して単一のパラメータグループを持てるようにすることによって実行します。reserved-memory-percent
のデフォルト値は 25 (25 パーセント) です。
ElastiCache for Redis のパラメータ reserved-memory-percent
は ElastiCache for Redis に固有であり、Redis のディストリビューションには含まれていません。
r6gd ファミリーのノードを使用しているクラスターでメモリ使用量が 75% に達すると、データ階層化が自動的にトリガーされます。詳細については、「データ階層化」を参照してください。
reserved-memory-percent を使用してメモリを予約するには
reserved-memory-percent
を使用して、ElastiCache for Redis クラスターでメモリを管理するには、以下のいずれかを実行します。
-
Redis 2.8.22 以降を実行している場合は、クラスターに、デフォルトのパラメータグループを割り当てます。デフォルトの 25 パーセントで十分です。そうでない場合、次のステップを実行して、値を変更します。
-
2.8.22 より前の Redis のバージョンを実行している場合、おそらく
reserved-memory-percent
のデフォルトの 25 パーセントよりも多くのメモリを確保する必要があります。そのためには、次の手順を使用します。
reserved-memory-percent の値を変更するには
-
実行中のエンジンバージョンに一致するパラメータグループファミリーを指定するカスタムパラメータグループを作成します。たとえば、
redis2.8
パラメータグループファミリーを指定します。カスタムパラメータグループは、デフォルトのパラメータグループを変更できないため必要です。詳細については、「パラメータグループを作成する」を参照してください。aws elasticache create-cache-parameter-group \ --cache-parameter-group-name
redis28-50
\ --description "Redis 2.8.x 50% reserved
" \ --cache-parameter-group-familyredis2.8
reserved-memory-percent
は、ノードのmaxmemory
に対する割合としてメモリを予約するため、各ノードタイプに対応するカスタムパラメータグループは必要ありません。 -
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
" -
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-nameredis28-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-nameredis28-50
\ --apply-immediately
予約メモリ管理パラメータの指定
2017 年 3 月 16 日時点で ElastiCache ユーザーだった場合、デフォルトの予約済みメモリ管理パラメータは reserved-memory
であり、予約されるメモリはゼロ (0) バイトです。2017 年 3 月 16 日よりも後に ElastiCache ユーザーになった場合、デフォルトの予約済みメモリ管理パラメータは reserved-memory-percent
であり、ノードのメモリの 25 パーセントが予約されます。これは、ElastiCache for Redis クラスターまたはレプリケーショングループを作成した場合にも当てはまります。ただし、AWS CLI または ElastiCache API を使用して、必要に応じて予約メモリ管理パラメータを変更できます。
パラメータ reserved-memory
および reserved-memory-percent
は相互に排他的です。パラメータグループには、常にどちらかがありますが、両方があることはありません。パラメータグループを変更することによって、パラメータグループが予約メモリ管理のためにどちらのパラメータを使用するかを変更できます。デフォルトのパラメータグループは変更できないため、パラメータグループはカスタムパラメータグループである必要があります。詳細については、「パラメータグループを作成する」を参照してください。
reserved-memory-percent を指定するには
予約メモリ管理パラメータとして reserved-memory-percent
を使用するには、modify-cache-parameter-group
コマンドを使用してカスタムパラメータグループを変更します。parameter-name-values
パラメータを使用して、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
を使用するには、modify-cache-parameter-group
コマンドを使用してカスタムパラメータグループを変更します。parameter-name-values
パラメータを使用して、reserved-memory
とそれの値を指定します。
次の CLI の例では、reserved-memory
を使用して予約メモリを管理するように、カスタムパラメータグループ redis32-m3xl
を変更します。パラメータグループが予約メモリ管理に ParameterName
パラメータを使用するには、ParameterValue
に値を割り当てる必要があります。エンジンバージョンは 2.8.22 より新しいため、値を cache.m3.xlarge
の maxmemory
の 25% である 3565158400
に設定します。詳細については、「パラメータグループを変更する」を参照してください。
aws elasticache modify-cache-parameter-group \ --cache-parameter-group-name
redis32-m3xl
\ --parameter-name-values "ParameterName=reserved-memory, ParameterValue=3565158400
"