混合雲應用雙活容災最佳實踐

阿里巴巴雲原生發表於2022-01-18

作者:遠跖

前言

越來越多的企業在數字化轉型和上雲程式中選擇混合雲的形態(雲+自建 IDC 或雲+其他廠商雲)來進行容災建設,一方面不會過度依賴單一雲廠商,另一方面還能充分利用已有的線下 IDC 資源。

MSHA 雲原生多活容災解決方案 [1] ,也釋出了混合雲多活容災產品能力。本文會通過一個業務 Demo 案例,介紹混合雲容災建設的難點,以及如何基於 MSHA 來快速搭建應用雙活架構並具備分鐘級業務恢復能力。

業務混合雲容災實踐

業務背景資訊

A 企業是一個零售行業電商交易平臺,業務系統部署在自建 IDC 機房,存在以下痛點:

  • 業務僅在 IDC 單機房部署,缺少容災能力。
  • IDC 容量不足,物理機器升級替換週期長,不足以支撐業務的快速發展。

業務在快速發展過程中,多次遇到的容量不足以及故障問題引起了公司高層的重視,決心進行容災能力建設。由於自建 IDC 是公司已有資產且穩定使用多年,同時不希望過度依賴於雲,因此期望建立 IDC+雲 的混合雲形態容災架構。

當前應用部署架構

電商交易平臺包含的應用:

  • frontend:Web 應用,負責和使用者互動。
  • cartservice:購物車應用,提供購物車新增、儲存和查詢服務。
  • productservice:商品應用,提供商品、庫存服務。

技術棧:

  • SpringBoot。
  • RPC 框架:SpringCloud、Dubbo,註冊中心使用自建的 Nacos、Zookeeper。
  • 資料庫 Redis 和 MySQL。

混合雲容災目標

業務容災需求歸納如下:

  • 雲上雲下互容災,切換 RTO 為分鐘級。 期望雲上雲下相互容災,繼續發揮 IDC 的價值,且不 100% 依賴於雲。面對 IDC 或雲故障場景,關鍵時刻要敢切換、能切換,且切換 RTO 要求小於 10 分鐘。
  • 無資料一致性風險。 雲上雲下的兩個資料中心資料強一致,日常態和容災切換過程中都要避免存在髒寫等資料一致性風險。
  • 一站式管控。 業務容災涉及的技術棧框架和雲產品,需要統一管控、統一運維、統一切換,操作收斂在一站式管控平臺,方便故障場景快速白屏化操作,自動化執行。
  • 實施週期短,改造成本低。 業務存在多個產品線,依賴關係複雜、呼叫鏈路長,且處於高速發展頻繁迭代時期,期望容災建設不會給業務研發團隊帶來改造負擔。

建設難點

  • 流量管理難度高
  • 若採用 DNS 將流量按權重解析到雲上和雲下,存在修改 DNS 解析生效時間長的問題(通常為十分鐘或小時級,參見 DNS 解析生效時間 FAQ [2] ),不能滿足容災切換小於 10 分鐘的要求。
  • 業務應用所依賴的 Redis 和 MySQL,IDC內採用開源自建而云上直接使用雲產品,要實現開源自建+雲產品的容災切換能力難。
  • 容災切換資料質量保障難
  • 容災切換過程中,可能因資料同步延遲導致讀到舊資料,以及切換規則推送到分散式應用節點時間不一致等原因可能造成雲上雲下資料庫同時讀寫而出現髒寫的問題,整個切換過程資料質量保障是個關鍵點,同時也是難點。
  • 無業務程式碼侵入難
  • 要實現 Redis、MySQL 容災切換能力,通常需要業務應用配合改造,對業務程式碼侵入大。

解決方案

結合業務容災需求和混合雲 IDC+雲形態的特點,採用應用雙活架構能夠較好的滿足業務容災訴求。

應用雙活架構

架構簡圖:

架構規範:

  • 選擇離 IDC 物理距離<=200km 的雲上 Region,網路延遲較低(約 5~7ms)。
  • 應用、中介軟體雲上雲下冗餘對稱部署,同時對外提供服務(應用雙活)。
  • 資料庫異地主備,非同步複製備份。應用讀寫同一資料中心的資料庫,避免考慮一致性問題。

詳細方案

  • 應用流量雙活

業務應用雲上雲下對稱部署,並基於 MSHA 接入層叢集,來承接入口 HTTP/HTTPS 流量,按照比例或精準路由規則雲上雲下分流。多活控制檯提供 MSFE 叢集介面白屏化的部署、擴縮容、監控等常規運維能力,以及應對故障場景的分鐘級切流能力。

  • 服務互通和同單元優先呼叫

業務應用需要按業務產品線分批上雲,過程中存在下游應用僅 IDC 部署的情況。利用 MSHA 註冊中心同步功能,可實現雲上雲下服務互通,助力業務上雲。同時基於 MSHA-Agent 的切面能力,在 Dubbo/SpringCloud 服務呼叫時,Consumer 優先呼叫同單元內的Provider,從而避免跨機房呼叫帶來的網路延遲,減小業務請求 RT。

  • 資料同步&資料庫連線切換

資料庫異地主備部署,雲上雲下應用日常態均讀寫雲上 Redis 和 RDS 資料庫,無需考慮資料一致性問題。MSHA 控制檯通過整合 DTS 同步元件,支援雲上雲下的資料同步(非同步複製)。同時基於 MSHA-Agent 切面能力,具備應用資料庫訪問連線的切換能力,雲上 Redis 或 RDS 故障則可將讀寫訪問連線切換到 IDC 內的 Redis 或 MySQL,反之亦然。切換過程中還具備禁防寫能力,避免產生讀到舊資料以及髒寫等資料質量問題。

  • 一站式管控&無業務程式碼侵入

MSHA 控制檯,支援 HTTP、資料庫訪問流量的統一管控、統一切換,操作收斂在一站式管控平臺,方便故障場景快速白屏化操作,自動化執行。同時針對業務應用 MSHA 提供了 Agent 接入方式,無需業務程式碼改造即可獲得相關容災切換能力。

改造內容

  • 應用上雲
  • 選擇跟自建 IDC 較近的阿里雲地域,雲上完全冗餘的部署一套應用、中介軟體和資料庫,以便搭建雲上雲下雙活容災架構。在這個 Demo 案例中,選擇杭州 Region 作為容災單元。
  • 網路打通:
  • 接入 CEN 雲企業網,實現雲上雲下網路互通(詳見多接入方式構建企業級混合雲文件 [3 ] )。
  • 接入叢集部署和配置:
  • 雲上雲下部署 MSHA 接入層叢集(MSFE),上掛 SLB 用於公網接入以及 MSFE 叢集的負載均衡(參見使用文件 [4 ] )。
  • 錄入域名、URI 和後端應用地址,從而具備雲上雲下分流和分鐘級切流能力(參見使用文件 [5 ] )。
  • 應用:
  • 雲上分批部署業務應用。
  • JAVA 應用安裝 MSHA-Agent,並使用 Nacos 作為管控命令下發通道,從而具備微服務同單元優先呼叫以及資料庫訪問連線切換能力(參見使用文件 [6 ] )。
  • 中介軟體和資料庫:
  • 雲上部署 MSE 託管 ZK/Nacos 註冊中心、雲資料庫 Redis 和 RDS,建議使用跨可用區部署高可用版本,具備同城雙活容災能力。
  • 若存在某應用僅 IDC 部署的情況,需要配置註冊中心的服務同步(參見使用文件 [7 ] )。
  • 配置雲資料庫 Redis/RDS 和自建 Redis/MySQL 的資料同步(參見使用文件 [8 ] )。

改造後的應用部署架構

日常場景:IDC+雲上同時承擔業務流量--應用雙活

訪問電商 Demo 首頁,檢視實際流量呼叫鏈:概率性的訪問到北京或杭州單元,均讀寫北京單元內的資料庫。

容災能力

  • RPO:<=1min(依賴於 DTS 同步效能)
  • RTO:<=1min(依賴於 DTS 同步延遲,MSHA 元件實現秒級切換。整體 RTO<=1min)

容災能力驗證

基於 MSHA 完成應用雙活架構建設後,還需驗證業務容災能力是否符合預期。接下來將製造真實的故障,來驗證容災恢復能力。

7.1 演練準備

  1. 進入 MSHA 控制檯,在左側選單欄選擇監控大盤。頁面頂部,下拉選擇切換到實際使用的名稱空間
  2. 檢視頁面中的各項監控指標。

說明: 演練前,基於 MSHA 流量監控或其他監控產品,確定業務穩態的監控指標(如日常情況 RT<=200ms,錯誤率<1%),以便在故障發生時判斷故障影響面以及在故障恢復後判斷業務的實際恢復情況。

7.2 應用故障注入

這裡我們使用阿里雲故障演練產品,對阿里雲-北京的商品應用注入故障。

  1. 進入 Chaos 故障演練產品控制檯 [9 ] ,頂部選擇切換到相應地域,左側導航欄選擇我的空間
  2. 我的空間選擇配置好的演練(50% 概率網路丟包),然後單擊執行演練

故障注入成功後,開啟電商首頁或進行下單,有概率出現訪問異常,符合預期。

7.3 切流恢復

在北京單元的商品應用故障的情況下,可以通過 MSHA 切流功能,將雲上入口流量切 0,快速恢復業務。

預期

100% 流量切換到杭州單元后,業務完全恢復,不受北京單元的故障影響。

切流操作
  1. 進入 MSHA 控制檯,在左側導航欄選擇切流>異地應用雙活切流
  2. 在切流頁面,對北京單元點選一鍵切零

  1. 單擊執行預檢查,在切流檢查區域,單擊確認,開始切流。
  2. 在切流任務頁面的當前狀態顯示切流完成,表示切流已成功。

  1. 重新整理電商 Demo 首頁,多次訪問均能正常展示,符合預期。

檢視實際流量呼叫鏈:流量始終訪問到杭州單元,讀寫北京單元內的資料庫。

7.4 資料庫故障注入

從上面呼叫鏈可以看出,杭州單元內的應用仍然訪問的是北京單元的 Redis、MySQL 資料庫。我們繼續使用 Chaos 故障演練 [10 ] 產品對北京單元的 Redis、MySQL 資料庫注入故障,製造資料庫故障場景。

故障注入成功後,開啟電商首頁或進行下單始終訪問異常,符合預期。

7.5 切換資料庫進行恢復

在北京單元的資料庫故障的情況下,可以通過 MSHA 資料庫切換功能,將應用訪問的 Redis/MySQL 的連線切換至杭州單元的資料庫(切換過程中會等待資料同步追平,期間會短暫禁寫)。

預期

應用連線的資料庫切換到杭州後,業務完全恢復,不受北京單元的故障影響。

切流操作
  1. 進入 MSHA 控制檯,在左側導航欄選擇異地應用雙活>資料層配置

2.在資料保護規則列表中,找到商品、訂單、購物車資料庫,逐個點選主備切換

  1. 點選主備切換後,會進入預檢查頁面,確認各檢查項狀態正常後,點選在確認執行,則進入切換詳情頁,並自動執行切換流程。

  1. 主備切換詳情頁,可以看到切換進度和切換結果,任務進度 100% 後,表示切換完成。

  1. 商品、訂單、購物車資料庫都主備切換完成後。多次訪問電商 Demo 首頁或進行下單,發現均已正常,主備切換後業務功能完全恢復,符合預期。

總結

在本篇文章中,我們介紹了 MSHA 多活容災助力企業進行混合雲應用雙活容災建設的實踐案例,給出了容災架構建設實踐方法,同時利用 Chaos 故障演練產品注入真實故障,來驗證故障場景業務容災能力是否符合預期。

最後,歡迎大家掃描下方二維碼或搜尋群號(31623894)進釘釘群進行諮詢和交流,群名稱:多活容災(MSHA)交流釘釘群。

相關閱讀

[1] MSHA 雲原生多活容災解決方案

https://www.aliyun.com/produc...

[2] DNS 解析生效時間 FAQ

https://help.aliyun.com/docum...

[3] 多接入方式構建企業級混合雲文件

https://help.aliyun.com/docum...

[4] 使用文件

https://help.aliyun.com/docum...

[5] 使用文件

https://help.aliyun.com/docum...

[6] 使用文件

https://help.aliyun.com/docum...

[7] 使用文件

https://help.aliyun.com/docum...

[8] 使用文件

https://help.aliyun.com/docum...

[9] Chaos 故障演練產品控制檯

https://common-buy.aliyun.com...

[10] Chaos 故障演練

https://common-buy.aliyun.com...

延伸閱讀

• MSHA 多活容災解決方案首頁:

​https://www.aliyun.com/product/aliware/ahas/msha​

• MSHA 支援的 4 種容災架構介紹:

​https://help.aliyun.com/document_detail/338374.html​

• Chaos 故障演練產品首頁:

​https://www.aliyun.com/product/aliware/ahas/chaos​

點選此處,前往多活容災 MSHA 官網主頁瞭解更多詳情!

相關文章