多活容災MSHA(Multi-Site High Availability)是一個云原生的多活容災架構解決?案。本文介紹同城多活容災架構的建設原則和難點,并通過一個電商業務案例,介紹如何基于MSHA來快速、無侵入的幫助業務實現同城多活容災架構。
同城多活架構介紹
同城多活(DB主備)的架構圖如下:
同城多活架構包含以下主要特征:
- 應用可用區級多活。
- 數據庫跨可用區主備。
- RPO:分鐘級(AZ級故障)。
- RTO:分鐘級(AZ級故障)。
應用場景:
- 針對可用區級的故障、災難,期望業務具備分鐘級恢復能力的場景。
- 應用多可用區部署的情況下,期望RPC調用可用區內封閉,以避免跨可用區網絡請求帶來的RT增長。
建設原則:
- 保證冗余。
- 保持對等。
- 保持封閉。
建設難點:
- 流量管理難度高。
- 當發生可用區級故障、災難時:
- 需具備HTTP、HTTPS流量的可用區級動態調配分流能力。
- 需具備對故障AZ的RPC、MQ、任務調度流量切零能力。
- 如果業務RT敏感,需具備可用區內流量封閉的能力以避免跨可用區的網絡傳輸帶來的RT增長。
- 當發生可用區級故障、災難時:
- 統一管控難度大。
- 需對接支持眾多的云產品和開源框架。
- 切零規則、流量可用區內封閉規則、環境隔離規則、甚至異地多活路由規則共存的情況下,需保證規則的優先級、兼容性和沖突解決策略。
- 業務無侵入難度大:要實現HTTP、RPC、MQ、任務調度等流量管控能力,通常需要業務應用配合改造,對業務代碼侵入大。
業務背景信息
本示例的電商業務包含以下應用:
- frontend:入口Web應用,負責和用戶交互。
- cartservice:購物車應用。記錄用戶的購物車數據,使用自建的Redis。
- productservice:商品應用。提供商品、庫存服務,使用RDS MySQL。
技術棧:
- SpringBoot。
- RPC框架:SpringCloud,注冊中心使用自建的Eureka。
案例背景:一次故障的發生
本示例的電商業務已自行進行了同城容災能力建設,在杭州的多個可用區進行應用的對等部署,并自行實現了可用區級粒度的入口流量控制。但因為一次線上可用區級故障,才發現將故障可用區的HTTP流量切換到其他可用區后,下游的RPC、MQ調用仍然有概率訪問到故障可用區內的機器,業務仍然無法使用,導致電商頁面長時間無法訪問,甚至電商業務癱瘓。
雖然故障最終得以解決,但故障導致的客戶流失和企業口碑影響,對快速發展的業務造成不小的打擊,迫使企業開始重視同城多活容災能力的建設,以及定期做故障演練確保故障恢復能力的有效性。
同城多活架構改造
基于MSHA多活容災解決方案,您可以快速地對業務進行同城多活容災架構建設。
多活改造和MSHA接入包括以下方面:
復現故障
基于MSHA完成同城多活架構建設后,還需驗證容災能力是否符合預期。接下來將歷史故障進行復現,通過制造真實的故障來驗證容災恢復能力。
- 演練準備。
- 故障注入。
切流恢復
接下來將驗證故障場景下的容災恢復能力。在杭州單元格B的商品應用發生故障的情況下,可使用MSHA切流功能將流量全部切換到另外的單元格,進行快速業務恢復(這里區別于傳統的思路,不是去排查、處理和修復故障,而是立即使用切流進行恢復,將業務恢復和故障恢復解耦)。
容災切換預期:將100%的流量比例都切換到單元格I,切流后業務完全恢復,不受單元格B的故障影響。
功能演示
故障注入和切流恢復的功能演示如下。
后續步驟
您還需要進行以下操作: