唠唠同城容灾

作为一个SRE,其实要面对的故障原因主要就是这么几个:

  1. 基础设施
  2. 生产系统
  3. 操作人
  4. 操作流程

既然基础设施肯定会出问题(挖断光缆、火灾等等),那么容灾这个课题是每一个SRE必须要研究的事情。不过相比较火灾这种影响面是一栋楼的,洪水+大风这种影响一片楼的天灾更吓人。

此时SRE就要跟基础的同学一起制定演练规则、演练机制、容灾架构和具体的演练方案,通过定期的演练可以验收如下事情:
● 容灾能力检验:检验集团业务线核心业务的容灾能力(恢复能力、恢复时长);
● 容灾预案有效性检验:检查核心业务机房级故障容灾预案有效性;
● 容灾风险透视:预先透视容灾风险,降低风险转化为线上故障的的机率;
● 容灾应急能力提升:通过演练,提升灾难场景下业务团队的协作能力;

这里本文先唠唠“同城容灾”。

首先同城要有多个机房,而且每个机房都要投入生产,而不是一个机房工作另一个机房闲着,这要做的目的第一是对成本友好,第二是确认两个机房都是能正常接入业务流量的。

其次业务应该优先接入同城容灾,同时接入层aserver、数据库(三节点)、Tair(缓存主备)、中间件早已标配同城容灾能力,因此对于业务而言接入同城容灾成本是非常低的,基本上只要应用容器在双机房部署,并且将HSF服务规则和VIPServer对称调用策略都开启同机房优先即可(非必选,可通过CDR执行CS拉黑预案;能接受更长RTO可等待中间件健康检测感知断网自动收敛)。

那么啥样的业务优先接入呢?肯定是核心链路,比如我司是负责电商的,那么“核心链路”指用户完成“选购,下单”这条动线上所必需的界面和功能,至少包括“首页、搜索、店铺、详情、购物车、下单页、支付、订单列表与详情”等。当出现区域或AZ类型的故障时,必须保证这些功能的迅速恢复和可用,同时不断提升其他增值功能的保障能力,逐步对齐核心链路。

paradin

1
2
3
4
5
6
7
入口流量按照1:1均衡分布到两个机房的接入层,接入层通过VIPServer获取upstream列表,并按照同机房转发以保证入口流量尽量在机房内封闭。
应用间HSF服务调用通过HSF服务接口的同机房优先策略保证RPC流量尽量在机房内封闭。
Notify和MetaQ:消息双机房随机收发。
MDB定制版:应用读写本机房的集群,两个机房的集群会双向同步删除操作。这里解释一下为啥要这样,因为降低延迟,提升性能。电商里很多的秒杀、实时风控的场景,这些都是对延迟敏感的业务,所以RT不能太高。同时每个机房也可以根据负载来独立扩容,比如增加只读实例。为啥要双向同步删除操作,是为了保障数据的一致性,用户在一个机房删除数据后,若另一机房未同步删除就会有数据不一致(重复订单)的问题。
MDB标准版:应用跨机房读写。
LDB:主备模式,其中一个机房的应用需要跨机房读写。
数据库:主备模式,3节点分布在张北 NA61 NA62 NA63 3机房,3节点强一致数据同步,由于同城机房网络时延<1ms,因此对业务几乎无感知。

当进入容灾态的时候,就是这样了:
paradin

1
2
3
4
5
6
7
入口流量由GOC统一切到非故障机房的接入层,接入层通过VIPServer获取upstream列表,并按照同机房转发以保证入口流量尽量在机房内封闭。
应用间HSF服务调用通过HSF服务接口的同机房优先策略保证RPC流量尽量在机房内封闭。如未设置同机房优先则会出现跨机房的HSF调用超时,需要等待CS感知心跳并自动收敛或者通过CDR主动拉黑断网容器IP。
Notify和MetaQ:故障时变成同机房收发消息;如有消费者仅在故障机房部署,此时消息会堆积,但不会丢。
MDB定制版:应用读写本机房的集群,两个机房的集群会双向同步删除操作。故障时无需切换,网络恢复后故障机房的缓存数据会被清空。
MDB标准版:应用跨机房读写部分会失败,命中率下降超过50%。
LDB:主备模式,由GOC统一切到非故障机房进行读写。
数据库:主备模式,3节点分布在张北 NA61 NA62 NA63 3机房,强一致数据同步,Leader节点所在机房故障会自动切到Follower节点进行读写。

所以说整个同城容灾的精华就是“HSF同机房优先”,这里面还有一个Config server,这个Config server也是主备的,主down机之后,备cs会立即接管集群。数据库leader心跳异常后自动切到follower也是非常重要。

如果是要做容灾的演习,事前需要先跟业务约定,每次的断网只会断一个机房的网,同时发布演练计划。这样避免届时断网的时候有大量报警而产生不必要的惊慌。然后组织方需要发布演练公告,让参与的业务方SRE加入沟通群,方便及时交流。大部分SRE oncall 即可,核心领域的SRE需要现场值班。

然后组织方开始准备工作,比如白名单和打标。在注入故障的时候,就要应用的负责人和SRE通过日志和监控链接来确认“机房切换(DNS,tair和中间件)是否成功”、“自动容灾预案是否生效”、“业务的异常日志是否有预期内的收敛”以及“业务成功率是否在预期内恢复”。

感谢您请我喝咖啡~O(∩_∩)O,如果要联系请直接发我邮箱chenx1242@163.com,我会回复你的
-------------本文结束感谢您的阅读-------------