データ階層化
レプリケーショングループを構成し、r6gd ファミリーのノードタイプを使用するクラスターでは、メモリとローカル SSD (ソリッドステートドライブ) ストレージの間でデータが階層化されます。データ階層化は、データをメモリに保存するだけでなく、各クラスターノードで低コストのソリッドステートドライブ (SSD) を利用することで、Redis ワークロードにコストパフォーマンスの高い新たなオプションを提供します。これは、データセット全体の最大 20% に定期的にアクセスするワークロードや、SSD 上のデータにアクセスする際に増加するレイテンシーを許容できるアプリケーションに最適です。
データ階層化を行うクラスターでは、ElastiCache は保存するすべての項目の最終アクセス時間をモニタリングします。使用可能なメモリ (DRAM) が完全に消費されると、ElastiCache は Least Recently Used (LRU) アルゴリズムを使用して、アクセス頻度の低い項目をメモリから SSD に自動的に移動します。その後、SSD 上のデータにアクセスすると、ElastiCache はリクエストを処理する前に自動的かつ非同期的にデータをメモリに戻します。データのサブセットにのみ定期的にアクセスするワークロードがある場合、データ階層化は容量を優れたコスト効率でスケールするための最適な方法となります。
例えば、500 バイトの文字列値を想定した場合に、メモリ内のデータへのリクエストと比較すると、SSD に保存されたデータへのリクエストには平均で 300 マイクロ秒のレイテンシーが生じることが予想されます。
最も大きいデータ階層化ノードサイズ (cache.r6gd.16xlarge) では、単一の 500 ノードクラスターに最大 1 ペタバイトを保存できます (1 つのリードレプリカを使用する場合は 500 TB)。データ階層化は、ElastiCache でサポートされているすべての Redis コマンドおよびデータ構造と互換性があります。この機能を使用するためのクライアント側の変更は必要ありません。
Limitations
データ階層化には以下の制限があります。
データ階層化は、レプリケーショングループの一部であるクラスターでのみ使用できます。
使用するノードタイプは、
us-east-2
、us-east-1
、us-west-2
、us-west-1
、eu-west-1
、eu-central-1
、ap-northeast-1
、ap-southeast-1
、ap-southeast-2
のリージョンで使用できる r6gd ファミリーのものである必要があります。エンジンは Redis 6.2 以降である必要があります。
r6gd クラスターのバックアップは、r6gd を使用しなければ別のクラスターに復元できません。
データ階層化クラスターのバックアップを Amazon S3 にエクスポートすることはできません。
オンライン移行は、r6gd ノードタイプで実行されるクラスターではサポートされていません。
データ階層化クラスター (r6gd ノードタイプを使用するクラスターなど) からデータ階層化を使用しないクラスター (r6g ノードタイプを使用するクラスターなど) へのスケーリングはサポートされていません。
オートスケーリングは、データ階層化を使用して実行されるクラスターではサポートされていません。
データ階層化では、
volatile-lru
、allkeys-lru
およびnoeviction
の maxmemory ポリシーのみがサポートされます。分岐なしの保存はサポートされていません。詳細については、「同期とバックアップの実装方法」を参照してください。
128 MiB を超える項目は SSD に移動されません。
データ階層化の料金
R6gd ノードは R6g ノード (メモリのみ) と比較して 4.8 倍の合計容量 (メモリ + SSD) を備えており、最大使用率で実行すると 60 % 以上のコスト削減を実現できます。詳細については、ElastiCache の料金
Monitoring
ElastiCache for Redis は、データ階層化を使用するクラスターのパフォーマンスをモニタリングするために特別に設計されたメトリクスを提供します。詳細については、Redis のメトリクス の データ階層化を使用する Redis クラスターのメトリクスを参照してください。
データ階層化の使用
レプリケーショングループの一部としてクラスターを作成する場合は、r6gd ファミリーから cache.r6gd.xlarge などのノードタイプを選択し、データ階層化を使用します。ノードタイプを選択すると、データ階層化が自動的に有効になります。
クラスター作成の詳細については、クラスターの作成 を参照してください。
既存のクラスターでデータ階層化を使用するには、ノードタイプを cache.r6gd.xlarge などの r6gd ファミリーのメンバーに変更します。ノードタイプを選択すると、データ階層化が自動的に有効になります。
クラスター作成の詳細については、ElastiCache クラスターの変更 を参照してください。
AWS CLI を使用してレプリケーショングループを作成する場合は、r6gd ファミリーから cache.r6gd.xlarge などのノードタイプを選択し、--data-tiering-enabled
パラメータを設定してデータ階層化を使用します。
r6gd ファミリーからノードタイプを選択する際に、データ階層化をオプトアウトすることはできません。--no-data-tiering-enabled
パラメータを設定すると、オペレーションは失敗します。
Linux、macOS、Unix の場合:
aws elasticache create-replication-group \ --replication-group-id redis-dt-cluster \ --replication-group-description "Redis cluster with data tiering" \ --num-node-groups 1 \ --replicas-per-node-group 1 \ --cache-node-type cache.r6gd.xlarge \ --engine redis \ --engine-version 6.2 \ --cache-subnet-group-name default \ --automatic-failover-enabled \ --data-tiering-enabled
Windows の場合:
aws elasticache create-replication-group ^ --replication-group-id redis-dt-cluster ^ --replication-group-description "Redis cluster with data tiering" ^ --num-node-groups 1 ^ --replicas-per-node-group 1 ^ --cache-node-type cache.r6gd.xlarge ^ --engine redis ^ --engine-version 6.2 ^ --cache-subnet-group-name default ^ --automatic-failover-enabled ^ --data-tiering-enabled
このオペレーションを実行すると、以下のようなレスポンスが表示されます。
{ "ReplicationGroup": { "ReplicationGroupId": "redis-dt-cluster", "Description": "Redis cluster with data tiering", "Status": "creating", "PendingModifiedValues": {}, "MemberClusters": [ "redis-dt-cluster" ], "AutomaticFailover": "disabled", "DataTiering": "enabled", "SnapshotRetentionLimit": 0, "SnapshotWindow": "06:00-07:00", "ClusterEnabled": false, "CacheNodeType": "cache.r6gd.xlarge", "TransitEncryptionEnabled": false, "AtRestEncryptionEnabled": false } }
データ階層化を有効にして、バックアップからクラスターにデータを復元する
(コンソール)、(AWS CLI) または (ElastiCache API) を使用して、データ階層化を有効にした新しいクラスターにバックアップを復元できます。r6gd ファミリーのノードタイプを使用してクラスターを作成すると、データ階層化が有効になります。
データ階層化を有効にして新しいクラスターにバックアップを復元するには (コンソール)
-
AWS Management Console にサインインして、ElastiCache コンソール (https://console.aws.amazon.com/elasticache/
) を開きます。 -
ナビゲーションペインで、[Backups] を選択します。
-
バックアップのリストで、復元元のバックアップ名の左にあるチェックボックスをオンにします。
-
[復元] を選択します。
-
[Restore Cluster] ダイアログボックスに入力します。すべての [Required] (必須) フィールドと、デフォルト値から変更するその他のフィールドに入力します。
-
[クラスター ID] – 必須。新しいクラスターの名前。
-
[Cluster mode enabled (scale out)] – クラスターの場合はこれを選択します。
-
Node Type - cache.r6gd.xlarge または r6gd ファミリーの他のノードタイプを指定します。
-
[シャード数] – 新しいクラスター (API/CLI: ノードグループ) に必要なシャード数を選択します。
-
[Replicas per Shard] – 各シャードに必要なリードレプリカのノード数を選択します。
-
[Slots and keyspaces] – シャード間でキーを分散する方法を選択します。キーの分散を指定する場合は、各シャードのキー範囲を指定するテーブルを作成します。
-
[Availability zone(s)] – クラスターのアベイラビリティーゾーンの選択方法を指定します。
-
[Port] – 新しいクラスターで別のポートを使用する場合のみ、これを選択します。
-
[Choose a VPC] – このクラスターを作成する VPC を選択します。
-
[Parameter Group] – 選択したノードタイプの Redis オーバーヘッドに十分なメモリを予約するパラメータグループを選択します。
-
-
すべての設定が正しいことを確認したら、[作成] を選択します。
クラスター作成の詳細については、クラスターの作成 を参照してください。
AWS CLI を使用してレプリケーショングループを作成する場合、cache.r6gd.xlarge などの r6gd ファミリーからノードタイプを選択し、--data-tiering-enabled
パラメータを設定することで、デフォルトでデータ階層化が使用されます。
r6gd ファミリーからノードタイプを選択する際に、データ階層化をオプトアウトすることはできません。--no-data-tiering-enabled
パラメータを設定すると、オペレーションは失敗します。
Linux、macOS、Unix の場合:
aws elasticache create-replication-group \ --replication-group-id redis-dt-cluster \ --replication-group-description "Redis cluster with data tiering" \ --num-node-groups 1 \ --replicas-per-node-group 1 \ --cache-node-type cache.r6gd.xlarge \ --engine redis \ --engine-version 6.2 \ --cache-subnet-group-name default \ --automatic-failover-enabled \ --data-tiering-enabled \ --snapshot-name
my-snapshot
Linux、macOS、Unix の場合:
aws elasticache create-replication-group ^ --replication-group-id redis-dt-cluster ^ --replication-group-description "Redis cluster with data tiering" ^ --num-node-groups 1 ^ --replicas-per-node-group 1 ^ --cache-node-type cache.r6gd.xlarge ^ --engine redis ^ --engine-version 6.2 ^ --cache-subnet-group-name default ^ --automatic-failover-enabled ^ --data-tiering-enabled ^ --snapshot-name
my-snapshot
このオペレーションを実行すると、以下のようなレスポンスが表示されます。
{ "ReplicationGroup": { "ReplicationGroupId": "redis-dt-cluster", "Description": "Redis cluster with data tiering", "Status": "creating", "PendingModifiedValues": {}, "MemberClusters": [ "redis-dt-cluster" ], "AutomaticFailover": "disabled", "DataTiering": "enabled", "SnapshotRetentionLimit": 0, "SnapshotWindow": "06:00-07:00", "ClusterEnabled": false, "CacheNodeType": "cache.r6gd.xlarge", "TransitEncryptionEnabled": false, "AtRestEncryptionEnabled": false } }