作为一个SRE,其实要面对的故障原因主要就是这么几个:
- 基础设施
- 生产系统
- 操作人
- 操作流程
既然基础设施肯定会出问题(挖断光缆、火灾等等),那么容灾这个课题是每一个SRE必须要研究的事情。不过相比较火灾这种影响面是一栋楼的,洪水+大风这种影响一片楼的天灾更吓人。
此时SRE就要跟基础的同学一起制定演练规则、演练机制、容灾架构和具体的演练方案,通过定期的演练可以验收如下事情:
● 容灾能力检验:检验集团业务线核心业务的容灾能力(恢复能力、恢复时长);
● 容灾预案有效性检验:检查核心业务机房级故障容灾预案有效性;
● 容灾风险透视:预先透视容灾风险,降低风险转化为线上故障的的机率;
● 容灾应急能力提升:通过演练,提升灾难场景下业务团队的协作能力;
这里本文先唠唠“同城容灾”。
首先同城要有多个机房,而且每个机房都要投入生产,而不是一个机房工作另一个机房闲着,这要做的目的第一是对成本友好,第二是确认两个机房都是能正常接入业务流量的。
其次业务应该优先接入同城容灾,同时接入层aserver、数据库(三节点)、Tair(缓存主备)、中间件早已标配同城容灾能力,因此对于业务而言接入同城容灾成本是非常低的,基本上只要应用容器在双机房部署,并且将HSF服务规则和VIPServer对称调用策略都开启同机房优先即可(非必选,可通过CDR执行CS拉黑预案;能接受更长RTO可等待中间件健康检测感知断网自动收敛)。
那么啥样的业务优先接入呢?肯定是核心链路,比如我司是负责电商的,那么“核心链路”指用户完成“选购,下单”这条动线上所必需的界面和功能,至少包括“首页、搜索、店铺、详情、购物车、下单页、支付、订单列表与详情”等。当出现区域或AZ类型的故障时,必须保证这些功能的迅速恢复和可用,同时不断提升其他增值功能的保障能力,逐步对齐核心链路。
1 | 入口流量按照1:1均衡分布到两个机房的接入层,接入层通过VIPServer获取upstream列表,并按照同机房转发以保证入口流量尽量在机房内封闭。 |
当进入容灾态的时候,就是这样了:
1 | 入口流量由GOC统一切到非故障机房的接入层,接入层通过VIPServer获取upstream列表,并按照同机房转发以保证入口流量尽量在机房内封闭。 |
所以说整个同城容灾的精华就是“HSF同机房优先”,这里面还有一个Config server,这个Config server也是主备的,主down机之后,备cs会立即接管集群。数据库leader心跳异常后自动切到follower也是非常重要。
如果是要做容灾的演习,事前需要先跟业务约定,每次的断网只会断一个机房的网,同时发布演练计划。这样避免届时断网的时候有大量报警而产生不必要的惊慌。然后组织方需要发布演练公告,让参与的业务方SRE加入沟通群,方便及时交流。大部分SRE oncall 即可,核心领域的SRE需要现场值班。
然后组织方开始准备工作,比如白名单和打标。在注入故障的时候,就要应用的负责人和SRE通过日志和监控链接来确认“机房切换(DNS,tair和中间件)是否成功”、“自动容灾预案是否生效”、“业务的异常日志是否有预期内的收敛”以及“业务成功率是否在预期内恢复”。