

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Valkey および Redis OSS の予約済みメモリを管理する
<a name="redis-memory-management"></a>

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

**Topics**
+ [予約メモリはどれくらい必要ですか。](#redis-memory-management-need)
+ [予約メモリを管理するパラメータ](#redis-memory-management-parameters)
+ [予約メモリ管理パラメータの指定](#redis-reserved-memory-management-change)

## 予約メモリはどれくらい必要ですか。
<a name="redis-memory-management-need"></a>

2.8.22 より前の Redis OSS バージョンを実行している場合、Redis OSS 2.8.22 以降を実行する場合より多くのメモリをバックアップとフェイルオーバーのために確保します。この要件は、ElastiCache for Redis OSS がバックアッププロセスを実装する方法の違いによるものです。目安として、2.8.22 より前のバージョンの Redis OSS オーバーヘッドではノードタイプの `maxmemory` 値の半分を、Redis OSS バージョン 2.8.22 以降では 4 分の 1 を確保します。

ElastiCache がバックアップとレプリケーションプロセスを実装する方法が異なるため、目安は `reserved-memory-percent` パラメータを使用してノードタイプの `maxmemory` 値の 25% を予約することです。これはデフォルト値であり、ほとんどのケースで推奨されます。

バースト可能なマイクロインスタンスタイプと小さいインスタンスタイプが `maxmemory` 制限近くで動作している場合、スワップの使用が発生する可能性があります。バックアップ、レプリケーション、高トラフィック時にこれらのインスタンスタイプの運用上の信頼性を向上させるには、`reserved-memory-percent` パラメータの値を小さいインスタンスタイプでは最大 30%、マイクロインスタンスタイプでは最大 50% に増やすことをお勧めします。

データ階層化を使用する ElastiCache クラスターの書き込み負荷の高いワークロードでは、`reserved-memory-percent` をノードの使用可能なメモリの最大 50%まで増やすことをお勧めします。

詳細については次を参照してください:
+ [Valkey または Redis OSS スナップショットを作成するのに十分なメモリがあることを確認する](BestPractices.BGSAVE.md)
+ [同期とバックアップの実装方法](Replication.Redis.Versions.md)
+ [ElastiCache のデータ階層化](data-tiering.md)

## 予約メモリを管理するパラメータ
<a name="redis-memory-management-parameters"></a>

2017 年 3 月 16 日以降、Amazon ElastiCache には `reserved-memory` と `reserved-memory-percent` という、Valkey または Redis OSS メモリを管理するための 2 つの相互に排他的なパラメータがあります。これらのパラメータのいずれも Valkey または Redis OSS ディストリビューションには含まれていません。

ElastiCache ユーザーになった時期に応じて、これらのパラメータのいずれか一方がデフォルトのメモリ管理パラメータになります。このパラメータは、新しい Valkey または Redis OSS クラスターまたはレプリケーショングループを作成し、デフォルトのパラメータグループを使用する場合に適用されます。
+ 2017 年 3 月 16 日より前に開始したユーザーの場合 — デフォルトのパラメータグループを使用して Redis OSS クラスターまたはレプリケーショングループを作成する場合、メモリ管理パラメータは `reserved-memory` になります。この場合、0 バイトのメモリが予約されます。
+ 2017 年 3 月 16 日以降に開始したユーザーの場合 — デフォルトのパラメータグループを使用して Valkey または Redis OSS クラスターまたはレプリケーショングループを作成する場合、メモリ管理パラメータは `reserved-memory-percent` になります。この場合、ノードの `maxmemory` 値の 25% がデータ以外の目的で予約されます。

2 つの Valkey または Redis OSS メモリ管理パラメータの説明を確認した後で、デフォルトではないもの、またはデフォルト以外の値を使用するものを選択することができます。その場合は、他の予約メモリ管理パラメータに変更できます。

そのパラメータの値を変更するには、カスタムパラメータグループを作成し、希望のメモリ管理パラメータと値を使用するように変更します。そうすると、新しい Valkey または Redis OSS クラスターまたはレプリケーショングループを作成するたびに、そのカスタムパラメータグループを使用できるようになります。既存のクラスターまたはレプリケーショングループの場合は、カスタムパラメータグループを使用するように変更できます。

 詳細については次を参照してください: 
+ [予約メモリ管理パラメータの指定](#redis-reserved-memory-management-change)
+ [ElastiCache パラメータグループを作成する](ParameterGroups.Creating.md)
+ [ElastiCache パラメータグループを変更する](ParameterGroups.Modifying.md)
+ [ElastiCache クラスターの変更](Clusters.Modify.md)
+ [レプリケーショングループの変更](Replication.Modify.md)

### 予約メモリのパラメータ
<a name="redis-memory-management-parameters-reserved-memory"></a>

2017 年 3 月 16 日までは、ElastiCache for Redis OSS の予約済みメモリの管理はすべて、パラメータ `reserved-memory` を使用して行われていました。`reserved-memory` のデフォルト値は 0 です。このデフォルトは Valkey または Redis OSS のオーバーヘッド用にメモリを確保せず、Valkey または Redis OSS はノードのメモリすべてをデータ用に消費できます。

バックアップ用およびフェイルオーバー用に使用できる十分なメモリを持てるように `reserved-memory` を変更するには、カスタムパラメータグループを作成する必要があります。このカスタムパラメータグループで、`reserved-memory` を、クラスターおよびクラスターのノードタイプで実行している Valkey または Redis OSS のバージョンに適切な値に設定します。詳細については、[予約メモリはどれくらい必要ですか。](#redis-memory-management-need)を参照してください。

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

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

**予約メモリを使用してメモリを予約するには**

1. 実行中のエンジンバージョンに一致するパラメータグループファミリーを指定するカスタムパラメータグループを作成します。たとえば、`redis2.8` パラメータグループファミリーを指定します。詳細については、「[ElastiCache パラメータグループを作成する](ParameterGroups.Creating.md)」を参照してください。

   ```
   aws elasticache create-cache-parameter-group \
      --cache-parameter-group-name {{redis6x-m3xl}} \
      --description "{{Redis OSS 2.8.x for m3.xlarge node type}}" \
      --cache-parameter-group-family {{redis6.x}}
   ```

1. Valkey または Redis OSS のオーバーヘッドのために予約するメモリのバイト数を計算します。ノードタイプに対する `maxmemory` 値を [Redis OSS のノードタイプに固有のパラメータ](ParameterGroups.Engine.md#ParameterGroups.Redis.NodeSpecific) で確認できます。

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

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

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

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

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

   ```
   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` を変更しています。詳細については、[レプリケーショングループの変更](Replication.Modify.md) を参照してください。

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

### 予約メモリパーセントパラメータ
<a name="redis-memory-management-parameters-reserved-memory-percent"></a>

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

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

r6gd ファミリーのノードを使用しているクラスターでメモリ使用量が 75% に達すると、データ階層化が自動的にトリガーされます。詳細については、「[ElastiCache のデータ階層化](data-tiering.md)」を参照してください。

**reserved-memory-percent を使用してメモリを予約するには**  
`reserved-memory-percent` を使用して、ElastiCache for Redis OSS クラスターでメモリを管理するには、以下のいずれかを実行します。
+ Redis OSS 2.8.22 以降を実行している場合は、クラスターに、デフォルトのパラメータグループを割り当てます。デフォルトの 25 パーセントで十分です。そうでない場合、次のステップを実行して、値を変更します。
+ 2.8.22 より前の Redis OSS のバージョンを実行している場合、`reserved-memory-percent` のデフォルトの 25 パーセントよりも多くのメモリを確保する必要があると考えられます。そのためには、次の手順を使用します。

**reserved-memory-percent の値を変更するには**

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

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

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

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

   ```
   aws elasticache modify-cache-parameter-group \
      --cache-parameter-group-name {{redis28-50}} \
      --parameter-name-values "ParameterName=reserved-memory-percent, ParameterValue={{50}}"
   ```

1. 2.8.22 より前の Redis OSS のバージョンを実行している Redis OSS クラスターまたはレプリケーショングループに対して、このカスタムパラメータグループを使用します。

   次の CLI の例では、カスタムパラメータグループ `redis28-50` をすぐに使用するように Redis OSS クラスター `my-redis-cluster` を変更します。詳細については、「[ElastiCache クラスターの変更](Clusters.Modify.md)」を参照してください。

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

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

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

## 予約メモリ管理パラメータの指定
<a name="redis-reserved-memory-management-change"></a>

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

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

**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` に値を割り当てる必要があります。詳細については、「[ElastiCache パラメータグループを変更する](ParameterGroups.Modifying.md)」を参照してください。

```
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` に設定します。詳細については、「[ElastiCache パラメータグループを変更する](ParameterGroups.Modifying.md)」を参照してください。

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