本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
管理 Valkey 和 Redis 的预留内存 OSS
预留内存是为非数据使用情况留出的内存。执行备份或故障转移时,当集群的数据写入.rdb 文件时,Valkey 和 Redis 会OSS使用可用内存来记录对集群的写入操作。如果您没有足够的内存可供所有写入使用,则进程失败。接下来,您可以找到有关管理 Redis 预留内存 ElastiCache 的选项OSS以及如何应用这些选项的信息。
您需要预留多少内存?
如果您运行的是 2.8.22 OSS 之前的 Redis 版本,请比运行 Redis 2.8.22 或更高版本时为备份和故障转移预留更多的内存。OSS此要求是由于 Redis ElastiCache OSS 实现备份过程的方式不同。经验法则是,为 2.8.22 之前的版本保留节点类型maxmemory
值的一半用于 Redis OSS 开销,为版本 2.8.22 及更高版本保留四分之一的 Redis OSS 开销。
由于 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 日之前开始的客户 — 当您使用默认参数组创建 Redis OSS 集群或复制组时,您的内存管理参数为
reserved-memory
。在此情况下,将预留零 (0) 字节内存。 -
对于在 2017 年 3 月 16 日当天或之后开始的客户 — 当您使用默认参数组创建 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
为您在上一步中计算得到的字节数。以下 Amazon CLI 示例假设您运行的是 2.8.22 OSS 之前的 Redis 版本,并且需要保留一半的节点。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
要使用管理 for Redi ElastiCache s OSS 集群上的内存,请执行以下操作之一:
-
如果您运行的是 Redis OSS 2.8.22 或更高版本,请将默认参数组分配给您的集群。默认值 25% 应已足够。否则,请执行以下所述步骤更改该值。
-
如果您运行的是 2.8.22 OSS 之前的 Redis 版本,则可能需要预留比
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
" -
对于运行低于 2.8.22 版本的 Redis 的任何 Redis OSS 集群或复制组,请使用此自定义参数组。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集群还是复制组,都是如此。但是,您可以使用 Amazon 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
"