在灾难恢复示例场景中使用镜像
此端到端灾难恢复方案演示了如何使用镜像来提供更高的可用性,并在重大事件影响完整的 IBM Cloud 区域时使应用程序保持工作状态。
在不同区域配置两个群集,并使用 A 和 B 作为群集别名配置镜像(按照 启用镜像 中的信息)。生产者将记录发布到名为 accounting.invoices 的主题,然后使用者从集群 A 的该主题中读取消息。
生产者故障转移
执行以下步骤以进行故障转移:
- 停止指向集群 A 的生产者。
- 如果群集 A 和从 A 到群集 B 的链路仍在运行,请检查群集 B 上这些主题的滞后是否为零,以确保镜像尽可能多的数据。
- 重新启动生产者,使其指向群集 B 的端点。
- 禁用在从集群 A 到集群 B 的主题上仍启用的任何镜像。 这可以通过使用 用户控件 来完成。
现在,生产者已切换到集群 B,并将消息发送到与原始主题同名的新本地主题。
使用者故障转移
执行以下步骤以进行故障转移:
- 如果集群 A 和从 A 到集群 B 的链接仍可操作,那么允许使用者读取集群 A 上的主题中的所有消息数据,并在主题结束时落实其偏移量。
- 停止指向群组 A 的消费者。
- 重新启动消费者,使其指向群集 B 的端点。
现在,消费者可以继续消费来自 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 的后缀。
不要在群组 B 上镜像回原来的目标主题,因为这样会产生不良的循环效果。 如图所示,我们将群集 B 中的accounting.invoices镜像到群集 A,而不是accounting.invoices.A。
故障恢复
故障恢复同样由 Event Streams 实例所有者负责决定。 服务实例所有者必须协调应用程序的故障恢复,包括应用程序的重新配置、重新部署和重新启动(如有必要)。
与故障转移情况不同,在这种情况下,集群 B 上没有发生灾难。 因此,故障恢复是一种受控操作,可以在最小数据丢失或数据重新处理的情况下实现。
最后,将镜像切换回原始配置,这意味着群集 A 再次成为源,而群集 B 恢复为目标。