本文通過一個Helloworld示例為您介紹如何接入MSHA應用雙活架構并進行功能測試。

背景信息

應用雙活容災架構如下。更多信息,請參見混合云應用雙活容災最佳實踐

err

步驟一:前置準備

  1. Demo準備。
    這里用電商交易平臺Demo示例介紹。例如,該平臺包含如下應用:
    • Frontend:Web應用,負責和用戶交互。
    • Cartservice:購物車應用,提供購物車添加、存儲和查詢服務。
    • Productservice:商品應用,提供商品、庫存服務。

    技術棧:

    • SpringBoot。
    • 微服務框架:SpringCloud、Dubbo,注冊中心使用Nacos。
    • 數據庫:Redis和MySQL。
  2. 網絡互通。
    您可以基于阿里云產品云企業網CEN實現網絡互通。

步驟二:開通MSHA并錄入多活資源

  1. 開通并配置MSHA。具體操作,請參見開通并配置MSHA
  2. 配置業務類型、單元和命名空間。
    1. 登錄AHAS控制臺
    2. 在控制臺左側導航欄中單擊多活容災
    3. 在左側導航欄選擇基礎配置 > 業務類型和單元,然后單擊新增業務類型
    4. 新增業務類型和單元配置頁面,填寫業務類型名稱和業務類型標識,然后單擊+添加單元,在彈出的添加單元面板,填寫相關參數,完成新建業務類型和單元配置。
      說明 業務類型通常用于業務隔離。例如,交易業務和導購業務可能使用了不同的容災架構。
    5. 在左側導航欄選擇基礎配置 > 命名空間,然后單擊新增命名空間,配置架構類型、多活組件、單元下所使用的接入層集群和Nacos命令通道等。配置參數更多信息,請參見新建命名空間
      說明
      • 命名空間通常用于環境隔離。例如,測試環境、預發環境、生產環境。
      • MSHA使用Nacos作為管控命令通道,來實現管控命令的異步并發推送、容災規則的多級緩存以及命令通道自身的高可用分布式部署能力。這里推薦直接購買阿里云MSE產品的Nacos實例,全托管且有穩定性SLA保障。
  3. 部署MSFE接入層集群。在MSHA控制臺,您可以將MSFE Tengine實例部署到多臺ECS上,組成MSFE接入層集群。
    接入層集群部署架構圖:db
    1. 將ECS導入MSHA控制臺用于部署MSFE集群實例。具體操作,請參見新增服務器
    2. 將SLB導入MSHA控制臺用于MSFE集群的前置負載均衡。具體操作,請參見新增SLB
    3. 創建MSFE集群,控制臺會自動執行部署任務流程。具體操作,請參見創建集群
      說明
      • 所需的ECS容量建議:生產環境需要跨可用區部署多臺,同時需要根據業務峰值QPS來評估需要的ECS,通常建議1000 qps/c。例如,業務峰值QPS 1w,使用4 C、16 G規格的ECS,那么則需要的ECS臺數為:1w/1000/4c=2.5(臺)。
      • 您需要優先購買阿里云ECS和SLB服務。
  4. 配置MSFE,包括錄入域名/IP、URI、后端應用地址。

    創建好MSHA命名空間和MSFE接入層集群后,您就可以錄入接入層域名、URI、后端應用回源地址等相關資源。錄入并生效后,MSFE集群就會針對這些來源域名/IP的流量,來進行流量規則的處理和轉發。具體操作,請參見配置MSFE

    重要
    • 新增域名時:

      若使用的是阿里云DNS,則域名解析類型選擇解析,其他情況則選擇不解析

    • 新增域名后,您還需要配置URI:
      • 架構類型:默認選擇應用雙活
      • 回源應用IP:Port:需要填寫后端應用負載均衡設備的IP和端口號。例如,上海單元(cn-shanghai)的域名和URI,對應的后端應用的負載均衡設備IP和端口為1.1.xx.xx:80
  5. 部署注冊中心同步集群。
    在MSHA控制臺,您可以將注冊中心同步實例部署到多臺ECS上,組成同步集群。具體操作,請參見步驟二:配置注冊中心同步集群
  6. 配置注冊中心同步任務。
    部署好注冊中心同步集群后,即可配置注冊中心服務同步任務,目前支持Nacos-Nacos、Zk-Zk。具體操作,請參見步驟四:配置注冊中心同步任務
  7. 改造應用,即修改Redis/MySQL連接地址信息。

    改造前

    業務應用僅在杭州單元部署,應用的Redis/MySQL連接地址配置如下。
    #Redis連接地址
    spring.redis.host=r-***.redis.rds.aliyuncs.com
    #MySQL連接地址
    spring.datasource.url=jdbc:mysql://rm-***.mysql.rds.aliyuncs.com:3306/dbname?characterEncoding=utf8&useSSL=false&serverTimezone=GMT
    說明
    • 以上為杭州單元的Redis/MySQL連接地址。
    • 若您是SpringBoot應用,則連接地址配置在application.properties文件中。

    進行應用雙活改造

    您需要在第二個單元(即北京單元)對稱部署業務應用和Redis/MySQL數據庫實例。北京單元部署的Redis/MySQL實例地址如下。
    #Redis連接地址
    r-***.redis.rds.aliyuncs.com
    #MySQL連接地址
     rm-***.mysql.rds.aliyuncs.com
    業務應用的Redis/MySQL連接地址配置中,需要添加上備數據庫地址信息(即北京單元的數據庫),以便MSHA SDK/Agent識別并實現主備切換功能。配置如下:
    #Redis連接地址
    spring.redis.host=r-***.redis.rds.aliyuncs.com?mshaStandbyHost=r-uuu.redis.rds.aliyuncs.com
    #MySQL連接地址
    spring.datasource.url=jdbc:mysql://r-***.redis.rds.aliyuncs.com:3306/dbname?characterEncoding=utf8&useSSL=false&serverTimezone=GMT&mshaStandbyHost=rm-***.mysql.rds.aliyuncs.com
    說明 以上為北京單元的Redis/MySQL連接地址。

    改造后

    配置改造完成后,應用還需掛載上MSHA Agent,您需要重啟應用后才會生效。具體操作,請參見步驟三:為JAVA應用安裝Agent

  8. 配置Redis/MySQL數據同步和數據保護規則。
    1. 在MSHA控制臺的管理數據源頁面單擊添加數據源,錄入Redis/MySQL相關數據庫連接信息。具體操作,請參見步驟一:創建數據源
    2. 數據層配置頁面選擇目標同步鏈路,然后單擊添加同步任務,錄入Redis/MySQL相關DTS同步任務信息。支持在MSHA控制臺直接創建或錄入已經創建好的DTS任務。
      說明 建議您在DTS控制臺提前創建好Redis/MySQL(RDS/PolarDB等)同步任務,并確保同步狀態為“同步中”后再錄入到MSHA控制臺。
    3. 數據層配置頁面單擊創建數據保護規則,配置數據保護禁寫、讀寫分離規則。然后分別進行灰度推送、全量推送,相應保護規則才會通過管控命令通道,推送到應用節點MSHA SDK/Agent上。
  9. Redis/MySQL主備切換。
    1. 數據層配置頁面,查看當前生效的主數據庫。當類型列的Read和Write均顯示為dg圖標時則是主數據庫,否則為備數據庫。
    2. 單擊操作列的主備切換,進入到切換工單頁面,等待預檢查完成并提交工單后則會自動執行主備切換流程。
  10. 發起切流。具體操作,請參見異地應用雙活切流

步驟三:為JAVA應用安裝Agent

為JAVA應用安裝Agent的具體操作,請參見為Java應用手動安裝探針配置Nacos作為規則下發通道。安裝Agent之前您還需要先下載Agent并配置相關參數。具體操作如下。

  1. 下載Agent。
    地域 下載地址
    杭州單元 http://msha-agent-hangzhou.oss-cn-hangzhou.aliyuncs.com/msha-java-agent.jar
    北京單元 http://msha-agent-beijing.oss-cn-beijing.aliyuncs.com/msha-java-agent.jar
  2. 配置JVM參數。
    -javaagent:${探針安裝路徑}
    -Dmsha.license=${當前license}
    -Dmsha.namespaces=${命名空間ID}
    -Dmsha.app.name=${應用名稱}
    -Dmsha.nacos.namespace=${Nacos命名空間ID}
    -Dmsha.nacos.server.addr=${Nacos服務器訪問地址}
    配置參數說明:
    • ${當前license}:您可以在MSHA控制臺的探針管理頁面查看License。
    • ${命名空間ID}:您可以在MSHA控制臺的命名空間頁面查看。
    • ${應用名稱}:為您實際的應用名稱,暫不支持中文。
    • ${Nacos命名空間ID}:您可以進入Nacos實例的命名空間頁面查看。如下圖所示:sc
    • ${Nacos服務器訪問地址}:格式為${內網地址:內網端口}。例如,mse-***-nacos-ans.mse.aliyuncs.com:8848

    阿里云內應用掛載Agent JVM參數配置示例:

    -javaagent:/home/admin/msha-agent/msha-java-agent.jar
    -Dmsha.license=aaabbbccc-d810-4f9c-b8e2-e2836*****e8
    -Dmsha.namespaces=aaabbbccc-8903-4a75-b10c-89ad7*****58
    -Dmsha.app.name=rpc-demo
    -Dmsha.nacos.namespace=aaabbbccc-27a6-4324-9ee7-4d52d*****e0
    -Dmsha.nacos.server.addr=mse-aaabbbccc-nacos-ans.mse.aliyuncs.com:8848

    IDC或其他云內應用掛載Agent JVM參數配置示例:

    -Dregion-id=idc
    -Dzone-id=idc-zone-a
    -Dvpc-id=empty
    -Downer-account-id=12*****89
    -javaagent:/home/admin/msha-agent/msha-java-agent.jar
    -Dmsha.license=aaabbbccc-d810-4f9c-b8e2-e2836*****e8
    -Dmsha.namespaces=aaabbbccc-8903-4a75-b10c-89ad7*****58
    -Dmsha.app.name=app-demo
    -Dmsha.nacos.namespace=aaabbbccc-27a6-4324-9ee7-4d52d*****e0
    -Dmsha.nacos.server.addr=171.0.xx.xx:8848

    配置說明:由于IDC或者其他云內,無法獲取到ECS機器所屬的位置信息,所以相比阿里云內應用掛載Agent的JVM配置,需要增加以下內容:

    • -Dregion-id:地域信息。
    • -Dzone-id:可用區信息。
    • -Dvpc-id:VPC網絡ID。僅用于監控數據上報和MSHA控制臺探針列表頁展示,可配置為empty。
    • -Downer-account-id:阿里云賬號(主賬號)ID。用于監控數據上報。IDC或者其他云與阿里云網絡打通后,監控數據會上報至阿里云。
  3. 重啟應用。
    安裝了探針的應用在啟動時,會自動上報心跳信息。在MSHA控制臺探針管理頁面,若該應用實例信息顯示在列表中且狀態列為在線,則說明探針安裝成功。sxv

步驟四:驗證雙活能力

  1. 驗證MSFE路由能力。
    1. MSFE集群可視化運維。
      驗證 說明
      測試內容 MSFE集群可視化運維
      測試類型 人工UAT測試
      前提條件 完成FE接入層集群部署
      測試步驟 可視化運維能力包括:擴縮容、Metrics監控、實例健康檢查、回源地址健康檢查、規則一致性巡檢。sv
      測試結果 ?符合預期
    2. MSFE引流及驗證流量轉發能力。
      驗證 說明
      測試內容 MSFE引流及驗證流量轉發能力
      測試類型 人工UAT測試
      前提條件
      • 完成FE接入層集群部署完成
      • 在MSHA控制臺完成MSFE配置
      測試步驟
      1. 本地修改Hosts文件綁定域名,本地制造測試流量引流進入MSHA FE測試。
        Host綁定示例:
        10.100.xx.xx ***.demo.com
        10.5.xx.xx ***.demo2.com
      2. 變更DNS將生產環境流量引入MSHA FE。流量路徑:DNS>SLB>MSFE集群。
      3. 根據流量比例規則,查看FE轉發是否正常。例如,初始化時北京單元、杭州單元流量比例為100:0。
        1. 登錄FE集群所在的ECS機器,查看Tengine訪問日志是否正常、是否有打印訪問記錄,是否返回200,是否轉發了北京單元的后端應用回源地址。文件地址: /home/admin/tengine/logs/tengine-access_log
        2. 登錄到北京單元的業務應用機器,查看應用日志是否正常,并驗證頁面功能是否能夠正常使用。
      測試結果 ?符合預期
    3. MSFE比例分流及切流。
      驗證 說明
      測試內容 MSFE比例分流及切流
      測試類型 人工UAT測試
      前提條件
      • 完成FE接入層集群部署完成
      • 在MSHA控制臺完成MSFE配置
      測試步驟
      1. 切流。調整北京單元、杭州單元的流量比例為0:100,然后刷新電商Demo首頁,查看調用鏈始終訪問到杭州單元的Frontend入口應用。
      2. 切流。調整北京單元、杭州單元流量比例為100:0,然后刷新電商Demo首頁,查看調用鏈始終訪問到北京單元的Frontend入口應用。
      3. 切流。調整北京單元、杭州單元流量比例為50:50,然后刷新電商Demo首頁,查看調用鏈,有一半的概率訪問到杭州單元的Frontend入口應用。
      測試結果 ?符合預期
  2. 驗證數據庫禁寫、讀寫分離能力。
    1. 日常態讀寫主數據庫(讀寫不分離)。
      驗證 說明
      測試內容 日常態讀寫主數據庫(讀寫不分離)
      測試類型 人工UAT測試
      前提條件
      1. 應用掛載上MSHA-Agent。
      2. MSHA控制臺錄入數據層配置,包括數據源、數據同步鏈路和數據保護規則。數據保護規則狀態為生效,不允許讀寫分離,主數據庫在北京單元,且北京單元的數據庫Read及Write均顯示dg圖標。

        北京單元的數據庫顯示如下圖:

        svb

        數據保護規則如下圖:

        sc
      測試步驟
      1. 北京單元的應用執行數據庫讀操作(即查詢商品詳情)、寫操作(即下單),應該訪問到北京數據庫。
      2. 杭州單元的應用執行數據庫讀操作(即查詢商品詳情)、寫操作(即下單),應該訪問到杭州數據庫。
      測試結果 ?符合預期
    2. 日常態寫主讀本地(讀寫分離)。
      驗證 說明
      測試內容 日常態讀寫主數據庫(讀寫分離)
      測試類型 人工UAT測試
      前提條件
      1. 應用掛載上MSHA-Agent。
      2. MSHA控制臺錄入數據層配置,包括數據源、數據同步鏈路和數據保護規則。數據保護規則狀態為生效,允許讀寫分離,主數據庫在杭州單元,且杭州單元的數據庫Read及Write均顯示dg圖標。svb
      測試步驟
      1. 兩個單元內的應用執行數據庫讀操作(即查詢商品詳情),均訪問到本單元數據庫。
        • 北京單元的應用執行數據庫讀操作,應該訪問到北京數據庫。
        • 杭州單元的應用執行數據庫讀操作,應該訪問到杭州數據庫。
      2. 兩個單元內的應用執行數據庫寫操作(即下單),均訪問到主數據庫(即杭州單元)。
        • 北京單元的應用執行數據庫寫操作,應該訪問到杭州數據庫。
        • 杭州單元的應用執行數據庫寫操作,應該訪問到杭州數據庫。
      測試結果 ?符合預期
    3. 主備切換(讀寫不分離)。
      驗證 說明
      測試內容 讀寫不分離下的主備切換
      測試類型 人工UAT測試
      前提條件
      1. 應用掛載上MSHA-Agent。
      2. MSHA控制臺錄入數據層配置,包括數據源、數據同步鏈路和數據保護規則。數據保護規則狀態為生效,不允許讀寫分離,主數據庫在杭州單元,且杭州單元的數據庫Read及Write均顯示dg圖標。
      測試步驟
      1. 主備切換前,2個單元內的應用執行讀操作(即查詢商品詳情)、寫操作(即下單),應該訪問到杭州數據庫。
      2. 主備切換后(即將主數據庫從杭州單元切換至北京單元),2個單元內的應用執行讀操作(即查詢商品詳情)、寫操作(即下單),應該訪問到北京數據庫。
      測試結果 ?符合預期
    4. 主備切換(讀寫分離)。
      驗證 說明
      測試內容 讀寫分離下的主備切換
      測試類型 人工UAT測試
      前提條件
      1. 應用掛載上MSHA-Agent。
      2. MSHA控制臺錄入數據層配置,包括數據源、數據同步鏈路和數據保護規則。數據保護規則狀態為生效,允許讀寫分離,主數據庫在杭州單元,且杭州單元的數據庫Read及Write均顯示dg圖標。
      測試步驟
      1. 主備切換前,杭州單元內的應用:
        • 執行數據庫讀操作(即查詢商品詳情),應該訪問到杭州單元數據庫。
        • 執行數據庫寫操作(即下單),應該訪問到杭州單元數據庫。
      2. 主備切換前,北京單元內的應用:
        • 執行數據庫讀操作(即查詢商品詳情),應該訪問到北京單元數據庫。
        • 執行數據庫寫操作(即下單),應該訪問到杭州單元數據庫。
      3. 主備切換后(即將主數據庫從杭州單元切換至北京單元),北京單元內的應用:
        • 執行數據庫讀操作(即查詢商品詳情),應該訪問到北京單元數據庫。
        • 執行數據庫寫操作(即下單),應該訪問到北京單元數據庫。
      測試結果 ?符合預期
    5. 主備切換數據同步延遲期間禁寫。
      驗證 說明
      測試內容 主備切換數據同步延遲期間禁寫
      測試類型 人工UAT測試
      前提條件
      1. 應用掛載上MSHA-Agent。
      2. MSHA控制臺錄入數據層配置,包括數據源、數據同步鏈路和數據保護規則。數據保護規則狀態為生效,不允許讀寫分離,主數據庫在北京單元,且北京單元數據庫Write顯示dg,杭州單元數據庫Write顯示dbnm圖標。
      測試步驟
      1. 主備切換前,北京單元內的應用執行寫操作(即下單),應該訪問到北京數據庫且SQL執行成功無報錯。
      2. 制造同步存在延遲的場景(例如,暫停DTS同步任務),然后執行主備切換。那么主備切換流程中,執行到等待同步位點追平階段后,就會長時間輪訓DTS接口判斷同步是否追平。dbk
      3. 主備切換等待數據同步追平過程中:
        • 杭州單元應用執行寫操作(即下單),應該會被禁寫(拋出異常)。
        • 北京單元應用執行寫操作(即下單),應該會被禁寫(拋出異常)。
      4. 主備切換結束后(即等待同步位點追平或跳過同步位點追平)
        • 杭州單元應用執行寫操作(即下單),應該訪問到杭州數據庫且SQL執行成功無報錯。
        • 北京單元應用執行寫操作(即下單),應該訪問到杭州數據庫且SQL執行成功無報錯。
      測試結果 ?符合預期