天天看點

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

作者:阿裡雲雲栖号

前言

越來越多的企業在數字化轉型和上雲程序中選擇混合雲的形态(雲+自建 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. 在切流頁面,對北京單元點選一鍵切零。

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

3. 單擊執行預檢查,在切流檢查區域,單擊确認,開始切流。

4. 在切流任務頁面的目前狀态顯示切流完成,表示切流已成功。

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

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

檢視實際流量調用鍊:流量始終通路到杭州單元,讀寫北京單元内的資料庫。

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

7.4 資料庫故障注入

從上面調用鍊可以看出,杭州單元内的應用仍然通路的是北京單元的 Redis、MySQL 資料庫。我們繼續使用 Chaos 故障演練[10]産品對北京單元的 Redis、MySQL 資料庫注入故障,制造資料庫故障場景。

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

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

7.5 切換資料庫進行恢複

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

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

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

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

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

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

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

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

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

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

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

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

總結

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

相關閱讀

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

[2] DNS 解析生效時間 FAQ

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

[4] 使用文檔

[5] 使用文檔

[6] 使用文檔

[7] 使用文檔

[8] 使用文檔

[9] Chaos 故障演練産品控制台

[10] Chaos 故障演練

原文連結:https://developer.aliyun.com/article/858349?utm_content=g_1000319674

本文為阿裡雲原創内容,未經允許不得轉載。

繼續閱讀