多活容災MSHA(Multi-Site High Availability)是一個云原生的多活容災架構解決?案。本文介紹同城多活容災架構的建設原則和難點,并通過一個電商業務案例,介紹如何基于MSHA來快速、無侵入的幫助業務實現同城多活容災架構。

同城多活架構介紹

同城多活(DB主備)的架構圖如下:

同城多活架構1.png

同城多活架構包含以下主要特征:

  • 應用可用區級多活。
  • 數據庫跨可用區主備。
  • RPO:分鐘級(AZ級故障)。
  • RTO:分鐘級(AZ級故障)。

應用場景:

  • 針對可用區級的故障、災難,期望業務具備分鐘級恢復能力的場景。
  • 應用多可用區部署的情況下,期望RPC調用可用區內封閉,以避免跨可用區網絡請求帶來的RT增長。

建設原則:

  • 保證冗余。
  • 保持對等。
  • 保持封閉。

建設難點:

  • 流量管理難度高。
    • 當發生可用區級故障、災難時:
      • 需具備HTTP、HTTPS流量的可用區級動態調配分流能力。
      • 需具備對故障AZ的RPC、MQ、任務調度流量切零能力。
    • 如果業務RT敏感,需具備可用區內流量封閉的能力以避免跨可用區的網絡傳輸帶來的RT增長。
  • 統一管控難度大。
    • 需對接支持眾多的云產品和開源框架。
    • 切零規則、流量可用區內封閉規則、環境隔離規則、甚至異地多活路由規則共存的情況下,需保證規則的優先級、兼容性和沖突解決策略。
  • 業務無侵入難度大:要實現HTTP、RPC、MQ、任務調度等流量管控能力,通常需要業務應用配合改造,對業務代碼侵入大。

業務背景信息

電商業務.png

本示例的電商業務包含以下應用:

  • frontend:入口Web應用,負責和用戶交互。
  • cartservice:購物車應用。記錄用戶的購物車數據,使用自建的Redis。
  • productservice:商品應用。提供商品、庫存服務,使用RDS MySQL。

技術棧:

  • SpringBoot。
  • RPC框架:SpringCloud,注冊中心使用自建的Eureka。

案例背景:一次故障的發生

本示例的電商業務已自行進行了同城容災能力建設,在杭州的多個可用區進行應用的對等部署,并自行實現了可用區級粒度的入口流量控制。但因為一次線上可用區級故障,才發現將故障可用區的HTTP流量切換到其他可用區后,下游的RPC、MQ調用仍然有概率訪問到故障可用區內的機器,業務仍然無法使用,導致電商頁面長時間無法訪問,甚至電商業務癱瘓。

雖然故障最終得以解決,但故障導致的客戶流失和企業口碑影響,對快速發展的業務造成不小的打擊,迫使企業開始重視同城多活容災能力的建設,以及定期做故障演練確保故障恢復能力的有效性。

同城多活架構改造

基于MSHA多活容災解決方案,您可以快速地對業務進行同城多活容災架構建設。

多活改造和MSHA接入包括以下方面:

  1. 開通并配置MSHA需要啟用的多活模塊。具體操作,請參見開通并配置MSHA
  2. 創建同城多活的命名空間,選擇容災架構類型為同城多活,將應用部署所在的2個可用區定義為2個單元格。具體操作,請參見新建命名空間
  3. 安裝MSHA探針。具體操作,請參見為Java應用手動安裝探針
  4. 配置接入層MSFE。具體操作,請參見配置MSFE
    改造后的應用架構如下圖所示:同城多活架構改造后.png

復現故障

基于MSHA完成同城多活架構建設后,還需驗證容災能力是否符合預期。接下來將歷史故障進行復現,通過制造真實的故障來驗證容災恢復能力。

  1. 演練準備。
    1. 登錄AHAS控制臺
    2. 在控制臺左側導航欄單擊多活容災
    3. 在左側導航欄單擊監控大盤,在頂部菜單欄,選擇命名空間官方示例命名空間
    4. 同城多活區域,查看業務監控指標。
      說明 基于MSHA流量監控或其他監控能力,確定業務穩態的監控指標,以便在故障發生時判斷故障影響面以及在故障恢復后判斷業務的實際恢復情況。
      監控大盤.png

      演練預期:電商首頁展示的查詢鏈路對商品應用是強依賴,強依賴故障將導致業務不可用,且故障的爆炸半徑應該控制在單元格內。

    5. 創建故障演練。

      創建杭州單元格B下的商品應用故障演練(例如網絡丟包)。具體操作,請參見創建演練

  2. 故障注入。
    1. 在多活容災的監控大盤頁面同城多活區域,查看故障演練前配置的路由規則。

      本示例中杭州地域的各個單元格流量比例為50%。

      路由規則1.png

      示例的MSHA商城商品應用鏈路如下圖所示,UserID為1000的用戶路由到單元格B。

      查看鏈路1.png
    2. 對杭州域單元格B下的商品應用注入故障。
      1. AHAS控制臺的左側導航欄選擇故障演練 > 我的空間
      2. 我的空間單擊演練準備中創建的演練,然后單擊演練
      3. 開始執行演練對話框中,單擊確認故障注入2.png

        若故障注入成功,打開電商首頁,有概率出現訪問異常,符合預期。

        訪問失敗.png

切流恢復

接下來將驗證故障場景下的容災恢復能力。在杭州單元格B的商品應用發生故障的情況下,可使用MSHA切流功能將流量全部切換到另外的單元格,進行快速業務恢復(這里區別于傳統的思路,不是去排查、處理和修復故障,而是立即使用切流進行恢復,將業務恢復和故障恢復解耦)。

容災切換預期:將100%的流量比例都切換到單元格I,切流后業務完全恢復,不受單元格B的故障影響。

  1. 登錄AHAS控制臺
  2. 在控制臺左側導航欄中選擇多活容災
  3. 在左側導航欄選擇基礎配置 > 命名空間,在頂部菜單欄選擇官方示例命名空間
  4. 在多活容災的左側導航欄選擇切流 > 同城多活切流
  5. 同城多活切流頁面,單擊切流
  6. 切流詳情頁面的規則調整區域,選擇切流方式比例切流,從單元下拉列表中選擇杭州中心單元,單擊杭州中心單元-單元格B的一鍵切零
    同城切流.png
  7. 單擊確定。在切流檢查區域檢查完成后,單擊切流
  8. 切流任務頁面,查看工單狀態切流完成。表示切流已成功。
    切流完成.png
    驗證結果
    1. 刷新MSHA商城首頁,多次訪問均能正常展示,符合預期。
    2. 通過查看實際調用鏈路,首頁的流量始終訪問到杭州單元格I中,不受單元格B故障的影響,符合預期。查看鏈路2.png

功能演示

故障注入和切流恢復的功能演示如下。

后續步驟

您還需要進行以下操作:

  • 終止注入故障。具體操作,請參見停止演練
  • 反饋演練結果,記錄演練識別到的風險問題。具體操作,請參見反饋演練結果
  • 回切流量,將單元格B和單元格I的流量比例,通過再次切流恢復到各50%(演練前的狀態)。具體操作,請參見同城多活切流
  • 在控制臺的監控大盤,查看業務的穩態指標已恢復。