越來越多的企業在數字化轉型和上云進程中選擇混合云的形態(云+自建IDC或云+其他廠商云)來進行容災建設,一方面不會過度依賴單一云廠商,另一方面還能充分利用已有的線下IDC資源。MSHA云原生多活容災解決方案,支持混合云多活容災產品能力。本文會通過一個業務Demo案例,介紹混合云容災建設的難點,以及如何基于MSHA來快速搭建應用雙活架構并具備分鐘級業務恢復能力。

背景信息

A企業是一個零售行業電商交易平臺,業務系統部署在自建IDC機房,存在以下痛點:
  • 業務僅在IDC單機房部署,缺少容災能力。
  • IDC容量不足,物理機器升級替換周期長,不足以支撐業務的快速發展。

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

A企業當前的應用部署架構

電商交易平臺包含的應用:
  • frontend:Web應用,負責和用戶交互。
  • cartservice:購物車應用,提供購物車添加、存儲和查詢服務。
  • productservice:商品應用,提供商品、庫存服務。
技術棧:
  • SpringBoot。
  • RPC框架:SpringCloud、Dubbo,注冊中心使用自建的Nacos、ZooKeeper。
  • 數據庫:Redis和MySQL。
ww

混合云容災目標

A企業業務容災的需求如下:

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

建設難點

建立IDC+云的混合云形態容災架構難點如下:

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

解決方案

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

應用雙活架構

架構簡圖:

qq

限制:業務需要能接受兩地距離帶來的網絡延遲。

架構規范:
  • 選擇離IDC物理距離≤200 km的云上地域(Region),網絡延遲較低(約5~7 ms)。
  • 應用、中間件云上云下冗余對稱部署,同時對外提供服務(應用雙活)。
  • 數據庫異地主備,異步復制備份。應用讀寫同一數據中心的數據庫,避免考慮一致性問題。

解決方案

架構簡圖:

err
解決方案:
  • 應用流量雙活:
    • 業務應用云上云下對稱部署,并基于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接入方式,無需業務代碼改造即可獲得相關容災切換能力。

改造內容

A企業建立IDC+云的混合云形態容災架構,所需改造的內容如下:

改造點 說明
應用上云 選擇跟自建IDC較近的阿里云地域,云上完全冗余的部署一套應用、中間件和數據庫,以便搭建云上云下雙活容災架構。在這個Demo案例中,選擇杭州地域(Region)作為容災單元。
網絡打通 接入CEN云企業網,實現云上云下網絡互通。具體操作,請參見多接入方式構建企業級混合云
接入集群部署和配置
  • 云上云下部署MSHA接入層集群(MSFE),上掛SLB用于公網接入以及MSFE集群的負載均衡。具體操作,請參見管理MSFE接入層集群
  • 錄入域名、URI和后端應用地址,從而具備云上云下分流和分鐘級切流能力。具體操作,請參見配置MSFE
應用
  • 云上分批部署業務應用。
  • JAVA應用安裝MSHA-Agent,從而具備微服務同單元優先調用以及數據庫訪問連接切換能力。具體操作,請參見為Java應用手動安裝探針
中間件和數據庫
  • 云上部署MSE托管ZooKeeper/Nacos注冊中心、云數據庫Redis和RDS,建議使用跨可用區部署高可用版本,具備同城雙活容災能力。
  • 若存在某應用僅IDC部署的情況,需要配置注冊中心的服務同步。具體操作,請參見注冊中心同步集群
  • 配置云數據庫Redis或RDS和自建Redis或MySQL的數據同步。具體操作,請參見配置數據層
改造后的應用部署架構:
  • 日常場景:IDC+云上同時承擔業務流量(即應用雙活)。ert
  • 訪問電商Demo首頁,查看實際流量調用鏈:概率性的訪問到北京或杭州單元,均讀寫北京單元內的數據庫。
    • 電商Demo首頁圖:el
    • 均讀寫北京單元內的數據庫架構簡圖:wio

容災能力

  • RPO:≤1分鐘(依賴于DTS同步性能)。
  • RTO:≤1分鐘(依賴于DTS同步延遲,MSHA組件實現秒級切換。整體RTO≤1分鐘)。

容災能力驗證

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

步驟一:演練準備

  1. 登錄AHAS控制臺
  2. 在控制臺左側導航欄中選擇多活容災
  3. 在左側導航欄單擊監控大盤,并在頂部選擇目標命名空間,查看各項監控指標。
    說明 演練前,基于MSHA流量監控或其他監控產品,確定業務穩態的監控指標(如日常情況RT≤200ms,錯誤率<1%),以便在故障發生時判斷故障影響面以及在故障恢復后判斷業務的實際恢復情況。
    qqw

步驟二:應用故障注入

這里使用阿里云故障演練產品,對阿里云-北京地域的商品應用注入故障。

  1. 登錄AHAS控制臺
  2. 在左側導航欄選擇故障演練 > 我的空間,并在頂部選擇地域。
  3. 我的空間頁面搜索配置好的演練(50%概率網絡丟包),然后在該演練名稱對應的操作列單擊演練。在彈出的對話框中單擊確認
    ertyerw

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

    vb

步驟三:切流恢復

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

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

erlo
  1. 登錄AHAS控制臺
  2. 在控制臺左側導航欄中選擇多活容災
  3. 在左側導航欄選擇切流 > 異地應用雙活切流,并在頂部選擇地域。
  4. 異地應用雙活切流頁面單擊切流,然后在第①步規則調整區域的北京單元右側單擊一鍵切流,并單擊生成預覽,將北京單元的應用流量一鍵切零。
    ei
  5. 單擊第②步的執行預檢查,然后單擊第③步切流檢查區域的確認,開始切流。
    切流任務運行中頁面的當前狀態顯示切流完成,表示切流已成功。qwe
  6. 刷新電商Demo首頁,多次訪問均能正常展示,則符合預期。

    查看實際流量調用鏈:流量始終訪問到杭州單元,讀寫北京單元內的數據庫。

    erui

步驟四:數據庫故障注入

從上面調用鏈可以看出,杭州單元內的應用仍然訪問的是北京單元的Redis、MySQL數據庫。以同樣的方式執行步驟二對北京單元的Redis、MySQL數據庫注入故障,制造數據庫故障場景。

erty

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

步驟五:切換數據庫進行恢復

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

預期效果:應用連接的數據庫切換到杭州后,業務完全恢復,不受北京單元的故障影響。

vbnm
  1. 登錄AHAS控制臺
  2. 在控制臺左側導航欄中選擇多活容災
  3. 在左側導航欄選擇異地應用雙活 > 數據層配置
  4. 在數據保護規則列表中,通過搜索查詢商品、訂單、購物車數據庫,依次單擊主備切換

    商品數據庫:

    qwesd

    購物車數據庫:

    zxc
  5. 單擊主備切換后,進入預檢查結果頁面,確認各檢查項狀態正常后,然后單擊確認執行,在主備切換詳情頁面自動執行切換流程。
    werty

    在主備切換詳情頁面,可以查看切換進度和切換結果,當任務進度為100%,表示切換完成。主備切換完成后的結果如下圖所示。

    asd

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

    cvbn

通過MSHA多活容災助力企業進行混合云應用雙活容災建設的實踐案例,給出了容災架構建設實踐方法,同時利用Chaos故障演練產品注入真實故障,來驗證故障場景業務容災能力是否符合預期。若您在使用過程中有任何疑問,歡迎您搜索釘釘群號“31623894”加入“多活容災(MSHA)交流群”獲取幫助。