本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
数据分层 ElastiCache
ElastiCache 对于构成复制组并使用 r6gd 系列节点类型的 Valkey 或 Redis OSS 集群,其数据在内存和本地SSD(固态驱动器)存储之间分层。数据分层为Valkey或Redis OSS 工作负载提供了一种新的性价比选项,它除了在内存中存储数据外,还在每个群集节点中使用成本较低的固态硬盘 (SSDs)。它非常适合定期访问其总数据集的20%的工作负载,以及访问数据时可以容忍额外延迟的SSD应用程序。
在具有数据分层的 ElastiCache 集群上, ElastiCache 监控其存储的每个项目的最后访问时间。当可用内存 (DRAM) 被完全消耗时, ElastiCache使用最近最少使用的 (LRU) 算法将不经常访问的项目自动从内存移动到。SSD随后访问上的SSD数据时, ElastiCache 会在处理请求之前自动异步将其移回内存。如果您的工作负载只会经常访问部分数据,则数据分层将是经济高效地扩缩容量的极佳方法。
请注意,使用数据分层时,密钥本身始终保留在内存中,而LRU控制值在内存与磁盘上的位置。通常,在使用数据分层时,我们建议您的键大小小于值。
数据分层旨在将对应用程序工作负载的性能影响降至最低。例如,假设字符串值为 500 字节,与对内存中数据的请求SSD相比,对存储在上的数据的请求平均会有 300 微秒的延迟。
如果使用最大型号的数据分层节点 (cache.r6gd.16xlarge),您可以在单个 500 节点集群中存储最高 1PB 的数据(使用 1 个只读副本时 500TB)。数据分层与中支持的所有 Valkey 或 Redis OSS 命令和数据结构兼容。 ElastiCache使用此功能无需任何客户端更改。
最佳实践
我们建议您遵循以下最佳实践:
数据分层非常适合定期访问其总数据集 20% 的工作负载,也适用于在访问数据时可以容忍额外延迟的应用程序。SSD
使用数据分层节点上的可用SSD容量时,我们建议值大小大于密钥大小。当项目在DRAM和之间移动时SSD,密钥将始终保留在内存中,并且只有值会被移动到该SSD层。
限制
数据分层功能存在以下限制:
您只能在复制组中的集群上使用数据分层。
您使用的节点类型必须属于 r6gd 系列,目前可在以下区域使用:
us-east-2
、us-east-1
、us-west-2
、us-west-1
、eu-west-1
、eu-central-1
、eu-north-1
、eu-west-3
、ap-northeast-1
、ap-southeast-1
、ap-southeast-2
、ap-south-1
、ca-central-1
和sa-east-1
。你必须使用 Valkey 7.2 或更高版本或 Redis OSS 6.2 或更高版本的引擎。
除非两个集群都为 r6gd 集群,否则不能将 r6gd 集群的备份还原到其他集群。
不能将使用数据分层功能的集群备份导出到 Amazon S3。
在 r6gd 节点类型上运行的集群不支持在线迁移。
不支持将使用数据分层功能的集群(例如,使用 r6gd 节点类型的集群)扩缩至不使用数据分层功能的集群(例如,使用 r6g 节点类型的集群)。有关更多信息,请参阅 缩放 ElastiCache。
使用 Valkey 7.2 及更高版本以及 Red OSS is 7.0.7 及更高版本的数据分层的集群支持自动扩展。有关更多信息,请参阅 Auto Scaling Valkey 和 Redis 集群 OSS
数据分层仅支持
volatile-lru
、allkeys-lru
、volatile-lfu
、allkeys-lfu
和noeviction
maxmemory 策略。Valkey 版本 7.2 及更高版本以及 Redis 版本 7.0.7 及更高OSS版本支持无叉存储。有关更多信息,请参阅 如何实施同步和备份。
大于 128 MiB 的项目不会移动到。SSD
定价
与 R6g 节点(仅限内存)相比,R6gD 节点的总容量(内存+SSD)高 4.8 倍,在以最大利用率运行时,可以帮助您节省 60% 以上。有关更多信息,请参阅ElastiCache 定价
监控
ElastiCache 提供专为监控使用数据分层的性能集群而设计的指标。要监控中的项目DRAM与之比例SSD,你可以使用 Valkey 和 Redis OSS 指标中的指标。CurrItems
您可以按以下方式计算百分比:(CurrItems 使用维度:层 = 内存 x 100)/(CurrItems 没有维度筛选器)。
如果配置的驱逐策略允许,则当内存中的项目百分比降至5%以下时, ElastiCache 将开始驱逐项目。在配置了 noeviction 策略的节点上,写入操作将收到内存不足错误。
当内存中的项目百分比降至低于 5% 时,仍建议您考虑向上扩展已启用集群模式的集群,或者考虑向上扩展已禁用集群模式的集群。有关扩展的更多信息,请参阅在 Valkey 或 Redis 中扩展集群OSS(已启用集群模式)。有关使用数据分层的 Valkey 或 Redis OSS 集群指标的更多信息,请参阅。Valkey 和 Redis 的指标 OSS
数据分层功能的使用
您可在创建复制组中的集群时选择 r6gd 系列的节点类型(例如 cache.r6gd.xlarge),从而使用数据分层功能。选择该节点类型将会自动启用数据分层功能。
有关创建集群的更多信息,请参阅为 Valkey 或 Redis 创建集群 OSS。
使用创建复制组时 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 } }
将数据从备份还原到启用数据分层的集群
您可以使用(控制台)、()或(ElastiCache API)将备份还原到启用了数据分层的新集群。AWS CLI当您使用 r6gd 系列的节点类型创建集群时,系统会启用数据分层。
从备份还原到启用数据分层的集群(控制台)
-
登录 AWS Management Console 并打开 ElastiCache 控制台,网址为 https://console.aws.amazon.com/elasticache/
。 -
从导航窗格中,选择 Backups(备份)。
-
在备份列表中,选择您要从中进行还原的备份名称左侧的复选框。
-
选择 Restore(还原)。
-
完成 Restore Cluster(还原集群)对话框。务必要填写所有 Required(必填)字段以及您希望更改原定设置的任何其他字段。
-
Cluster ID(集群 ID)– 必填。新集群的名称。
-
已启用集群模式(横向扩展)— 为 Valkey 或 RedisOSS(已启用集群模式)集群选择此选项。
-
Node Type(节点类型)– 选择 cache.r6gd.xlarge 或 r6gd 系列中的任何其他节点类型。
-
分片数量 — 选择新集群中想要的分片数量(API/CLI:节点组)。
-
Replicas per Shard(每个分区的副本数)– 选择您希望各分区拥有的只读副本节点数量。
-
Slots and keyspaces(槽和键空间) – 选择您希望如何在分区之间分布键。如果您选择指定键分配,请完成为各分片指定键范围的表。
-
Availability zone(s)(可用区)– 指定您希望如何选择集群的可用区。
-
Port(端口)– 仅当您希望新集群使用不同端口时才更改此项。
-
选择一个 VPC — 选择要VPC在其中创建此集群的。
-
参数组-选择一个参数组,该组应为所选节点类型的 Valkey 或 Redis OSS 开销预留足够内存。
-
-
根据需要进行设置后,选择创建。
有关创建集群的更多信息,请参阅为 Valkey 或 Redis 创建集群 OSS。
使用创建复制组时,默认情况下 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 } }