本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
管理 Valkey 和 Redis OSS 的预留内存
预留内存是为非数据使用情况留出的内存。执行备份或失效转移时,Valkey 和 Redis OSS 使用可用的内存来记录将集群数据写入 .rdb 文件时对集群执行的写入操作。如果您没有足够的内存可供所有写入使用,则进程失败。接下来,您可以找到有关管理 Redis OSS 预留内存 ElastiCache 的选项以及如何应用这些选项的信息。
您需要预留多少内存?
如果您在运行 2.8.22 版之前的 Redis OSS,则针对备份和失效转移预留的内存量,要高于运行 Redis OSS 2.8.22 版或更高版本时所需的内存量。这一要求是由于 Redis OSS 实现备份过程的方式不同。 ElastiCache 经验法则是,对于 2.8.22 版之前的 Redis OSS,预留节点类型 maxmemory
值一半的内存,对于 Redis OSS 2.8.22 版和更高版本则为四分之一。
由于 ElastiCache 实现备份和复制过程的方式不同,经验法则是使用reserved-memory-percent
参数保留节点类型maxmemory
值的 25%。这是默认值,建议在大多数情况下使用。
当可突增微型和小型实例类型在接近 maxmemory
限制时运行,可能会出现交换使用情况。为了提高这些实例类型在备份、复制和高流量期间的运行可靠性,我们建议将 reserved-memory-percent
参数的值提高到 30%(小型实例类型)和 50%(微型实例类型)。
对于具有数据分层的 ElastiCache 集群上的写入密集型工作负载,我们建议reserved-memory-percent
将节点可用内存最多增加到 50%。
有关更多信息,请参阅下列内容:
用于管理预留内存的参数
自 2017 年 3 月 16 日起,亚马逊 ElastiCache 提供了两个相互排斥的参数来管理你的 Valkey 或 Redis OSS 内存,reserved-memory
以及。reserved-memory-percent
Valkey 或 Redis OSS 发行版中不包含这两个参数。
根据您成为 ElastiCache 客户的时间,这些参数中的一个或另一个是默认的内存管理参数。在您创建新的 Valkey 或 Redis OSS 集群或复制组并使用默认参数组时,此参数适用。
-
对于在 2017 年 3 月 16 日之前开始使用 ElastiCache 的客户,当您使用默认参数组创建 Redis OSS 集群或复制组时,内存管理参数为
reserved-memory
。在此情况下,将预留零 (0) 字节内存。 -
对于在 2017 年 3 月 16 日或之后开始使用 ElastiCache 的客户 – 当您使用默认参数组创建 Valkey 或 Redis OSS 集群或复制组时,内存管理参数为
reserved-memory-percent
。在此情况下,将预留 25% 的节点maxmemory
值用于非数据目的。
在了解了两个 Valkey 或 Redis OSS 内存管理参数后,您可能首选使用不是默认值或具有非默认值的该内存管理参数。如若如此,您可以更改为其他预留内存管理参数。
要更改该参数的值,您可以创建一个自定义参数组并对其进行修改以使用首选内存管理参数和值。然后,每当您创建新的 Valkey 或 Redis OSS 集群或复制组时,都可以使用自定义参数组。对于现有集群或复制组,您可以修改它们以使用自定义参数组。
有关更多信息,请参阅下列内容:
reserved-memory 参数
在 2017 年 3 月 16 日之前,所有针 ElastiCache 对 Redis OSS 的预留内存管理都是使用该参数reserved-memory
完成的。reserved-memory
的默认值为 0。此默认值不为 Valkey 或 Redis OSS 开销预留内存,并允许 Valkey 或 Redis OSS 将所有节点内存用于数据。
您需要创建自定义参数组,才可更改 reserved-memory
以使您有足够的内存可用于备份和故障转移。在此自定义参数组中,您可将 reserved-memory
设置为适用于您的集群和集群节点类型上所运行的 Valkey 或 Redis OSS 版本的值。有关更多信息,请参阅 您需要预留多少内存?
该参数特定reserved-memory
于 ElastiCache一般 Redis OSS 发行版,不属于该发行版的一部分。
以下过程显示如何使用 reserved-memory
来管理 Valkey 或 Redis OSS 集群上的内存。
使用 reserved-memory 预留内存
-
创建一个自定义参数组,指定与正在运行的引擎版本匹配的参数组系列,例如,指定
redis2.8
参数组系列。有关更多信息,请参阅 创建 ElastiCache 参数组。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-familyredis6.x
-
计算要为 Valkey 或 Redis OSS 开销预留的内存大小。在特定于 Redis OSS 节点类型的参数中可找到适合您节点类型的
maxmemory
值。 -
修改自定义参数组,使得参数
reserved-memory
为您在上一步中计算得到的字节数。以下 AWS CLI 示例假设您运行的是 2.8.22 之前的 Redis OSS 版本,并且需要保留一半的节点。maxmemory
有关更多信息,请参阅 修改 ElastiCache 参数组。aws elasticache modify-cache-parameter-group \ --cache-parameter-group-name
redis28-m3xl
\ --parameter-name-values "ParameterName=reserved-memory, ParameterValue=7130316800
"您使用的每个节点类型需要一个单独的自定义参数组,因为每个节点类型的
maxmemory
值不同。因此,每个节点类型需要不同的reserved-memory
值。 -
修改您的 Redis OSS 集群或复制组以使用自定义参数组。
以下 CLI 示例修改集群
my-redis-cluster
以立即开始使用自定义参数组redis28-m3xl
。有关更多信息,请参阅 修改集 ElastiCache 群。aws elasticache modify-cache-cluster \ --cache-cluster-id
my-redis-cluster
\ --cache-parameter-group-nameredis28-m3xl
\ --apply-immediately以下 CLI 示例修改复制组
my-redis-repl-grp
以立即开始使用自定义参数组redis28-m3xl
。有关更多信息,请参阅 修改复制组。aws elasticache modify-replication-group \ --replication-group-id
my-redis-repl-grp
\ --cache-parameter-group-nameredis28-m3xl
\ --apply-immediately
reserved-memory-percent 参数
2017 年 3 月 16 日,亚马逊 ElastiCache 推出了该参数,reserved-memory-percent
并使其在 Redis OSS 的所有 ElastiCache 版本上都可用。reserved-memory-percent
的用途是简化所有集群上的预留内存管理。这是因为它让您可以对各参数组系列 (例如 redis2.8
) 使用单个参数组来管理集群的预留内存,而不管节点类型如何。reserved-memory-percent
的默认值是 25 (25%)。
该参数特定reserved-memory-percent
于 ElastiCache 一般 Redis OSS 发行版,不属于该发行版的一部分。
如果您的集群使用 r6gd 系列的节点类型,且内存利用率达到 75%,则会自动触发数据分层。有关更多信息,请参阅 数据分层 ElastiCache。
要预留内存,请使用 reserved-memory-percent
reserved-memory-percent
要使用管理适用于 Redis OSS 集群 ElastiCache 的内存,请执行以下操作之一:
-
如果您运行的是 Redis OSS 2.8.22 或更高版本,请向集群分配默认参数组。默认值 25% 应已足够。否则,请执行以下所述步骤更改该值。
-
如果您运行的是 Redis OSS 2.8.22 以前的版本,则可能需要预留比
reserved-memory-percent
默认值的 25% 更高的内存。为此,请使用以下过程。
要更改的百分比值 reserved-memory-percent
-
创建一个自定义参数组,指定与正在运行的引擎版本匹配的参数组系列,例如,指定
redis2.8
参数组系列。由于您无法修改默认参数组,所以需要自定义参数组。有关更多信息,请参阅 创建 ElastiCache 参数组。aws elasticache create-cache-parameter-group \ --cache-parameter-group-name
redis28-50
\ --description "Redis OSS 2.8.x 50% reserved
" \ --cache-parameter-group-familyredis2.8
由于
reserved-memory-percent
以节点maxmemory
的百分比来预留内存,因此您无需为每个节点类型设置一个自定义参数组。 -
修改自定义参数组,使得
reserved-memory-percent
为 50 (50%)。有关更多信息,请参阅 修改 ElastiCache 参数组。aws elasticache modify-cache-parameter-group \ --cache-parameter-group-name
redis28-50
\ --parameter-name-values "ParameterName=reserved-memory-percent, ParameterValue=50
" -
为任何运行的 Redis OSS 版本早于 2.8.22 的 Redis OSS 集群或复制组使用此自定义参数组。
以下 CLI 示例修改 Redis OSS 集群
my-redis-cluster
以立即开始使用自定义参数组redis28-50
。有关更多信息,请参阅 修改集 ElastiCache 群。aws elasticache modify-cache-cluster \ --cache-cluster-id
my-redis-cluster
\ --cache-parameter-group-nameredis28-50
\ --apply-immediately以下 CLI 示例修改 Redis OSS 复制组
my-redis-repl-grp
以立即开始使用自定义参数组redis28-50
。有关更多信息,请参阅 修改复制组。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 适用于 Redis 的 OSS 集群还是复制组,都是如此。但是,您可以使用 AWS CLI 或 ElastiCache API 更改您的预留内存管理参数。
参数 reserved-memory
和 reserved-memory-percent
互斥。参数组始终有这两个参数之一,但不能同时有它们两者。您可以通过修改参数组,更改参数组用于管理预留内存的参数。由于您无法修改默认参数组,因此参数组必须是自定义参数组。有关更多信息,请参阅 创建 ElastiCache 参数组。
要指定 reserved-memory-percent
要将 reserved-memory-percent
用作预留内存管理参数,请使用 modify-cache-parameter-group
命令修改自定义参数组。使用 parameter-name-values
参数指定 reserved-memory-percent
及其值。
以下 CLI 示例修改自定义参数组 redis32-cluster-on
,以便使用 reserved-memory-percent
管理预留内存。必须为参数组的 ParameterValue
分配一个值,才能将 ParameterName
参数用于预留内存管理。有关更多信息,请参阅 修改 ElastiCache 参数组。
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 示例修改自定义参数组 redis32-m3xl
,以便使用 reserved-memory
管理预留内存。必须为参数组的 ParameterValue
分配一个值,才能将 ParameterName
参数用于预留内存管理。因为引擎版本比 2.8.22 新,所以我们将该值设置为 3565158400
,它是 cache.m3.xlarge
的 maxmemory
的 25%。有关更多信息,请参阅 修改 ElastiCache 参数组。
aws elasticache modify-cache-parameter-group \ --cache-parameter-group-name
redis32-m3xl
\ --parameter-name-values "ParameterName=reserved-memory, ParameterValue=3565158400
"