用于 Redis 的 Amazon ElastiCache
ElastiCache for Redis 用户指南 (API 版本 2015-02-02)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

管理预留内存

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

您需要预留多少内存?

如果您在运行 2.8.22 版之前的 Redis,则为备份和故障转移预留的内存量,要高于运行 Redis 2.8.22 版或更高版本时所需的内存量。这是由于面向 Redis 的 ElastiCache 采用不同方法实现备份流程,因此产生了此需求。经验法则是,对于 2.8.22 版之前的 Redis,预留节点类型 maxmemory 值一半的内存,对于 Redis 2.8.22 版和更高版本则为四分之一。有关更多信息,请参阅:

用于管理预留内存的参数

自 2017 年 3 月 16 日起,用于 Redis 的 Amazon ElastiCache 提供两个互斥参数(reserved-memoryreserved-memory-percent),用于管理 Redis 内存。这两个参数都不是 Redis 发布版本的一部分。根据您成为 ElastiCache 客户的时间,每当您创建新的 Redis 集群或复制组并使用默认参数组时,这些参数中的一个或另一个都是默认内存管理参数。如果您在 2017 年 3 月 16 日之前已是客户,则每当您使用默认参数组创建 Redis 集群或复制组时,内存管理参数都为 reserved-memory,且预留零 (0) 字节的内存。如果您在 2017 年 3 月 16 日或之后成为客户,则每当您使用默认参数组创建 Redis 集群或复制组时,内存管理参数都为 reserved-memory-percent,且会为非数据目的预留节点 maxmemory 的 25%。

如果在了解两个 Redis 内存管理参数后,您更愿意使用不是默认值或具有非默认数值的参数,您可以更改为另一个预留内存管理参数,然后如果您需要更改该参数的值,则可以创建自定义参数组,修改它以使用首选的内存管理参数和值。然后,每当您创建新的 Redis 集群或复制组时,都可以使用自定义参数组。对于现有集群或复制组,您可以修改它们以使用自定义参数组。有关更多信息,请参阅:

reserved-memory 参数

在 2017 年 3 月 16 日之前,使用参数 reserved-memory 管理所有面向 Redis 的 ElastiCache 的预留内存。reserved-memory 的默认值为 0。此默认值不为 Redis 开销预留内存,并允许 Redis 将所有节点内存用于数据。您需要创建自定义参数组,才可更改 reserved-memory 以使您有足够的内存可用于备份和故障转移。在此自定义参数组中,您可将 reserved-memory 设置为适用于您的集群和集群节点类型上所运行的 Redis 版本的值。有关更多信息,请参阅您需要预留多少内存?

面向 Redis 的 ElastiCache 参数 reserved-memory 特定于面向 Redis 的 ElastiCache,不是 Redis 发布版本的一部分。

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

使用 reserved-memory 预留内存

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

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

  3. 修改自定义参数组,使得参数 reserved-memory 为您在上一步中计算得到的字节数。以下 AWS 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,并在面向 Redis 的 ElastiCache 的所有版本上提供。reserved-memory-percent 的用途是简化所有集群上的预留内存管理。这是因为它让您可以对各参数组系列 (例如 redis2.8) 使用单个参数组来管理集群的预留内存,而不管节点类型如何。reserved-memory-percent 的默认值是 25 (25%)。

面向 Redis 的 ElastiCache 参数 reserved-memory-percent 特定于面向 Redis 的 ElastiCache,不是 Redis 发布版本的一部分。

使用 reserved-memory-percent 预留内存

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

  • 如果您在运行 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 集群或复制组,都是如此。但是,如果您希望使用 AWS 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"