天天看點

阿裡如何做到百萬量級硬體故障自愈?1.背景2.硬體故障發現3.硬體故障自愈4.架構演進5.故障自愈閉環體系

随着阿裡大資料産品業務的增長,伺服器數量不斷增多,IT運維壓力也成比例增大。各種軟、硬體故障而造成的業務中斷,成為穩定性影響的重要因素之一。本文詳細解讀阿裡如何實作硬體故障預測、伺服器自動下線、服務自愈以及叢集的自平衡重建,真正在影響業務之前實作硬體故障自動閉環政策,對于常見的硬體故障無需人工幹預即可自動閉環解決。

1.背景

1.1.面臨挑戰

對于承載阿裡巴巴集團95%資料存儲及計算的離線計算平台MaxCompute,随着業務增長,伺服器規模已達到數十萬台,而離線作業的特性導緻硬體故障不容易在軟體層面被發現,同時集團統一的硬體報障門檻值常常會遺漏一些對應用有影響的硬體故障,對于每一起漏報,都對叢集的穩定性構成極大的挑戰。

針對挑戰,我們面對兩個問題:硬體故障的及時發現與故障機的業務遷移。下面我們會圍繞這兩個問題進行分析,并詳細介紹落地的自動化硬體自愈平台——DAM。在介紹之前我們先了解下飛天作業系統的應用管理體系——天基(Tianji)。

1.2.天基應用管理

MaxCompute是建構在阿裡資料中心作業系統——飛天(Apsara)之上,飛天的所有應用均由天基管理。天基是一套自動化資料中心管理系統,管理資料中心中的硬體生命周期與各類靜态資源(程式、配置、作業系統鏡像、資料等)。而我們的硬體自愈體系正是與天基緊密結合,利用天基的Healing機制建構面向複雜業務的硬體故障發現、自愈維修閉環體系。

阿裡如何做到百萬量級硬體故障自愈?1.背景2.硬體故障發現3.硬體故障自愈4.架構演進5.故障自愈閉環體系

透過天基,我們可以将各種實體機的指令(重新開機、重裝、維修)下發,天基會将其翻譯給這台實體機上每個應用,由應用根據自身業務特性及自愈場景決策如何響應指令。

2.硬體故障發現

2.1.如何發現

我們所關注的硬體問題主要包含:硬碟、記憶體、CPU、網卡電源等,下面列舉對于常見硬體問題發現的一些手段和主要工具:

阿裡如何做到百萬量級硬體故障自愈?1.背景2.硬體故障發現3.硬體故障自愈4.架構演進5.故障自愈閉環體系

在所有硬體故障中,硬碟故障占比50%以上,下面分析一下最常見的一類故障:硬碟媒介故障。通常這個問題表象就是檔案讀寫失敗/卡住/慢。但讀寫問題卻不一定是媒介故障産生,是以我們有必要說明一下媒介故障的在各層的表象。

阿裡如何做到百萬量級硬體故障自愈?1.背景2.硬體故障發現3.硬體故障自愈4.架構演進5.故障自愈閉環體系

a. 系統日志報錯是指在/var/log/messages中能夠找到類似下面這樣的報錯

Sep 3 13:43:22 host1.a1 kernel: : [14809594.557970] sd 6:0:11:0: [sdl] Sense Key : Medium Error [current]

Sep 3 20:39:56 host1.a1 kernel: : [61959097.553029] Buffer I/O error on device sdi1, logical block 796203507

b. tsar io名額變化是指rs/ws/await/svctm/util等這些名額的變化或突變,由于報錯期間會引起讀寫的停頓,是以通常會展現在iostat上,繼而被采集到tsar中。

 ●  在tsar io名額中,存在這樣一條規則讓我們區分硬碟工作是否正常 qps=ws+rs<100 & util>90,假如沒有大規模的kernel問題,這種情況一般都是硬碟故障引起的。

c. 系統名額變化通常也由于io變化引起,比如D住引起load升高等。

d. smart值跳變具體是指197(Current_Pending_Sector)/5(Reallocated_Sector_Ct)的跳變。這兩個值和讀寫異常的關系是:

 ●  媒介讀寫異常後,在smart上能觀察到197(pending) +1,表明有一個扇區待确認。

 ●  随後在硬碟空閑的時候,他會對這個197(pending)中攢的各種待确認扇區做确認,如果讀寫通過了,則197(pending) -1,如果讀寫不通過則 197(pending)-1 且 5(reallocate)+1。

總結下來,在整條報錯鍊路中,隻觀察一個階段是不夠的,需要多個階段綜合分析來證明硬體問題。由于我們可以嚴格證明媒介故障,我們也可以反向推導,當存在未知問題的時候能迅速地區分出是軟體還是硬體問題。

上述的工具是結合運維經驗和故障場景沉澱出來,同時我們也深知單純的一個發現源是遠遠不夠的,是以我們也引入了其他的硬體故障發現源,将多種檢查手段結合到一起來最終确診硬體故障。

2.2.如何收斂

上一章節提到的很多工具和路徑用來發現硬體故障,但并不是每次發現都一定報故障,我們進行硬體問題收斂的時候,保持了下面幾個原則:

 ●  名額盡可能與應用/業務無關:有些應用名額和硬體故障相關性大,但隻上監控,不作為硬體問題的發現來源。 舉一個例子,當io util大于90%的時候硬碟特别繁忙,但不代表硬碟就存在問題,可能隻是存在讀寫熱點。我們隻認為io util>90且iops<30 超過10分鐘的硬碟可能存在硬體問題。

 ●  采集敏感,收斂謹慎:對于可能的硬體故障特征都進行采集,但最終自動收斂分析的時候,大多數采集項隻做參考,不作為報修依據。 還是上一個硬碟io util的例子,如果單純出現io util>90且iops<30的情況,我們不會自動報修硬碟,因為kernel問題也可能會出現這個情況。隻有當 smartctl逾時/故障扇區 等明确故障項出現後,兩者關聯才确診硬碟故障,否則隻是隔離觀察,不報修。

2.3.覆寫率

以某生産叢集,在20xx年x月的IDC工單為例,硬體故障及工單統計如下:

阿裡如何做到百萬量級硬體故障自愈?1.背景2.硬體故障發現3.硬體故障自愈4.架構演進5.故障自愈閉環體系

去除帶外故障的問題,我們的硬體故障發現占比為97.6%。

3.硬體故障自愈

3.1 自愈流程

針對每台機器的硬體問題,我們會開一個自動輪轉工單來跟進,目前存在兩套自愈流程:【帶應用維修流程】和【無應用維修流程】,前者針對的是可熱拔插的硬碟故障,後者是針對餘下所有的整機維修硬體故障。

阿裡如何做到百萬量級硬體故障自愈?1.背景2.硬體故障發現3.硬體故障自愈4.架構演進5.故障自愈閉環體系

在我們的自動化流程中,有幾個比較巧妙的設計:

a. 無盤診斷

 ●  對于當機的機器而言,無法進無盤(ramos)才開【無故當機】維修工單,這樣能夠大量地減少誤報,減少服務台同學負擔。

 ●  無盤中的壓測可以完全消除目前版本的kernel或軟體的影響,真實地判斷出硬體是否存在性能問題。

b. 影響面判斷/影響更新

 ●  對于帶應用的維修,我們也會進行程序是否D住的判斷。如果存在程序D住時間超過10分鐘,我們認為這個硬碟故障的影響面已擴大到了整機,需要進行重新開機消除影響。

 ●  在重新開機的時候如果出現了無法啟動的情況,也無需進行人工幹預,直接進行影響更新,【帶應用維修流程】直接更新成【無應用維修流程】。

c. 未知問題自動化兜底

 ●  在運作過程中,會出現一些機器當機後可以進無盤,但壓測也無法發現任何硬體問題,這個時候就隻能讓機器再進行一次裝機,有小部分的機器确實在裝機過程中,發現了硬體問題繼而被修複了。

d. 當機分析

 ●  整個流程巧妙的設計,使得我們在處理硬體故障的時候,同時具備了當機分析的能力。

 ●  不過整機流程還以解決問題為主導向,當機分析隻是副産品。

 ●  同時,我們也自動引入了集團的當機診斷結果進行分析,達到了1+1>2的效果。

3.2.流程統計分析

如果是同樣的硬體問題反複觸發自愈,那麼在流程工單的統計,能夠發現問題。例如聯想RD640的虛拟序列槽問題,在還未定位出根因前,我們就通過統計發現了:同個機型的機器存在反複當機自愈的情況,即使機器重裝之後,問題也還是會出現。接下來我們就隔離了這批機器,保障叢集穩定的同時,為調查争取時間。

3.3.業務關聯誤區

事實上,有了上面這套完整的自愈體系之後,某些業務上/kernel上/軟體上需要處理的問題,也可以進入這個自愈體系,然後走未知問題這個分支。其實硬體自愈解決業務問題,有點飲鸩止渴,容易使越來越多還沒想清楚的問題,嘗試通過這種方式來解決兜底。

阿裡如何做到百萬量級硬體故障自愈?1.背景2.硬體故障發現3.硬體故障自愈4.架構演進5.故障自愈閉環體系

目前我們逐漸地移除對于非硬體問題的處理,回歸面向硬體自愈的場景(面向軟體的通用自愈也有系統在承載,這類場景與業務的耦合性較大,無法面向集團通用化),這樣也更利于軟硬體問題分類和未知問題發現。

4.架構演進

4.1.雲化

最初版本的自愈架構是在每個叢集的控制機上實作,因為一開始時候運維同學也是在控制機上處理各種問題。但随着自動化地不斷深入,發現這樣的架構嚴重阻礙了資料的開放。于是我們采用中心化架構進行了一次重構,但中心化架構又會遇到海量資料的處理問題,單純幾個服務端根本處理不過來。

是以我們對系統進一步進行分布式服務化的重構,以支撐海量業務場景,将架構中的各個子產品進行拆解,引入了 阿裡雲日志服務(sls)/阿裡雲流計算(blink)/阿裡雲分析資料庫(ads) 三大神器,将各個采集分析任務由雲産品分擔,服務端隻留最核心的硬體故障分析和決策功能。

下面是DAM1與DAM3的架構對比

阿裡如何做到百萬量級硬體故障自愈?1.背景2.硬體故障發現3.硬體故障自愈4.架構演進5.故障自愈閉環體系

4.2.資料化

随着自愈體系的不斷深入,各階段的資料也有了穩定的産出,針對這些資料的更高維分析,能讓我們發現更多有價值且明确的資訊。同時,我們也将高維的分析結果進行降維,采用健康分給每台機器打标。通過健康分,運維的同學可以快速知曉單台機器、某個機櫃、某個叢集的硬體情況。

4.3.服務化

基于對全鍊路資料的掌控,我們将整個故障自愈體系,作為一個硬體全生命周期标準化服務,提供給不同的産品線。基于對決策的充分抽象,自愈體系提供各類感覺門檻值,支援不同産品線的定制,形成适合個性化的全生命周期服務。

5.故障自愈閉環體系

在AIOps的感覺、決策、執行閉環體系中,軟體/硬體的故障自愈是最常見的應用場景,行業中大家也都選擇故障自愈作為首個AIOps落地點。在我們看來,提供一套通用的故障自愈閉環體系是實作AIOps、乃至NoOps(無人值守運維)的基石,應對海量系統運維,智能自愈閉環體系尤為重要。

5.1.必要性

在一個複雜的分布式系統中,各種架構間不可避免地會出現運作上的沖突,而這些沖突的本質就在于資訊不對稱。而資訊不對稱的原因是,每種分布式軟體架構在設計都是内斂閉環的。現在,通過各種機制各種運維工具,可以抹平這些沖突,然而這種方式就像是在打更新檔,伴随着架構的不斷更新,更新檔似乎一直都打不完,而且越打越多。是以,我們有必要将這個行為抽象成自愈這樣一個行為,在架構層面顯式地聲明這個行為,讓各軟體參與到自愈的整個流程中,将原本的沖突通過這種方式轉化為協同。

目前我們圍繞運維場景中最大的沖突點:硬體與軟體沖突,進行架構和産品設計,通過自愈的方式提升複雜的分布式系統的整體魯棒性。

5.2.普适性

透過大量機器的硬體自愈輪轉,我們發現:

 ●  被納入自愈體系的運維工具的副作用逐漸降低(由于大量地使用運維工具,運維工具中的操作逐漸趨于精細化)。

 ●  被納入自愈體系的人工運維行為也逐漸變成了自動化。

 ●  每種運維動作都有了穩定的SLA承諾時間,不再是随時可能運作報錯的運維腳本。

是以,自愈實際上是在複雜的分布式系統上,将運維自動化進行充分抽象後,再構築一層閉環的架構,使得架構生态形成更大的協調統一。

原文釋出時間為:2018-11-19

本文作者:鐘炯恩