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

缓解故障

规划 Amazon ElastiCache 实施时,您应做好计划以最大程度地减小故障对应用程序和数据产生的影响。本部分中的主题涵盖了可用来防止应用程序和数据出现故障的方法。

缓解运行 Redis 时发生的故障

运行 Redis 引擎时,您有以下选项来最大程度地减小节点故障或可用区故障的影响。

缓解节点故障

要缓解 Redis 节点故障的影响,您有以下选择:

缓解故障:Redis 仅附加文件 (AOF)

在为 Redis 启用 AOF 的情况下,只要向 Redis 集群写入数据,相应的事务记录便会写入 Redis 仅附加文件 (AOF) 中。如果 Redis 进程重新启动,则 ElastiCache 会创建并预配置替换集群。随后,您可以对集群运行 AOF 以向其重新填充数据。

使用 Redis AOF 缓解集群故障的一些缺点如下所示:

  • 非常耗时。

    创建并预配置集群可能需要几分钟的时间。根据 AOF 的大小,如果应用程序无法访问数据的集群,对集群运行 AOF 将增加更多的时间。这将强制应用程序直接访问数据库。

     

  • AOF 可能会变大。

    由于每次对集群写入的内容都会写入到事务记录中,因此 AOF 会变得非常大并超过相关数据集的 .rdb 文件的大小。由于 ElastiCache 依赖于本地实例存储(大小受到限制),因此启用 AOF 可能会导致磁盘空间不足的问题。您可以通过使用启用了多可用区的复制组来避免磁盘空间不足的问题。

     

  • 使用 AOF 不能防范所有故障情况。

    例如,如果节点由于底层物理服务器中的硬件故障而出现故障,则 ElastiCache 会在不同服务器上预配置新节点。在这种情况下,AOF 将不再可用,且无法用于恢复数据。

有关更多信息,请参阅 ElastiCache for Redis 仅附加文件 (AOF)

缓解故障:Redis 复制组

Redis 复制组包含一个应用程序可从中读取和写入的主节点和 1 至 5 个只读副本节点。在向主节点写入数据时,也会在只读副本节点上异步更新此数据。

在只读副本发生故障的情况下

  1. ElastiCache 将检测到发生故障的只读副本。

  2. ElastiCache 使发生故障的节点脱机。

  3. ElastiCache 在同一可用区中启动和预配置替换节点。

  4. 新节点与主节点同步。

在此期间,应用程序可使用其他节点继续读取和写入。

具有自动故障转移功能的 Redis 多可用区

可以在 Redis 复制组上启用具有自动故障转移功能的多可用区。无论是否启用具有自动故障转移功能的多可用区,都将自动检测并替换发生故障的主集群。执行此操作的方式因是否启用多可用区而异。

在启用具有自动故障转移功能的多可用区的情况下

  1. ElastiCache 将检测到主节点故障。

  2. ElastiCache 将复制滞后最低的只读副本节点提升为主节点。

  3. 其他副本将与新的主节点同步。

  4. ElastiCache 在发生故障的主集群的可用区中启动只读副本。

  5. 新节点将与新提升的主节点同步。

故障转移到副本节点的速度通常比创建并预配置新主节点的速度要快。这意味着,与未启用多可用区的情况相比,您的应用程序可更快地恢复对主节点的写入。

有关更多信息,请参阅最大程度地减少停机时间:具有自动故障转移功能的多可用区

在禁用具有自动故障转移功能的多可用区的情况下

  1. ElastiCache 将检测到主集群故障。

  2. ElastiCache 将主节点脱机。

  3. ElastiCache 创建和预配置新的主节点以替换发生故障的主节点。

  4. ElastiCache 将新的主节点与现有副本节点之一同步。

  5. 同步完成时,新节点将发挥集群主节点的功能。

在此过程中,步骤 1 到 4,您的应用程序无法写入主节点。不过,您的应用程序会继续从副本节点进行读取。

要提供额外保护,建议您启动在不同可用区 (AZ) 的复制组中的节点。如果这样做,可用区故障将仅影响该可用区中的节点,而不会影响其他节点。

有关更多信息,请参阅 使用复制组的高可用性

缓解可用区故障

要缓解可用区故障的影响,请将节点置于尽可能多的可用区中。

无论您有多少个节点,如果所有这些节点都位于相同的可用区内,则该可用区的灾难性故障会导致您丢失所有缓存数据。但是,如果您将节点置于多个可用区内,则任一可用区的故障只会导致您丢失该可用区内的节点。

只要您丢失节点,就会导致性能下降,因为现在共享读取操作的节点更少了。在替换节点之前,性能下降将继续。由于未跨 Redis 节点对数据进行分区,因此仅在主节点丢失时才有可能丢失某些数据。

有关为 Redis 节点指定可用区的信息,请参阅创建 Redis (已禁用集群模式) 集群 (控制台)

有关区域和可用区的更多信息,请参阅选择区域和可用区

建议

您需要规划两种类型的故障:单个节点故障和广泛的可用区故障。最佳的故障缓解计划将解决这两种故障。

尽可能减少故障的影响

为了尽可能减少节点故障的影响,我们建议您的实施在每个分片中使用多个节点,并将节点分布在多个可用区上。

如果您正在运行 Redis,我们建议您在复制组上启用多可用区,以便在主节点出现故障时,ElastiCache 将自动故障转移到副本。

最大程度地减小可用区故障的影响

要最大程度地减小可用区故障的影响,建议您在提供的不同可用区内启动节点。跨可用区均匀分布节点将最大程度地减小极少发生的可用区故障的影响。

其他预防措施

如果您正在运行 Redis,除了上述预防措施之外,建议您定期对集群进行备份。备份(快照)会创建一个 .rdb 文件,在出现故障或损坏时,可使用此文件还原集群。有关更多信息,请参阅 ElastiCache for Redis 备份与还原