Amazon ElastiCache
用户指南 (API Version 2015-02-02)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

缓解故障

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

缓解运行 Memcached 时发生的故障

运行 Memcached 引擎时,您有以下选择来最大程度地减小故障的影响。故障缓解计划中有两类需要解决的故障:节点故障和可用区故障。

缓解节点故障

要缓解节点故障的影响,请将缓存数据分布到多个节点。由于 Memcached 不支持复制,因此节点故障始终会导致集群中的某些数据丢失。

在创建 Memcached 集群时,您可以使用 1 到 20 个节点或更多节点(根据特殊请求)来创建它。跨更多节点对数据进行分区意味着,在节点出现故障时丢失的数据更少。例如,如果您跨 10 个节点对数据进行分区,则任一节点均可存储您的约 10% 的缓存数据。在此情况下,在创建和预配置替换节点时,节点故障会导致丢失约 10% 的需替换的缓存数据。如果在 3 个较大的节点中对相同的数据进行缓存,则节点故障将导致丢失约 33% 的缓存数据。

如果您需要的节点数多于 Memcached 集群中的 20 节点数或区域中的总 100 节点数,请填写 http://www.amazonaws.cn/contact-us/elasticache-node-limit-request/ 处的提高 ElastiCache 上限请求表。

有关指定 Memcached 集群中的节点数的信息,请转至创建集群:Memcached(控制台)

缓解可用区故障

要缓解可用区故障的影响,请将节点置于尽可能多的可用区中。在出现极少发生的可用区故障时,您只会丢失已在该可用区中缓存的数据,而不会丢失在其他可用区中缓存的数据。

为何要使用如此多的节点?

如果我的区域只有 3 个可用区,既然在可用区出现故障时,我会丢失约三分之一的数据,那么为何我需要 3 个以上的节点?

这个问题问得很好。请记住,我们正在尝试缓解两种不同的故障,即节点故障和可用区故障。您说得对,如果您的数据跨可用区分布且其中一个区域发生故障,则无论您拥有多少个节点,都只会丢失该可用区中缓存的数据。但是,如果节点出现故障,则拥有更多节点将减少丢失的数据的比例。

没有用于确定集群中拥有的节点数的“神奇公式”。您必须权衡数据丢失的影响、发生故障的可能性与成本,并得出您自己的结论。

这个问题问得很好。请记住,我们正在尝试缓解两种不同的故障,即节点故障和可用区故障。您说得对,如果您的数据跨可用区分布且其中一个区域发生故障,则无论您拥有多少个节点,都只会丢失该可用区中缓存的数据。但是,如果节点出现故障,则拥有更多节点将减少丢失的数据的比例。

没有用于确定集群中拥有的节点数的“神奇公式”。您必须权衡数据丢失的影响、发生故障的可能性与成本,并得出您自己的结论。

有关指定 Memcached 集群中的节点数的信息,请转至创建集群:Memcached(控制台)

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

缓解运行 Redis 时发生的故障

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

缓解节点故障

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

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

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

使用 Redis AOF 缓解集群故障有一些缺点,即:

  • 非常耗时。

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

     

  • AOF 可能会变大。

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

     

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

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

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

缓解故障:Redis 复制组

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

有关更多信息,请参阅 复制:具有自动故障转移功能的多可用区 (Redis)

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

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

  2. ElastiCache 将主节点脱机。

  3. ElastiCache 创建和预配置新的主节点以替换失败的主节点。

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

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

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

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

有关更多信息,请参阅 ElastiCache 复制 (Redis)

缓解可用区故障

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

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

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

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

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

建议

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

尽可能减少故障的影响

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

如果您正在运行 Memcached 并且正在跨节点对数据进行分区,在任一节点出现故障的情况下,您使用的节点越多,丢失的数据就越少。

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

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

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

其他预防措施

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