在災難回復範例實務中使用鏡映

此端對端災難回復實務範例示範如何使用鏡映來提供增加的可用性,並在主要事件影響完整 IBM Cloud 區域時保持應用程式運作。

在不同區域中配置兩個集群,並使用 A 和 B 作為集群別名來配置鏡像(遵循 啟用鏡像 中的信息)。生產者會將記錄發佈至稱為 accounting.invoices 的主題,而消費者會從叢集 A 中讀取該主題的訊息。

鏡映總覽圖。
鏡映概觀

來源叢集變成無法使用

讓我們考慮一下如果源集群區域發生災難會發生什麼。

來源叢集圖表上的災難。
來源集群所在區域發生災難

Event Streams實例擁有者有責任確定事件的影響是否足以宣告災難。 服務實例擁有者必須協調應用程式的失效接手,包括其重新配置、重新部署,以及在必要時重新啟動。

失效接手生產者

請執行下列步驟來進行失效接手:

  1. 停止指向叢集 A 的生產者。
  2. 如果群集 A 以及從 A 到群集 B 的連結仍可運行,請透過檢查群集 B 上這些主題的延遲是否為零來確保鏡像盡可能多的資料。
  3. 重新啟動生產者以指向群集 B 的端點。
  4. 停用從叢集 A 到叢集 B 主題仍啟用的任何鏡映。 這可以使用 使用者控制項 來完成。

![目標叢集 B 上的生產者總覽圖。](disaster3.png "此圖顯示生產者切換到集群 B 並向新的本地主題" caption-side="bottom"}訊息"){: caption="生產者切換到集群 B。

生產者現在已切換至叢集 B,並將訊息傳送至名稱與原始名稱相同的新本端主題。

失效接手消費者

請執行下列步驟來進行失效接手:

  1. 如果叢集 A 及從 A 到叢集 B 的鏈結仍可運作,則容許消費者讀取叢集 A 上主題中的所有訊息資料,並在主題結尾確定其偏移。
  2. 停止指向集群 A 的消費者。
  3. 重新啟動消費者以指向群集 B 的端點。

叢集 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 上鏡像回原始目標主題,因為這會導致不良的循環效應。 如圖所示,我們將accounting.invoices從集群B鏡像到集群A,而不是accounting.invoices.A。

失效回復

失效回復的決定會再次由 Event Streams 實例擁有者所擁有。 服務實例擁有者必須協調應用程式的失效回復,包括其重新配置、重新部署,以及在必要時重新啟動。

與失效接手案例不同,在此情況下,叢集 B 上沒有災難。 因此,失效回復是受控制的作業,可以在最少資料流失或重新處理資料的情況下達成。

鏡映已切回原始配置圖。
鏡像切換回原始配置。

最後,將鏡像切換回原始配置,這表示叢集 A 再次成為來源,叢集 B 恢復為目標。

  • 請確定叢集 A 和叢集 B 可完全運作。
  • 停用從叢集 B 到叢集 A 的現行鏡映。 如需相關資訊,請參閱 停用鏡映
  • 停用鏡映之後,請在叢集 A (現在是來源) 與叢集 B (現在是目標) 之間啟用鏡映。 如需相關資訊,請參閱 啟用鏡映