

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 数据分层 ElastiCache
<a name="data-tiering"></a>

ElastiCache 对于组成复制组并使用 r6gd 系列节点类型的 Valkey 或 Redis OSS 集群，其数据在内存和本地 SSD（固态驱动器）存储之间分层。借助数据分层功能，除可在内存中存储数据外，还可以在每个集群节点中使用成本更低的固态硬盘（SSD），从而为 Valkey 或 Redis OSS 工作负载提供新的高性价比选择。它非常适合经常访问的数据不超过总体数据集的 20% 的工作负载，以及能够容忍访问 SSD 中数据时所出现的额外延迟的应用程序。

在具有数据分层的 ElastiCache 集群上， ElastiCache 监控其存储的每个项目的最后访问时间。当可用内存 (DRAM) 被完全消耗时， ElastiCache使用最近最少使用的 (LRU) 算法将不经常访问的内容自动从内存移动到固态硬盘。随后访问固态硬盘上的数据时， ElastiCache 会在处理请求之前自动异步将其移回内存。如果您的工作负载只会经常访问部分数据，则数据分层将是经济高效地扩缩容量的极佳方法。

请注意，使用数据分层时，键本身始终保留在内存中，而 LRU 将控制值在内存和磁盘上的位置。通常，在使用数据分层时，我们建议您的键大小小于值。

数据分层旨在将对应用程序工作负载的性能影响降至最低。例如，假设 500 字节的字符串值，与请求存储在内存中的数据相比，请求存储在 SSD 上的数据预计平均会增加 300 微秒的延迟。

如果使用最大型号的数据分层节点 (cache.r6gd.16xlarge)，您可以在单个 500 节点集群中存储最高 1PB 的数据（使用 1 个只读副本时 500TB）。数据分层与中支持的所有 Valkey 或 Redis OSS 命令和数据结构兼容。 ElastiCache使用此功能无需任何客户端更改。

**Topics**
+ [最佳实践](#data-tiering-best-practices)
+ [限制](#data-tiering-prerequisites)
+ [定价](#data-tiering-pricing)
+ [监控](#data-tiering-monitoring)
+ [数据分层功能的使用](#data-tiering-enabling)
+ [将数据从备份还原到启用数据分层的集群](#data-tiering-enabling-snapshots)

## 最佳实践
<a name="data-tiering-best-practices"></a>

我们建议您遵循以下最佳实践：
+ 数据分层非常适合经常访问的数据不超过总体数据集的 20% 的工作负载，以及能够容忍访问 SSD 中数据时所出现的额外延迟的应用程序。
+ 在数据分层节点上使用可用的 SSD 容量时，我们建议值大小大于键。在 DRAM 和 SSD 之间移动项目时，键将始终保留在内存中，并且只有值会移动到 SSD 层。

## 限制
<a name="data-tiering-prerequisites"></a>

数据分层功能存在以下限制：
+ 您只能在复制组中的集群上使用数据分层。
+ 您使用的节点类型必须来自 r6gd 系列。
+ 您必须使用 Valkey 7.2 或更高版本的引擎，或者使用 Redis OSS 6.2 或更高版本的引擎。
+ 除非两个集群都为 r6gd 集群，否则不能将 r6gd 集群的备份还原到其他集群。
+ 不能将使用数据分层功能的集群备份导出到 Amazon S3。
+ 在 r6gd 节点类型上运行的集群不支持在线迁移。
+ 不支持在启用数据分层和禁用数据分层的集群之间进行扩展。要将数据从禁用数据分层的 ElastiCache 集群迁移到启用了数据分层的集群，您可以将备份还原到启用了数据分层的新集群。有关更多信息，请参阅 [缩放 ElastiCache](Scaling.md)。
+ 对于 Valkey 7.2 及更高版本和 Redis OSS 7.0.7 及更高版本，使用数据分层的集群支持自动扩缩。有关更多信息，请参阅 [自动扩缩 Valkey 和 Redis OSS 集群](AutoScaling.md)。
+ 数据分层仅支持 `volatile-lru`、`allkeys-lru`、`volatile-lfu`、`allkeys-lfu` 和 `noeviction` maxmemory 策略。
+ Valkey 7.2 及更高版本和 Redis OSS 7.0.7 及更高版本支持无分支保存。有关更多信息，请参阅 [如何实施同步和备份](Replication.Redis.Versions.md)。
+ 大于 128MiB 的项目不会移动到 SSD。
+ 从 Valley 8.1 及更高版本开始，键 \+ 值大小小于 40 字节的项目将不会移至 SSD。

## 定价
<a name="data-tiering-pricing"></a>

与 R6g 节点（仅内存）相比，R6gd 节点的总存储容量（内存 \+ SSD）提高了 4.8 倍，以最大利用率运行时可帮助实现超过 60% 的节省。有关更多信息，请参阅[ElastiCache 定价](https://aws.amazon.com/elasticache/pricing/)。

## 监控
<a name="data-tiering-monitoring"></a>

ElastiCache 提供专为监控使用数据分层的性能集群而设计的指标。要监控 DRAM 中的项目与 SSD 的比例，可以使用 [Valkey 和 Redis OSS 的指标](CacheMetrics.Redis.md)中的 `CurrItems` 指标。您可以按以下方式计算百分比：*（CurrItems 使用维度：层 = 内存 x 100）/（CurrItems 没有维度筛选器）*。

 如果配置的驱逐策略允许，则 ElastiCache 将在剩余的可用内存 (DRAM) 不到 5% 时开始逐出项目。在配置了 noeviction 策略的节点上，写入操作将收到内存不足错误。

 当剩余的可用内存 (DRAM) 不到 5% 时，仍建议您考虑向上扩展已启用集群模式的集群，或者向上扩展已禁用集群模式的集群。有关扩展的更多信息，请参阅[扩缩 Valkey 或 Redis OSS（已启用集群模式）集群](scaling-redis-cluster-mode-enabled.md)。有关使用数据分层的 Valkey 或 Redis OSS 集群指标的更多信息，请参阅 [Valkey 和 Redis OSS 的指标](CacheMetrics.Redis.md)。

## 数据分层功能的使用
<a name="data-tiering-enabling"></a>

### 使用数据分层使用 AWS 管理控制台
<a name="data-tiering-enabling-console"></a>

您可在创建复制组中的集群时选择 r6gd 系列的节点类型（例如 *cache.r6gd.xlarge*），从而使用数据分层功能。选择该节点类型将会自动启用数据分层功能。

有关创建集群的更多信息，请参阅[创建 Valkey 或 Redis OSS 集群](Clusters.Create.md)。

### 使用启用数据分层 AWS CLI
<a name="data-tiering-enabling-cli"></a>

使用创建复制组时 AWS CLI，您可以通过从 r6gd 系列中选择节点类型（例如 c *ache.r6gd.xlar* ge）并设置参数来使用数据分层。`--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 OSS cluster with data tiering" \
   --num-node-groups 1 \
   --replicas-per-node-group 1 \
   --cache-node-type cache.r6gd.xlarge \
   --engine redis \   
   --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 OSS cluster with data tiering" ^
   --num-node-groups 1 ^
   --replicas-per-node-group 1 ^
   --cache-node-type cache.r6gd.xlarge ^
   --engine redis ^   
   --cache-subnet-group-name default ^
   --automatic-failover-enabled ^
   --data-tiering-enabled
```

运行此操作后，您将会看到一条与以下类似的响应：

```
{
    "ReplicationGroup": {
        "ReplicationGroupId": "redis-dt-cluster",
        "Description": "Redis OSS cluster with data tiering",
        "Status": "creating",           
        "PendingModifiedValues": {},
        "MemberClusters": [
            "redis-dt-cluster"
        ],
        "AutomaticFailover": "enabled",
        "DataTiering": "enabled",
        "SnapshotRetentionLimit": 0,
        "SnapshotWindow": "06:00-07:00",
        "ClusterEnabled": false,
        "CacheNodeType": "cache.r6gd.xlarge",       
        "TransitEncryptionEnabled": false,
        "AtRestEncryptionEnabled": false
    }
}
```

## 将数据从备份还原到启用数据分层的集群
<a name="data-tiering-enabling-snapshots"></a>

您可以使用（控制台）、（）或（ElastiCache API）将备份还原到启用了数据分层的新集群。AWS CLI当您使用 r6gd 系列的节点类型创建集群时，系统会启用数据分层。

### 将数据从备份还原到启用数据分层的集群（控制台）
<a name="data-tiering-enabling-snapshots-console"></a>

**从备份还原到启用数据分层的集群（控制台）**

1. 登录 AWS 管理控制台 并打开 ElastiCache 控制台，网址为[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/)。

1. 从导航窗格中，选择 **Backups**（备份）。

1. 在备份列表中，选择您要从中进行还原的备份名称左侧的复选框。

1. 选择 **Restore**（还原）。

1. 完成 **Restore Cluster**（还原集群）对话框。务必要填写所有 **Required**（必填）字段以及您希望更改原定设置的任何其他字段。

   1. **Cluster ID**（集群 ID）– 必填。新集群的名称。

   1. **已启用集群模式（横向扩展）**– 对 Valkey 或 Redis OSS（已启用集群模式）集群选择此项。

   1. **Node Type**（节点类型）– 选择 **cache.r6gd.xlarge** 或 r6gd 系列中的任何其他节点类型。

   1. **分片数量** — 选择新集群中想要的分片数量（API/CLI：节点组）。

   1. **Replicas per Shard（每个分区的副本数）**– 选择您希望各分区拥有的只读副本节点数量。

   1. **Slots and keyspaces（槽和键空间）** – 选择您希望如何在分区之间分布键。如果您选择指定键分配，请完成为各分片指定键范围的表。

   1. **Availability zone(s)（可用区）**– 指定您希望如何选择集群的可用区。

   1. **Port（端口）**– 仅当您希望新集群使用不同端口时才更改此项。

   1. **Choose a VPC（选择 VPC）**– 选择要在其中创建此集群的 VPC。

   1. **参数组** – 选择为所选节点类型预留了足够 Valkey 或 Redis OSS 内存开销的参数组。

1. 根据需要进行设置后，选择**创建**。

有关创建集群的更多信息，请参阅[创建 Valkey 或 Redis OSS 集群](Clusters.Create.md)。

### 将备份中的数据恢复到启用了数据分层的集群中 (AWS CLI)
<a name="data-tiering-enabling-snapshots-cli"></a>

使用创建复制组时，默认情况下 AWS CLI，通过从 r6gd 系列中选择节点类型（例如 c *ache.r6gd.xlar* ge）并设置参数来使用数据分层。`--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 OSS cluster with data tiering" \
   --num-node-groups 1 \
   --replicas-per-node-group 1 \
   --cache-node-type cache.r6gd.xlarge \
   --engine redis \   
   --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 OSS cluster with data tiering" ^
   --num-node-groups 1 ^
   --replicas-per-node-group 1 ^
   --cache-node-type cache.r6gd.xlarge ^
   --engine redis ^   
   --cache-subnet-group-name default ^
   --automatic-failover-enabled ^
   --data-tiering-enabled ^
   --snapshot-name {{my-snapshot}}
```

运行此操作后，您将会看到一条与以下类似的响应：

```
{
    "ReplicationGroup": {
        "ReplicationGroupId": "redis-dt-cluster",
        "Description": "Redis OSS cluster with data tiering",
        "Status": "creating",           
        "PendingModifiedValues": {},
        "MemberClusters": [
            "redis-dt-cluster"
        ],
        "AutomaticFailover": "enabled",
        "DataTiering": "enabled",
        "SnapshotRetentionLimit": 0,
        "SnapshotWindow": "06:00-07:00",
        "ClusterEnabled": false,
        "CacheNodeType": "cache.r6gd.xlarge",        
        "TransitEncryptionEnabled": false,
        "AtRestEncryptionEnabled": false
    }
}
```