10月4日,包括Facebook、Ins、WhatsApp 和 Oculus在內(nèi)的一系列服務(wù)群體宕機(jī)接近7小時(shí),以致于Facebook高管要到競(jìng)爭(zhēng)對(duì)手的地盤(pán)——推特上去發(fā)布聲明、通知,以及道歉。
故障解決后,各種細(xì)節(jié)陸續(xù)披露出來(lái),其原因的離奇讓廣大的運(yùn)維人員不由感嘆:原來(lái)Facebook也會(huì)出這些不靠譜的低級(jí)錯(cuò)誤啊。
單點(diǎn)故障
一條很簡(jiǎn)單的命令出錯(cuò)——這是Facebook方面披露的事故最初原因。根據(jù)Facebook工程和基礎(chǔ)設(shè)施副總裁Santosh Janardhan在一篇博客中透露,運(yùn)維工程師只是根據(jù)日常運(yùn)維要求輸入了一條命令,目的是評(píng)估Facebook全網(wǎng)容量的可用性,結(jié)果卻是“無(wú)意中切斷了我們骨干網(wǎng)絡(luò)中的所有連接,有效地?cái)嚅_(kāi)了 Facebook 全球數(shù)據(jù)中心的連接。”
Janardhan表示,系統(tǒng)中有一條審核程序可以防止出現(xiàn)類似的錯(cuò)誤,但很不巧的是,當(dāng)時(shí)這個(gè)審核系統(tǒng)也出現(xiàn)了問(wèn)題,導(dǎo)致錯(cuò)誤的命令被“正確無(wú)誤”的執(zhí)行了下去。
這條命令的執(zhí)行結(jié)果也非常簡(jiǎn)單:通知Facebook的域名解析服務(wù)器(DNS)刪除Facebook相關(guān)的IP段的路由記錄。從全網(wǎng)評(píng)估變?nèi)W(wǎng)刪除,從而導(dǎo)致了Facebook以及相關(guān)的域名無(wú)法訪問(wèn),全體宕機(jī)。
不過(guò)這些并不是Facebook史無(wú)前例宕機(jī)的根本原因。根本原因在于, Facebook雖然準(zhǔn)備了多臺(tái)DNS作為備份,但它們都處在子網(wǎng)絡(luò)185.89.218.0/23和129.134.30.0/23。凡是Facebook的解析都需要及經(jīng)過(guò)這里,一旦故障,就會(huì)導(dǎo)致Facebook及相關(guān)服務(wù)的失聯(lián)。
可以說(shuō),過(guò)于簡(jiǎn)單的DNS配置導(dǎo)致的單點(diǎn)故障才是Facebook此次故障的罪魁禍?zhǔn)住?/p>
電鋸驚魂?
運(yùn)維宇宙的上古時(shí)代流傳這個(gè)傳說(shuō):高權(quán)限管理員是一把改錐。
在這次Facebook故障中,改錐沒(méi)有露面,但是電鋸露了一小臉。在鋪天蓋地的猜測(cè)中,《紐約時(shí)報(bào)》語(yǔ)出驚人:因?yàn)閿?shù)據(jù)中心安全設(shè)施保護(hù)嚴(yán)密,加上系統(tǒng)故障導(dǎo)致門(mén)禁不可用,F(xiàn)acebook工程師最后靠一把電鋸打開(kāi)了大門(mén)……
雖然最后辟謠了,電鋸并沒(méi)有出場(chǎng)。但現(xiàn)場(chǎng)“物理維護(hù)”的艱難并不比遠(yuǎn)程維護(hù)容易半分。
Facebook表示,因?yàn)镈NS故障導(dǎo)致無(wú)法通過(guò)外網(wǎng)進(jìn)行遠(yuǎn)程操作,只好派工程師現(xiàn)場(chǎng)解決問(wèn)題。但“這些設(shè)施的設(shè)計(jì)考慮到了高水平的物理和系統(tǒng)安全性。它們很難進(jìn)入,一旦您進(jìn)入內(nèi)部,即使您可以物理訪問(wèn)它們,硬件和路由器的設(shè)計(jì)也很難修改。”
并且,工程師“需要額外的時(shí)間來(lái)激活讓人們到現(xiàn)場(chǎng)并能夠在服務(wù)器上工作所需的安全訪問(wèn)協(xié)議”。可見(jiàn)在宕機(jī)的7小時(shí)中,工程師為解決“物理問(wèn)題”也花了不小的功夫。
而在技術(shù)圈還有另一個(gè)傳聞:在一切解決后,工程師心急上電,結(jié)果導(dǎo)致DNS被瞬間流量沖垮,只好拔掉網(wǎng)線重新開(kāi)機(jī),才真正的恢復(fù)了服務(wù)。
至此,F(xiàn)acebook的驚魂7小時(shí)才算正式結(jié)束,而留給業(yè)界的思考和教訓(xùn)、經(jīng)驗(yàn)卻會(huì)長(zhǎng)久的流傳下去。
1、任何能引發(fā)單點(diǎn)故障的環(huán)節(jié)都需要有冗余系統(tǒng),無(wú)論看起來(lái)是否重要。
2、當(dāng)外網(wǎng)出現(xiàn)問(wèn)題無(wú)法遠(yuǎn)程運(yùn)維的時(shí)候,應(yīng)該有可以進(jìn)行訪問(wèn)的內(nèi)網(wǎng)通道。
3、一個(gè)關(guān)于電鋸的問(wèn)題:數(shù)據(jù)中心的物理安全措施同樣會(huì)受到系統(tǒng)故障的影響,應(yīng)該如何避免安全變成“掣肘”呢?