1.故障處理原則
故障處理的原則只有兩個(gè):
以恢復(fù)業(yè)務(wù)優(yōu)先
及時(shí)升級(jí)
1.1恢復(fù)業(yè)務(wù)優(yōu)先
恢復(fù)業(yè)務(wù)優(yōu)先是指,不管在任何情況下,也不管任何級(jí)別的故障,都要先做到恢復(fù)業(yè)務(wù),這個(gè)和故障定位不同,也有很多人會(huì)產(chǎn)生歧義,覺得如果不找到問題的根源,如何能恢復(fù)業(yè)務(wù),下面我舉一個(gè)例子說明二者的差別:
如果A應(yīng)用調(diào)B應(yīng)用時(shí),調(diào)用失敗,這時(shí)我們要怎么做?
方法一,排查問題,尋找A到B之間會(huì)經(jīng)過哪些環(huán)節(jié),找到其中的出問題的環(huán)節(jié),比如HA連接異常,進(jìn)行重啟或者擴(kuò)容恢復(fù)。
方法二,從A應(yīng)用的服務(wù)器去ping B應(yīng)用的網(wǎng)絡(luò),如果端口,網(wǎng)絡(luò)聯(lián)通,那么直接綁定B服務(wù)器的hosts。
一般而言,第二種方法時(shí)間會(huì)短,如果A和B之間是跨機(jī)房訪問,那么方法一排查時(shí)間會(huì)更長(zhǎng),雖然破壞了A到B之間的架構(gòu)平衡,但是能馬上見效,這就是我們所說的以恢復(fù)業(yè)務(wù)優(yōu)先。
1.2及時(shí)升級(jí)
這個(gè)比較好理解,任何故障在發(fā)生時(shí),對(duì)故障的影響任何人只能做一個(gè)簡(jiǎn)單的預(yù)測(cè),所以要及時(shí)升級(jí)到你的領(lǐng)導(dǎo)那里,讓他掌握第一手的信息,協(xié)調(diào)資源,如果有如下情況,那么必須馬上上升:
有明確業(yè)務(wù)影響,例如PV,UV,購(gòu)物車,訂單或者支付等業(yè)務(wù)指標(biāo)波動(dòng)。
非常重要的業(yè)務(wù)的嚴(yán)重以上的告警故障,比如北斗核心業(yè)務(wù),核心的組件等。
處理時(shí)效明顯超長(zhǎng)(時(shí)效參考故障處理時(shí)效定義)。
有高級(jí)別領(lǐng)導(dǎo),監(jiān)控中心或者客服已經(jīng)關(guān)注到這個(gè)故障。
很明確超出了自己的能力范圍。
注意:任何運(yùn)維故障,運(yùn)維的領(lǐng)導(dǎo)必須是第一個(gè)知道的人,如果他從別的人或者部門中知道這個(gè)故障,那么就很被動(dòng),而且是故障處理人失職表現(xiàn)。
2.故障處理方法論
故障處理一般會(huì)分為三個(gè)階段,故障前,故障中和故障后,故障前是指故障的定位分析,故障中是指故障處理過程,故障后是指故障總結(jié),故障總結(jié)很重要,這個(gè)會(huì)單獨(dú)放到一章,故障定位很雜,以后會(huì)單獨(dú)去寫,這里主要講一下故障中的一些運(yùn)維常用的方法。
2.1故障服務(wù)來看運(yùn)維處理故障方法
如果從故障服務(wù)來看,運(yùn)維恢復(fù)業(yè)務(wù)最重要的三個(gè)方法是:重啟,隔離和降級(jí)。
重啟:重啟包括服務(wù)重啟和服務(wù)器重啟(os重啟)兩種,在發(fā)生故障中,任何中涉及到的環(huán)節(jié),都可以重啟來完成,重啟的一般順序是,故障對(duì)象>故障對(duì)象上游>故障對(duì)象下游,一般離故障對(duì)象越遠(yuǎn),重啟順序越靠后。
以今天的RabbitMQ故障為例:當(dāng)已經(jīng)知道RabbitMQ發(fā)送消息失敗的時(shí)候,那么就要對(duì)它進(jìn)行重啟,如果還沒生效,那么則對(duì)他上游(消息生產(chǎn)者)進(jìn)行重啟,還不行就對(duì)下游,消息消費(fèi)方進(jìn)行重啟。
這里需要注意的是,千萬(wàn)千萬(wàn)不要想著去定位,比如發(fā)現(xiàn)重啟的對(duì)象指標(biāo)都正常,則不進(jìn)行重啟,時(shí)刻謹(jǐn)記,是在恢復(fù)業(yè)務(wù),不是在定位故障。
隔離:隔離是指對(duì)故障的對(duì)象從集群中抽離的過程,目的是讓故障對(duì)象不在提供服務(wù),隔離的方法包括以下兩種,按照常用頻率排序:
調(diào)整上游權(quán)重為零,如果架構(gòu)上有自檢測(cè)機(jī)制,那么也可以直接停止故障對(duì)象的服務(wù),讓上游健康探測(cè)時(shí)效。
通過綁定hosts或者配置路由的方式,繞開故障對(duì)象。比如智能路由管理域關(guān)閉某一條線路。
這里需要注意的是,防止雪崩效應(yīng)。
降級(jí):降級(jí)是指為了防止產(chǎn)生更大的故障所采取的一種預(yù)案,一般而言,降級(jí)一定不是當(dāng)下生產(chǎn)的給用戶的最優(yōu)狀態(tài),即使沒有技術(shù)影響,也會(huì)或多或少帶來一些業(yè)務(wù)的影響,比如唯品花降級(jí)等,雖然用戶可以通過其他渠道進(jìn)行支付,但會(huì)帶來不好的用戶體驗(yàn)和一些用戶影響。
降級(jí)不僅僅是運(yùn)維的事情,要聯(lián)合業(yè)務(wù)研發(fā)或者說推動(dòng)業(yè)務(wù)研發(fā)一起去實(shí)施,孫子兵法有云:為將者,未慮勝,先慮敗,因此做任何一個(gè)項(xiàng)目時(shí),首要考慮的不是這個(gè)項(xiàng)目能取得多少業(yè)績(jī),而是要考慮的是,如果出現(xiàn)異常怎么辦?
以CDN管理為例:
我們要求開發(fā)提供的預(yù)案有:
任何時(shí)候,核心域,都可以更換到備用域名,并且是分鐘級(jí)生效。
核心域必須有重試機(jī)制,當(dāng)訪問一個(gè)域名失敗時(shí),APP能夠直接回源到源站。
前端業(yè)務(wù)重試提供開關(guān)功能,可以一鍵關(guān)閉重試機(jī)制(主要擔(dān)心源站會(huì)被重試打垮)
項(xiàng)目如此,核心應(yīng)用和組件也要如此,作為應(yīng)用負(fù)責(zé)人,必須要考慮的是,如果這個(gè)對(duì)象發(fā)生重大故障時(shí),是否有預(yù)案可以使用,并且要把這些預(yù)案觸發(fā)條件,執(zhí)行人等都要明確下來。
上述操作方法,尤其是重啟和隔離有一個(gè)重要的前提,那就是,對(duì)象必須是無狀態(tài)的,如果需要開發(fā)重試,那么要求必須是冪等的。對(duì)象無狀態(tài)除非是非常特殊的業(yè)務(wù),可以臨時(shí)存在外,其余是不可以的,所以生產(chǎn)上對(duì)象應(yīng)該只有三種狀態(tài):
無狀態(tài),這個(gè)要占大多數(shù)
臨時(shí)有狀態(tài),需要整改
有狀態(tài),少量的
2.2從故障影響方去看運(yùn)維故障處理方法
一個(gè)故障發(fā)生后,影響方會(huì)分為兩類:外部用戶和內(nèi)部用戶
2.2.1.外部用戶
外部用戶的處理會(huì)比較麻煩,處理的思路是,如何把外部用戶轉(zhuǎn)變成內(nèi)部用戶,比如,一個(gè)供應(yīng)商打不開公司的網(wǎng)站,這時(shí)要做的是有兩個(gè)方面:
自己在本地模擬是否可以重現(xiàn),如果可以重現(xiàn),那么就不是用戶到IDC之間公網(wǎng)問題,是內(nèi)部系統(tǒng)問題,那么變成內(nèi)部用戶處理。
如果自己在本地模擬不能重現(xiàn),那么多找?guī)讉€(gè)內(nèi)部用戶模擬,防止自己環(huán)境問題,同時(shí),讓用戶進(jìn)行hosts綁定到其他入口,排除DNS,一些外網(wǎng)鏈路問題,如果這時(shí)用戶在綁定hosts后,訪問正常,那么恢復(fù)業(yè)務(wù),同時(shí)可以確認(rèn)大概率是外部問題。
如果上述兩個(gè)方面都不行,那么就比較麻煩了,這時(shí)要收集一些必要的外部用戶信息才能進(jìn)行處理,比如出口IP,所用客戶端版本等等,這里建議收集信息有個(gè)模版,一次性完成,因?yàn)橥獠坑脩籼幚頃r(shí)效往往會(huì)花在溝通成本上。
2.2.2內(nèi)部用戶
內(nèi)部用戶包括內(nèi)部應(yīng)用自身調(diào)用問題和內(nèi)部使用人員發(fā)現(xiàn)問題,這時(shí)的操作方法參考2.1來處理。
2.3故障處理過程中的組織架構(gòu)
故障處理一般需要有三撥人同時(shí)行動(dòng)
故障處理者,他們的職責(zé)就是盡快恢復(fù)業(yè)務(wù)。
故障定位者,他們的職責(zé)是當(dāng)故障處理者方法失效或者需要查找問題根因時(shí),解決故障。
信息傳遞者,他們的職責(zé)是對(duì)故障處理,故障定位傳遞有效信息,同時(shí)對(duì)外部傳遞故障進(jìn)展信息。
往往運(yùn)維這三類人不會(huì)同時(shí)存在,比如在凌晨值班時(shí),只需要故障處理者處理即可,恢復(fù)業(yè)務(wù)后,第二天由故障定位者去找根因及優(yōu)化措施。
當(dāng)然,三撥人可以復(fù)用。
3.故障總結(jié)
故障總結(jié)是個(gè)大活,每一次故障發(fā)生,都要盡量從根源去解決,同時(shí)避免發(fā)生重復(fù)故障和類似故障,PDCA,一次次改進(jìn)。
由于故障總結(jié)會(huì)涉及到故障的定責(zé),所以這里需要寫一些注意事項(xiàng),尤其是對(duì)待故障中蠻不講理的人。
降級(jí),從某種角度來說,是運(yùn)維的最后保命手段,必須要注意。