运维故障处理指南

故障 专栏收录该内容
1 篇文章 0 订阅

1.故障处理原则
故障处理的原则只有两个:
1,以恢复业务优先
2,及时升级
1.1. 恢复业务优先
恢复业务优先是指,不管在任何情况下,也不管任何级别的故障,都要先做到恢复业务,这个和故障定位不同,也有很多人会产生歧义,觉得如果不找到问题的根源,如何能恢复业务,下面我举一个例子说明二者的差别:
如果A应用调B应用时,调用失败,这时我们要怎么做?
方法一,排查问题,寻找A到B之间会经过哪些环节,找到其中的出问题的环节,比如HA连接异常,进行重启或者扩容恢复。
方法二,从A应用的服务器去ping B应用的网络,如果端口,网络联通,那么直接绑定B服务器的hosts。
一般而言,第二种方法时间会短,如果A和B之间是跨机房访问,那么方法一排查时间会更长,虽然破坏了A到B之间的架构平衡,但是能马上见效,这就是我们所说的以恢复业务优先。
1.2. 及时升级
这个比较好理解,任何故障在发生时,对故障的影响任何人只能做一个简单的预测,所以要及时升级到你的领导那里,让他掌握第一手的信息,协调资源,如果有如下情况,那么必须马上上升:
1,有明确业务影响,例如PV,UV,购物车,订单或者支付等业务指标波动。
2,非常重要的业务的严重以上的告警故障,比如北斗核心业务,核心的组件等。
3,处理时效明显超长(时效参考故障处理时效定义)。
4,有高级别领导,监控中心或者客服已经关注到这个故障。
5,很明确超出了自己的能力范围。

注意:任何运维故障,运维的领导必须是第一个知道的人,如果他从别的人或者部门中知道这个故障,那么就很被动,而且是故障处理人失职表现。
2.故障处理方法论
故障处理一般会分为三个阶段,故障前,故障中和故障后,故障前是指故障的定位分析,故障中是指故障处理过程,故障后是指故障总结,故障总结很重要,这个会单独放到一章,故障定位很杂,以后会单独去写,这里主要讲一下故障中的一些运维常用的方法。
2.1故障服务来看运维处理故障方法
如果从故障服务来看,运维恢复业务最重要的三个方法是:
重启,隔离和降级

重启:重启包括服务重启和服务器重启(os重启)两种,在发生故障中,任何中涉及到的环节,都可以重启来完成,重启的一般顺序是,故障对象>故障对象上游>故障对象下游,一般离故障对象越远,重启顺序越靠后。
以今天的RabbitMQ故障为例:
当已经知道RabbitMQ发送消息失败的时候,那么就要对它进行重启,如果还没生效,那么则对他上游(消息生产者)进行重启,还不行就对下游,消息消费方进行重启。
这里需要注意的是,千万千万不要想着去定位,比如发现重启的对象指标都正常,则不进行重启,时刻谨记,是在恢复业务,不是在定位故障。

隔离:隔离是指对故障的对象从集群中抽离的过程,目的是让故障对象不在提供服务,隔离的方法包括以下两种,按照常用频率排序:
1,调整上游权重为零,如果架构上有自检测机制,那么也可以直接停止故障对象的服务,让上游健康探测时效。
2,通过绑定hosts或者配置路由的方式,绕开故障对象。比如智能路由管理域关闭某一条线路。
这里需要注意的是,防止雪崩效应。

降级:降级是指为了防止产生更大的故障所采取的一种预案,一般而言,降级一定不是当下生产的给用户的最优状态,即使没有技术影响,也会或多或少带来一些业务的影响,比如唯品花降级等,虽然用户可以通过其他渠道进行支付,但会带来不好的用户体验和一些用户影响。
降级不仅仅是运维的事情,要联合业务研发或者说推动业务研发一起去实施,孙子兵法有云:为将者,未虑胜,先虑败,因此做任何一个项目时,首要考虑的不是这个项目能取得多少业绩,而是要考虑的是,如果出现异常怎么办?
以CDN管理为例:
我们要求开发提供的预案有:
1,任何时候,核心域,都可以更换到备用域名,并且是分钟级生效。
2,核心域必须有重试机制,当访问一个域名失败时,APP能够直接回源到源站。
3,前端业务重试提供开关功能,可以一键关闭重试机制(主要担心源站会被重试打垮)
项目如此,核心应用和组件也要如此,作为应用负责人,必须要考虑的是,如果这个对象发生重大故障时,是否有预案可以使用,并且要把这些预案触发条件,执行人等都要明确下来。
降级,从某种角度来说,是运维的最后保命手段,必须要注意。

上述操作方法,尤其是重启和隔离有一个重要的前提,那就是,对象必须是无状态的,如果需要开发重试,那么要求必须是幂等的。对象无状态除非是非常特殊的业务,可以临时存在外,其余是不可以的,所以生产上对象应该只有三种状态:
1,无状态,这个要占大多数
2,临时有状态,需要整改
3,有状态,少量的

2.2.从故障影响方去看运维故障处理方法
一个故障发生后,影响方会分为两类:
外部用户和内部用户
2.2.1.外部用户
外部用户的处理会比较麻烦,处理的思路是,如何把外部用户转变成内部用户,比如,一个供应商打不开公司的网站,这时要做的是有两个方面:
1,自己在本地模拟是否可以重现,如果可以重现,那么就不是用户到IDC之间公网问题,是内部系统问题,那么变成内部用户处理。
2,如果自己在本地模拟不能重现,那么多找几个内部用户模拟,防止自己环境问题,同时,让用户进行hosts绑定到其他入口,排除DNS,一些外网链路问题,如果这时用户在绑定hosts后,访问正常,那么恢复业务,同时可以确认大概率是外部问题。

如果上述两个方面都不行,那么就比较麻烦了,这时要收集一些必要的外部用户信息才能进行处理,比如出口IP,所用客户端版本等等,这里建议收集信息有个模版,一次性完成,因为外部用户处理时效往往会花在沟通成本上。
2.2.2.内部用户
内部用户包括内部应用自身调用问题和内部使用人员发现问题,这时的操作方法参考2.1来处理。

2.3. 故障处理过程中的组织架构
故障处理一般需要有三拨人同时行动
1,故障处理者,他们的职责就是尽快恢复业务。
2,故障定位者,他们的职责是当故障处理者方法失效或者需要查找问题根因时,解决故障。
3,信息传递者,他们的职责是对故障处理,故障定位传递有效信息,同时对外部传递故障进展信息。

往往运维这三类人不会同时存在,比如在凌晨值班时,只需要故障处理者处理即可,恢复业务后,第二天由故障定位者去找根因及优化措施。

当然,三拨人可以复用。

3.故障总结
故障总结是个大活,每一次故障发生,都要尽量从根源去解决,同时避免发生重复故障和类似故障,PDCA,一次次改进。

由于故障总结会涉及到故障的定责,所以这里需要写一些注意事项,尤其是对待故障中蛮不讲理的人。

故障分析话术参见 https://blog.csdn.net/weixin_45051099/article/details/100888825

  • 1
    点赞
  • 1
    评论
  • 9
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值