管理 Valkey 和 Redis 的预留内存 OSS - 亚马逊 ElastiCache

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

管理 Valkey 和 Redis 的预留内存 OSS

预留内存是为非数据使用情况留出的内存。执行备份或故障转移时,当集群的数据写入.rdb 文件时,Valkey 和 Redis 会OSS使用可用内存来记录对集群的写入操作。如果您没有足够的内存可供所有写入使用,则进程失败。接下来,您可以找到有关管理 ElastiCache (RedisOSS) 预留内存的选项以及如何应用这些选项的信息。

您需要预留多少内存?

如果您运行的是 2.8.22 OSS 之前的 Redis 版本,请比运行 Redis 2.8.22 或更高版本时为备份和故障转移预留更多的内存。OSS此要求是由于 ElastiCache (RedisOSS) 实施备份过程的方式不同。经验法则是,为 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 (RedisOSS)预留内存管理均使用该参数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 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 值。

  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并在所有版本的 ElastiCache (RedisOSS) 上推出了该参数。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要使用管理您的 ElastiCache (RedisOSS) 集群上的内存,请执行以下操作之一:

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

  • 如果您运行的是 2.8.22 OSS 之前的 Redis 版本,则可能需要预留比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. 对于运行低于 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-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 (RedisOSS)集群或复制组,都是如此。但是,您可以使用 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"