行业背景
异地多活指分布在异地的多个站点同时对外提供服务的业务场景。异地多活是高可用架构设计的一种,与传统的灾备设计的最主要区别在于“多活”,即所有站点都是同时在对外提供服务的。
以一个简单的业务单元的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城市级故障为例: