ElastiCache for Redis 备份和还原
运行 Redis 的 Amazon ElastiCache 集群可对其数据进行备份。可以使用备份还原集群或为新集群做种。备份包含集群的元数据以及集群中的所有数据。所有备份都会写入 Amazon Simple Storage Service (Amazon S3),该服务提供持久存储。您随时可通过创建新的 Redis 集群并向该集群填充备份中的数据来还原数据。使用 ElastiCache,您可以使用 Amazon Web Services Management Console、Amazon Command Line Interface (Amazon CLI) 和 ElastiCache API 管理备份。
从 Redis 版本 2.8.22 开始,将基于可用内存选择备份方法。如果有足够的可用内存,则会生成一个子进程,该进程会在对缓存进行备份时将所有更改写入缓存的预留内存。根据备份过程中对缓存进行写入的次数,此子进程可能会占用所有预留内存,从而导致备份失败。
如果可用内存不足,则将使用无分支的协作式后台进程。此无分支方法会影响延迟和吞吐量。有关更多信息,请参阅如何实施同步和备份。
有关备份过程的性能影响的更多信息,请参阅备份的性能影响。
在下面,您可以找到使用备份和还原的概述。
备份过程有时无法创建备份(包括最终备份),不过这种情况很少见。预留内存不足通常是导致备份失败的原因。因此,请确保在尝试备份之前有足够的预留内存。如果您拥有的内存不足,可以移出一些密钥或者增大 reserved-memory-percent
的值。
有关更多信息,请参阅下列内容:
如果您计划删除集群并且保留数据很重要,则可以采取额外的预防措施。为此,请先创建手动备份,验证其状态是否是可用,然后删除集群。这样做可确保如果备份失败,您仍然可以使用集群数据。您可以按照前面概述的最佳实践重新尝试创建备份。
主题
备份约束
在计划或创建备份时考虑以下约束:
-
当前,仅 Redis 上运行的集群支持备份和还原。
-
Redis(已禁用集群模式)集群的
cache.t1.micro
节点上不支持备份和还原。支持所有其他缓存节点类型。 -
Redis(已启用集群模式)集群的所有节点类型均支持备份和还原。
-
在任何连续的 24 小时期间,针对集群中每个节点所创建的手动备份不能超过 20 个。
-
Redis(已启用集群模式)仅支持在集群级别(对于 API 或 CLI,为复制组级别)进行备份。Redis(已启用集群模式)不支持在分区级别(对于 API 或 CLI,为节点组级别)进行备份。
-
在备份过程中,您无法在集群上运行任何其他 API 或 CLI 操作。
-
如果使用启用了数据分层功能的集群,则无法将备份导出到 Amazon S3。
-
您只能将使用 r6gd 节点类型的集群备份还原到使用 r6gd 节点类型的集群。
备份成本
使用 ElastiCache,您可以免费为每个活动 Redis 集群存储一个备份。对于所有 Amazon 区域,针对其他备份所用的存储空间按每月 0.085 美元/GB 的费率收费。对于创建备份或者将备份中的数据还原到 Redis 集群,没有数据传输费。
备份的性能影响
备份过程取决于您正在运行的 Redis 版本。从 Redis 2.8.22 开始,此过程是无分支的。
运行 Redis 2.8.22 及更高版本时备份
在 2.8.22 版及更高版本中,Redis 备份可在两种方法之间选择。如果内存不足,无法支持分支的备份,ElastiCache 会使用采用协作式后台处理的无分支方法。如果有足够的内存来支持分支的保存过程,则采用早期 Redis 版本中的相同过程。
如果在无分支备份期间写入负载较高,则会延迟对缓存的写入。此延迟可确保您不会累积太多更改,从而阻止成功备份。
运行 2.8.22 之前的 Redis 版本时备份
备份是使用 Redis 的本机 BGSAVE 操作创建的。缓存节点上的 Redis 进程生成子进程,用于将所有数据从缓存写入 Redis .rdb 文件。生成子进程最多可能需要 10 秒钟。在此期间,父进程无法接受传入的应用程序请求。子进程独立运行之后,父进程恢复正常操作。子进程在备份操作完成时退出。
写入备份期间,使用其他缓存节点内存进行新写入。如果这一其他内存使用超过节点的可用内存,则处理可能由于分页过多而变慢或失败。
提升备份性能
以下是提高备份性能的准则。
-
设置
reserved-memory-percent
参数 – 为了缓解过多分页问题,我们建议设置 reserved-memory-percent 参数。此参数可防止 Redis 使用节点的所有可用内存,有助于减少分页量。只需使用更大的节点,您也可以获得性能改进。有关 reserved-memory 和 reserved-memory-percent 参数的更多信息,请参阅 管理预留内存。 -
从只读副本创建备份 – 如果您正在具有多个节点的节点组中运行 Redis,则可以从主节点或一个只读副本进行备份。由于在 BGSAVE 期间需要系统资源,因此我们建议您从一个只读副本上创建备份。从副本创建备份时,主节点不受 BGSAVE 资源要求的影响。主节点可以继续处理请求,而不会降低速度。
若要执行此操作,请参阅 创建手动备份(控制台),并在 Create Backup(创建备份)窗口中的 Cluster Name(集群名称)字段中,选择副本而不是默认主节点。
如果您删除复制组并请求最终备份,则 ElastiCache 始终从主节点进行备份。这可确保您在删除复制组之前捕获最新的 Redis 数据。