管理预留内存 - Amazon ElastiCache for Redis
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

管理预留内存

预留内存是为非数据使用情况留出的内存。执行备份或故障转移时,Redis 使用可用的内存来记录将集群数据写入 .rdb 文件时对集群执行的写入操作。如果您没有足够的内存可供所有写入使用,则进程失败。以下部分介绍了管理 ElastiCache for Redis 预留内存的选项的相关信息,以及如何应用这些选项。

您需要预留多少内存?

如果您在运行 2.8.22 版之前的 Redis,则针对备份和故障转移预留的内存量,要高于运行 Redis 2.8.22 版或更高版本时所需的内存量。这是由于 ElastiCache for Redis 采用不同方法实现备份流程。经验法则是,对于 2.8.22 版之前的 Redis,预留节点类型 maxmemory 值一半的内存,对于 Redis 2.8.22 版和更高版本则为四分之一。

使用启用数据分层功能的集群时,如果工作负载的写任务繁重,则建议将 maxmemory 增加到节点可用内存的一半。

有关更多信息,请参阅下列内容:

用于管理预留内存的参数

自 2017 年 3 月 16 日起,Amazon ElastiCache for Redis 提供两个互斥参数(reserved-memoryreserved-memory-percent),用于管理 Redis 内存。Redis 发行版中不包含这两个参数。

这二者中的其一将是默认内存管理参数,具体取决于您开始使用 ElastiCache 的时间。在您创建新的 Redis 集群或复制组并使用默认参数组时,此参数适用。

  • 对于在 2017 年 3 月 16 日之前开始使用 ElastiCache 的客户 – 当您使用默认参数组创建 Redis 集群或复制组时,内存管理参数为 reserved-memory。在此情况下,将预留零 (0) 字节内存。

  • 对于在 2017 年 3 月 16 日或之后开始使用 ElastiCache 的客户 – 当您使用默认参数组创建 Redis 集群或复制组时,内存管理参数为 reserved-memory-percent。在此情况下,将预留 25% 的节点 maxmemory 值用于非数据目的。

在了解了两个 Redis 内存管理参数后,您可能首选使用不是默认值或具有非默认值的该内存管理参数。如若如此,您可以更改为其他预留内存管理参数。

要更改该参数的值,您可以创建一个自定义参数组并对其进行修改以使用首选内存管理参数和值。然后,每当您创建新的 Redis 集群或复制组时,都可以使用自定义参数组。对于现有集群或复制组,您可以修改它们以使用自定义参数组。

有关更多信息,请参阅下列内容:

reserved-memory 参数

在 2017 年 3 月 16 日之前,所有 ElastiCache for Redis 预留内存管理均采用 reserved-memory 参数完成。reserved-memory 的默认值为 0。此默认值不为 Redis 开销预留内存,并允许 Redis 将所有节点内存用于数据。

您需要创建自定义参数组,才可更改 reserved-memory 以使您有足够的内存可用于备份和故障转移。在此自定义参数组中,您可将 reserved-memory 设置为适用于您的集群和集群节点类型上所运行的 Redis 版本的值。有关更多信息,请参阅 您需要预留多少内存?

ElastiCache for Redis 的参数 reserved-memory 特定于 ElastiCache for Redis,而且 Redis 发行版中不包含此参数。

以下过程显示如何使用 reserved-memory 来管理 Redis 集群上的内存。

使用 reserved-memory 预留内存

  1. 创建一个自定义参数组,指定与正在运行的引擎版本匹配的参数组系列,例如,指定 redis2.8 参数组系列。有关更多信息,请参阅创建参数组

    aws elasticache create-cache-parameter-group \ --cache-parameter-group-name redis6x-m3xl \ --description "Redis 2.8.x for m3.xlarge node type" \ --cache-parameter-group-family redis6.x
  2. 计算要为 Redis 开销预留的内存大小。在特定于 Redis 节点类型的参数中可找到适合您节点类型的 maxmemory 值。

  3. 修改自定义参数组,使得参数 reserved-memory 为您在上一步中计算得到的字节数。以下 Amazon CLI 示例假设您正在运行 2.8.22 版之前的 Redis,需要预留节点的 maxmemory 的一半。有关更多信息,请参阅修改参数组

    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 集群或复制组以使用自定义参数组。

    以下 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 日,Amazon ElastiCache 引入了参数 reserved-memory-percent,并在 ElastiCache for Redis 所有版本上提供。reserved-memory-percent 的用途是简化所有集群上的预留内存管理。这是因为它让您可以对各参数组系列 (例如 redis2.8) 使用单个参数组来管理集群的预留内存,而不管节点类型如何。reserved-memory-percent 的默认值是 25 (25%)。

ElastiCache for Redis 的参数 reserved-memory-percent 特定于 ElastiCache for Redis,而且 Redis 发行版中不包含此参数。

如果您的集群使用 r6gd 系列的节点类型,且内存利用率达到 75%,则会自动触发数据分层。有关更多信息,请参阅数据分层

使用 reserved-memory-percent 预留内存

若要使用 reserved-memory-percent 管理 ElastiCache for Redis 集群上的内存,请执行以下操作之一:

  • 如果您运行的是 Redis 2.8.22 或更高版本,请向集群分配默认参数组。默认值 25% 应已足够。否则,请执行以下所述步骤更改该值。

  • 如果您运行的是 Redis 2.8.22 以前的版本,则可能需要预留比 reserved-memory-percent 默认值的 25% 更高的内存。为此,请使用以下过程。

更改 reserved-memory-percent 的百分比值

  1. 创建一个自定义参数组,指定与正在运行的引擎版本匹配的参数组系列,例如,指定 redis2.8 参数组系列。由于您无法修改默认参数组,所以需要自定义参数组。有关更多信息,请参阅创建参数组

    aws elasticache create-cache-parameter-group \ --cache-parameter-group-name redis28-50 \ --description "Redis 2.8.x 50% reserved" \ --cache-parameter-group-family redis2.8

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

  2. 修改自定义参数组,使得 reserved-memory-percent 为 50 (50%)。有关更多信息,请参阅修改参数组

    aws elasticache modify-cache-parameter-group \ --cache-parameter-group-name redis28-50 \ --parameter-name-values "ParameterName=reserved-memory-percent, ParameterValue=50"
  3. 为任何运行的 Redis 版本早于 2.8.22 的 Redis 集群或复制组使用此自定义参数组。

    以下 CLI 示例修改 Redis 集群 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 复制组 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 for Redis 集群或复制组,参数和预留内存都是如此。但是,您可以使用 Amazon CLI 或 ElastiCache API 更改预留内存管理参数。

参数 reserved-memoryreserved-memory-percent 互斥。参数组始终有这两个参数之一,但不能同时有它们两者。您可以通过修改参数组,更改参数组用于管理预留内存的参数。由于您无法修改默认参数组,因此参数组必须是自定义参数组。有关更多信息,请参阅创建参数组

指定 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 参数用于预留内存管理。有关更多信息,请参阅修改参数组

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%。有关更多信息,请参阅修改参数组

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