确保你有足够的内存来制作 Valkey 或 Redis 快照 OSS - 亚马逊 ElastiCache

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

确保你有足够的内存来制作 Valkey 或 Redis 快照 OSS

Valkey 7.2 及更高版本以及 Redis OSS 版本 2.8.22 及更高版本中的快照和同步

Valkey 默认支持快照和同步。Redis OSS 2.8.22 引入了无分叉保存过程,允许您分配更多内存供应用程序使用,而不会在同步和保存期间增加交换使用量。有关更多信息,请参阅 如何实施同步和备份

版本 2.8.22 之前的 Redis OSS 快照和同步

当你使用 ElastiCache (RedisOSS) 时,Redis 会在许多情况下OSS调用后台写入命令:

  • 为备份创建快照时。

  • 将副本与复制组中的主副本同步时。

  • 为 Redis 启用仅追加文件功能 (AOF) 时。OSS

  • 将副本提升为主快照时(这会导致主集群/副本同步)。

每当 Redis OSS 执行后台写入进程时,都必须有足够的可用内存来容纳进程开销。内存不足会导致该进程失败。因此,在创建 Redis OSS 集群时,选择具有足够内存的节点实例类型非常重要。

Valkey 和 Redis 的后台写入过程和内存使用情况 OSS

每当调用后台写入进程时,Valkey 和 Redis 都会OSS分叉其进程(请记住,这些引擎是单线程的)。一个分叉将您的数据保存到 OSS Redis .rdb 快照文件中的磁盘中。另一个分叉为所有读取和写入操作提供服务。为确保您的快照是 point-in-time快照,所有数据更新和添加都将写入与数据区域分开的可用内存区域。

只要您在数据保存到磁盘期间拥有足够的可用内存来记录所有写入操作,便不会遇到内存不足的问题。如果出现以下任何情况,您便可能会遇到内存不足的问题:

  • 您的应用程序执行很多写入操作,因此需要大量可用内存来接收新数据或更新的数据。

  • 可用于写入新数据或更新的数据的内存非常少。

  • 您的数据集很大,需要很长时间才能保存到磁盘,因而需要大量写入操作。

下图说明了执行后台写入进程时的内存使用情况。

图像:后台写入过程中的内存使用情况图。

有关执行备份对性能的影响的信息,请参阅备份自行设计的集群所产生的性能影响

有关 Valkey 和 Redis 如何OSS执行快照的更多信息,请参阅 http://valkey.io。

有关区域和可用区的更多信息,请参阅为以下对象选择区域和可用区 ElastiCache

避免在执行后台写入时耗尽内存

每当调用后台写入进程(如BGSAVEBGREWRITEAOF)时,为了防止该进程失败,可用内存必须超过该过程中写入操作所消耗的内存量。最坏的情况是,在后台写入操作期间,每条记录都会更新,一些新记录被添加到缓存中。因此,对于2.8.22之前的Redis版本,我们建议你reserved-memory-percent将设置为50(50%),对于Valkey和所有Redis OSS 版本2.8.22及更高版本,我们建议你将设置为25(25%)。OSS

maxmemory 值指示可供您用于数据和操作开销的内存。因为您无法修改默认参数组中的 reserved-memory 参数,所以必须为集群创建自定义参数组。的默认值reserved-memory为 0,这允许 Redis OSS 将所有的 maxmemory 与数据一起消耗,从而可能为其他用途(例如后台写入进程)留下的内存太少。有关各种节点实例类型的 maxmemory 值,请参阅 Redis OSS 节点类型的特定参数

您也可以使用reserved-memory参数来减少盒子上使用的内存量。

有关中 Valkey 和 Redis 特定参数的更多信息,请参阅。 ElastiCache Valkey 和 Redis 参数 OSS

有关创建和修改参数组的信息,请参阅创建 ElastiCache 参数组修改 ElastiCache 参数组