行業背景
異地多活指分布在異地的多個站點同時對外提供服務的業務場景。異地多活是高可用架構設計的一種,與傳統的災備設計的最主要區別在于“多活”,即所有站點都是同時在對外提供服務的。
以一個簡單的業務單元的IT系統爲例,整個IT系統的異地多活方案如下圖所示。
- 在兩個城市(城市1位于華南1地域、城市2位于華東1地域)均部署一套完整的業務系統。
- 下單業務按照“user_id”% 100 進行分片,在正常情況下:[00~49]分片所有的讀寫都在城市1的數據庫實例主庫。[50~99]分片所有的讀寫都在城市2的數據庫實例主庫。
- “城市1的數據庫實例主庫”和 “城市2的數據庫實例主庫”建立DTS雙向複制
當出現異常時,需要進行容災切換。可能出現的場景有以下4種:
序號異常情況操作1城市1數據庫主庫故障1、數據庫引擎完成主備切換;2、DTS自動切換到城市1新主庫讀取新的增量更新,然後同步到城市2的數據庫實例2城市1所有APP Server故障有兩種處理方案:方案1:數據庫層無任何操作,APP Server切換到城市2,並跨城市讀寫城市1的數據庫;方案2:APP Server和數據庫都切換到城市23城市1所有數據庫故障有兩種處理方案:方案1:數據庫層切換到城市2,APP Server跨城市讀寫城市2的數據庫;方案2:APP Server和數據庫都切換到城市24城市1整體故障(包括所有APP Server +數據庫等)1、城市1的全部數庫流量切換到城市2;2、城市1數據庫到城市2數據庫的DTS數據同步鏈路停止3、在城市2中,DTS啓動,保存[00-49]分片的變更4、城市1故障恢複後,[00-49]的增量數據同步到城市1的數據庫實例。5、同步結束後,將[00-49]的數據庫流量從城市2切回到城市1啓動[00-49]分片從城市1到城市2的DTS同步
將第2種、第3種異常情況,全部采用第2種方案進行處理,那麽不管是所有的APP Server異常、所有的數據庫異常、整個城市異常,就直接按照城市級容災方案處理,直接將APP Server、數據庫切換到到另一個城市。
多城異地多活
多城市異地多活模式指的是3個或者3個以上城市間部署異地多活。該模式下存在中心節點和單元節點:
- 中心節點:指單元節點的增量數據都需要實時的同步到中心節點,同時中心節點將所有分片的增量數據同步到其他單元節點。
- 單元節點:即對應分片讀寫的節點,該節點需要將該分片的增量同步到中心節點,並且接收來自于中心節點的其他分片的增量數據。
下圖是3城市異地多活架構圖,其中華東1就是中心節點,華南1和華北1是單元節點
- 容災華南1(單元)的全部數庫流量切換到華東1(中心);華南1(單元)數據庫到華東1(中心)數據庫的DTS數據同步鏈路停止,並記錄同步位點分片[00-29]的讀寫切換到華東1(中心)
- 恢複重建華南1(單元);華南1(單元)數據遷移和同步完成後,停止分片[00-29]在華東1(中心)的讀寫;停止華東1(中心)到華南1(單元)分片[00-29]的數據同步;創建華南1(單元)到華東1(中心)的數據同步;將分片[00-29]的讀寫切換到華南1(單元);華南1(單元)的數據庫主庫開啓寫入;檢查;
中心城市級故障
當中心城市出現故障,業務需要切換時,以華東1城市級故障爲例:

