管理 Valkey 和 Redis OSS 的预留内存 - Amazon ElastiCache

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

管理 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-percentValkey 或 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 预留内存
  1. 创建一个自定义参数组,指定与正在运行的引擎版本匹配的参数组系列,例如,指定 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-family redis6.x
  2. 计算要为 Valkey 或 Redis OSS 开销预留的内存大小。在特定于 Redis OSS 节点类型的参数中可找到适合您节点类型的 maxmemory 值。

  3. 修改自定义参数组,使得参数 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 值。

  4. 修改您的 Redis OSS 集群或复制组以使用自定义参数组。

    以下 CLI 示例修改集群 my-redis-cluster 以立即开始使用自定义参数组 redis28-m3xl。有关更多信息,请参阅 修改集 ElastiCache 群

    aws elasticache modify-cache-cluster \ --cache-cluster-id my-redis-cluster \ --cache-parameter-group-name redis28-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-name redis28-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
  1. 创建一个自定义参数组,指定与正在运行的引擎版本匹配的参数组系列,例如,指定 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-family redis2.8

    由于 reserved-memory-percent 以节点 maxmemory 的百分比来预留内存,因此您无需为每个节点类型设置一个自定义参数组。

  2. 修改自定义参数组,使得 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"
  3. 为任何运行的 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-name redis28-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-name redis28-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-memoryreserved-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.xlargemaxmemory 的 25%。有关更多信息,请参阅 修改 ElastiCache 参数组

aws elasticache modify-cache-parameter-group \ --cache-parameter-group-name redis32-m3xl \ --parameter-name-values "ParameterName=reserved-memory, ParameterValue=3565158400"