在灾难恢复示例场景中使用镜像

此端到端灾难恢复方案演示了如何使用镜像来提供更高的可用性,并在重大事件影响完整的 IBM Cloud 区域时使应用程序保持工作状态。

在不同区域配置两个群集,并使用 A 和 B 作为群集别名配置镜像(按照 启用镜像 中的信息)。生产者将记录发布到名为 accounting.invoices 的主题,然后使用者从集群 A 的该主题中读取消息。

镜像概述图。
镜像概述

源集群变为不可用

让我们考虑一下,如果源群集的区域发生灾难,会发生什么情况。

源集群图上的灾难。
Disaster in source cluster's region

Event Streams实例所有者有责任确定事件的影响程度是否需要宣布为灾难。 服务实例所有者必须协调应用程序的故障转移,包括应用程序的重新配置、重新部署和重新启动(如有必要)。

生产者故障转移

执行以下步骤以进行故障转移:

  1. 停止指向集群 A 的生产者。
  2. 如果群集 A 和从 A 到群集 B 的链路仍在运行,请检查群集 B 上这些主题的滞后是否为零,以确保镜像尽可能多的数据。
  3. 重新启动生产者,使其指向群集 B 的端点。
  4. 禁用在从集群 A 到集群 B 的主题上仍启用的任何镜像。 这可以通过使用 用户控件 来完成。

目标集群 B 上的生产者概述图。
Producer switched to cluster B.

现在,生产者已切换到集群 B,并将消息发送到与原始主题同名的新本地主题。

使用者故障转移

执行以下步骤以进行故障转移:

  1. 如果集群 A 和从 A 到集群 B 的链接仍可操作,那么允许使用者读取集群 A 上的主题中的所有消息数据,并在主题结束时落实其偏移量。
  2. 停止指向群组 A 的消费者。
  3. 重新启动消费者,使其指向群集 B 的端点。

集群 B 上的使用者图。
The consumer continues to consume the existing messages.

现在,消费者可以继续消费来自 B 群组 accounting.invoices.A 主题的现有信息,而新信息则来自 accounting.invoices

如果应用程序要求严格的排序,则应先完全消耗远程主题,然后再开始消耗本地主题。 这样,才能按照消息的生成顺序来处理消息。

重置镜像环境

Event Streams 服务实例所有者负责决定恢复集群 A 时发生的情况。

如果集群 A 不可恢复,那么 Event Streams 服务实例所有者负责启用集群 B 与新供应的实例之间的镜像。 要启用对新实例的镜像,请完成以下步骤:

  • 将生产者和使用者从 A 故障转移到 B,如前所述。
  • 禁用从集群 A 到集群 B 的当前镜像。 有关更多信息,请参阅 禁用镜像
  • 禁用镜像后,请在集群 B (现在是源) 与新供应的集群 (目标) 之间启用镜像。 有关更多信息,请参阅 启用镜像

或者,如果集群 A 已恢复,那么用户通常会将操作返回到集群 A。 完成以下步骤以将主操作返回到集群 A。

在故障恢复之前,必须在相反方向启用镜像:

  • 确保集群 A 能够完全正常运行。
  • 禁用从集群 A 到集群 B 的当前镜像。 有关更多信息,请参阅 禁用镜像
  • 禁用镜像后,请在集群 B (现在是源) 和集群 A (现在是目标) 之间启用镜像。 有关更多信息,请参阅 启用镜像
  • 源集群 A 现在成为目标集群。
  • 目标集群 B 成为新的源集群。
  • 允许将任何主题从集群 B 镜像到集群 A。 您可以使用 用户控件 来执行此操作。

接下来,通过检查集群 A 上出现的集群 B 中的主题,确保正在将数据复制到集群 A 中。 这些主题具有来自新源集群 B 的后缀。

已在相反方向图中启用镜像。
Mirroring enabled in opposite direction.

不要在群组 B 上镜像回原来的目标主题,因为这样会产生不良的循环效果。 如图所示,我们将群集 B 中的accounting.invoices镜像到群集 A,而不是accounting.invoices.A。

故障恢复

故障恢复同样由 Event Streams 实例所有者负责决定。 服务实例所有者必须协调应用程序的故障恢复,包括应用程序的重新配置、重新部署和重新启动(如有必要)。

与故障转移情况不同,在这种情况下,集群 B 上没有发生灾难。 因此,故障恢复是一种受控操作,可以在最小数据丢失或数据重新处理的情况下实现。

镜像已切换回原始配置图。
Mirroring switched back to the original configuration.

最后,将镜像切换回原始配置,这意味着群集 A 再次成为源,而群集 B 恢复为目标。

  • 确保集群 A 和集群 B 完全可操作。
  • 禁用从集群 B 到集群 A 的当前镜像。 有关更多信息,请参阅 禁用镜像
  • 禁用镜像后,请在集群 A (现在是源) 和集群 B (现在是目标) 之间启用镜像。 有关更多信息,请参阅 启用镜像