走近華佗,解析自動化故障處理系統 背後的秘密

2020-12-13 CSDN技術社區

集群醫生華佗是集群自動化故障監測和處理系統,是平臺和運維對接的關鍵系統。一方面完成飛天其他組件不擅長的OS和硬體的故障自動監測和處理,另一方面推動飛天去及時規避硬體和OS引起的故障,使得故障能夠閉環運轉,大幅度減少故障處理成本和造成的影響。飛天5K項目期間的規模效應凸顯出自動化處理故障的必要性,大幅提升了飛天平臺的穩定性,提高了運維人員的幸福感。華佗在飛天中的位置如圖1所示。

由來

2011年底和2012年初,飛天系統的通信系統使用的是夸父,夸父通過Agent代理負責本機所有的網絡通信,如果機器之間想要彼此通信,需要將彼此的IP加入到對方的配置文件中。由於集群變更頻繁和Agent本身穩定性的原因,出了好幾起和夸父配置及連通性相關的故障。夸父處於集群最底層,要保持集群的全連通,同時集群間也有通信的需求,也需要通過變更配置文件打通連通性。日常業務中,集群經常需要上線和下線機器,導致配置文件需要經常性地變更,偶爾A集群加了一批機器,B集群壓根不知道,造成集群間通信時而通,時而不通,查找原因非常困難。同時由於各種原因,會造成夸父之間的連接經常性地處於半通不通狀態。查找這樣的連接幾乎也需要兩兩測試連接,對於一個2000臺的集群,則需要測試2000×2000次操作,工作量非常大。華佗吸收了大量開發和運維經驗,用了隨機抽樣覆蓋加自動處理的方式解決了夸父連通性監控和處理的問題。

2013年初,雲梯2集群中的硬體3年保質期已過,但任務卻越來越多,連續好幾次的基線超時都與壞盤、慢盤相關。但對於壞盤和慢盤,大家一直都沒有一個很好的辦法和標準來界定——究竟壞到什麼程度、慢到什麼程度就會對應用產生影響。於是華佗就開始了解決壞盤和慢盤問題之旅。

飛天5K項目期間,由於規模效應,盤、機器、網絡的各種故障幾乎成為常態,各種異常都成為造成集群服務質量嚴重下降的根源。但在應用層來處理這種底層的異常顯然是隔靴搔癢,又慢又費勁,例如:

■ 發現總有一些機器有各種異常,使之很慢,但又沒有完全死透;

■ 集群間12根光纖有一根異常,造成部分通信異常,出現大量長尾的數據拷貝進程,拖慢總體進程;

■ 集群內的一臺交換機時斷時通,造成服務斷斷續續或者服務時間巨長;

■ 有一個Job的Worker進程內存總是超限造成被殺,影響其他進程。

定位和思考

在過去的3年裡,尤其是做飛天5K項目的3個多月裡,飛天單集群的規模增長了近一個量級,離線集群的數量也增長了10倍,而運維人員的規模卻沒有顯著的增加。按照當時的增速,運維人員和機器的數量比例將達到10000:1。根據以往的運維經驗,這個規模下,如果沒有故障的自動化處理,運維人員幾乎24小時都要處理故障,因為底層一個簡單的故障放大到上層可能是幾十倍到幾百倍的複雜度。例如一個交換機的網絡故障(半壞不壞),可能就會引起大批量的任務失敗,但調查失敗的根本原因可能要翻遍整個系統才知道是網絡故障。更重要的是單集群的規模增大之後,人為處理故障過程中可能出錯的概率更大,並且一旦出錯,整個集群會無法服務,影響面將更大。

飛天平臺各個組件設計之初已具備了非常好的容錯功能,但一直沒有和運維體系進行很好的對接,故障處理一直是運維人員通過各種零散的工具或人工在維護處理,成本越來越高。由於以上原因,華佗就承擔了飛天平臺自動化故障處理系統的任務,提升集群故障發現、處理的效率和準確性,解放運維人員,提高飛天穩定性和可靠性。

實現

如何能又快又好地發現和解決線上故障呢?我們進行了很長時間的思考,得到了圖2中的架構圖。

華佗一般通過華佗Master與外圍系統打交道, 既接受盤古、伏羲這樣的飛天組件訂閱硬體、OS相關對象的狀態機以便採取對應動作規避故障,同時支持驅動磁碟、內存這類對象的維修管理。

如圖3所示,每個C代表一個Checker,W代表一個Worker。個虛線框代表一個集群,每個集群會出一臺機器組成一組Master,通常3~5個大集群共用一組Master。

華佗內部是典型的Master/Slave架構

■ Master:一般1個數據中心共享一組Master ,Master採用Raft協議實現高可用,Master提供Agent所需的各種存儲、協調、全局決策調度服務。例如,狀態機服務、ODPS倒入服務、Quota服務和Checker分發。

■ Agent:調度本地Checker和Worker,同時提供本地Checker和Worker所需的服務——KV和Queue等。

■ Checker:按照Master配置要求,完成故障的發現和狀態維護,同時產生Action Checker來完成故障處理。

■Worker:處理Master發送的Task。

■Client:Client以SDK的形式內嵌在飛天的各個組件中,可以訂閱華佗各個對象的狀態、Event等。

外圍系統

■ ODPS:阿里雲自主研發的大數據系統,華佗用ODPS進行大規模系統和故障的數據挖掘,用以提高故障檢測準確率和預測故障的發生。

■ 維修系統:運維團隊和供應商對接的硬體維修平臺,華佗通過維修系統以工單的形式來報修硬體。

■ Portal :華佗提供運維操作平臺,用來監控和管理整個華佗。

■ ApsaraComponent:飛天基礎服務模塊,包含伏羲(飛天的調度系統)和盤古(飛天分布式文件系統),通過華佗SDK訂閱華佗的狀態機來實現與華佗的交互。

詳細實現

描述故障

想要很好地處理故障,就需要清晰地描述故障。狀態機是一種不錯的選擇,我們對於任何需要華佗處理的對象都建立狀態機來管理其整個生命周期。常見的狀態機包括但是不限於:磁碟、機器、網絡、內存、CPU、Apsarad(飛天守護進程)、ChunkServer(飛天存儲進程)。

一個故障的定義很自然:對象狀態或狀態組合。例如,對於磁碟故障,當一塊盤處於ERROR狀態時,單純就是磁碟故障;3塊盤故障處於ERROR狀態時,就是整個機器的故障。

狀態機是整個華佗的核心,所有的故障發現、處理、預測都是圍繞狀態機來完成的。

故障發現

Checker負責發現故障,發現故障後產生故障事件,Master處理Checker發現的事件,派發相應的動作給Worker,Worker負責執行具體Action(短期)或者Task(長期運行);同時如果滿足條件,將進行狀態遷移。每個對象的狀態都有對應的Checker,Checker會一直負責檢查處於本狀態的條件,如果已不滿足了,則直接將狀態機變回次態。Checker是整個華佗的基礎,所有故障的發現,觸發源頭都是Checker。Checker是系統裡量最大的,也是Badcase積累的結果,如果要保持系統Checker快速的迭代更新,同時要防止Checker本身有Bug而造成滾雪球效應,該怎麼辦?先思考一下,後面會說到。

處理故障

當Checker進行狀態變遷或處於某個狀態時,會產生對應動作(Action),對應動作會進行某個操作,一直到失敗或進入下個狀態。有些狀態的變遷在Master端可能會產生Task,Task需要一些機器整體統一做一個動作,例如,某個集群的Master Role遷移,或某個交換機下線。

版本控制:灰度發布,全量更新,版本校驗

Checker定位於可能快速更新迭代的組件,以便運維或者開發能夠快速地支持各種故障的處理,Checker本身可能是個Binary、腳本、Rule。為了保證線上Checker的質量,除了日常的Review和測試,線上的灰度發布和版本控制必不可少。華佗使用SVN進行Checker的版本管理,使用Master進行版本分發。華佗可以做到IP粒度版本控制和校驗,基於此,華佗可以進行多版本同時灰度,同時驗證發布,以增加Checker的迭代速度。

Quota管理和手工駕駛

在整個華佗運行過程中,可能會有我們預料不到的Bug產生,這些Bug可能會放大錯誤,產生滾雪球的效應。例如,可能磁碟的判斷會在特定條件下出錯,這樣會讓大批量的磁碟下線,造成集群劇烈抖動。也可能Kernel出現類似208天的問題(LinuxKernel著名的一個Bug:系統連續運行208.5天自行重啟),引起機器大批量的宕機。基於以上考慮,結合華佗自我保護機制,華佗引入Quota管理和手工駕駛,即當故障率超過華佗預設閾值時,它將直接報警,不再採取任何措施,進入手工駕駛狀態,同時日常的變更也可以進入手工駕駛的狀態。

Portal

華佗的所有狀態機、報警、事件和動作都可以通過Portal和API進行查詢和訂閱,方便其他系統接入。Portal也可以進行日常的華佗版本查看、變更和其他的操作。最常見的使用場景是當某個Job失敗後,可以通過Portal來查詢Job所在的機器是否發生過故障。

日常數據收集、故障深度挖掘和預測

除了日常的實時故障處理,華佗也收集OS和硬體的關鍵數據,如Dmesg、Smartctl、Top、Tcp、Ecc等。這些關鍵的數據進入ODPS進行數據挖掘,來預測某個對象下一個狀態(故障)的發生概率,同時也會根據挖掘的結果來調整Checker的規則和參數,以提高故障檢測的準確率。

常見的場景

華佗目前已能夠處理主流硬體和OS相關的故障,長尾Badcase處理逐漸增加中,可以適應快速迭代和開發節奏,同時幫助運維和開發共同沉澱線上集群的故障管理經驗。

磁碟管理

圖4中每個節點都是一個狀態,每條線上標註了進入到下一個狀態的條件。

A. 磁碟打分

華佗會根據磁碟的硬體、軟體相關的10多個檢測項目,按照既定規則庫對磁碟的100多個評分項進行一個綜合評分,將磁碟進行分級:Good、Slow、Warning、Error和Fatal。

磁碟的好壞和快慢受很多因素影響,加上應用對於磁碟的訴求也不一樣,如Online關注延時,Offline更關注吞吐,還有更細分的指標關注壽命等,所以打分規則是動態調整的,各個應用可以指定各個指標的權重和計算規則。 圖5是我們對一年的某個生產數據進行分析後得出各個規則和指標對於最終結果的影響度。

圖5中的橫軸是各個Rule(指標),縱軸是影響度。前面幾項都是根據後面的一些基礎指標慢慢積累調節出來的,例如在Offline的集群上,我們發現Kernel某個線程D狀態的次數決定了這塊盤的快慢,如果長期處於D狀態,則磁碟一定是出故障了。

B. 磁碟的狀態變遷

■ 在磁碟進入SLOW或WARNING狀態時,在線應用一般會選擇不再使用此磁碟,因為此時磁碟可能已經出現損壞的跡象,會造成延時大規模增加,但對於理想的應用則可以繼續使用。

■ 一旦磁碟進入ERROR狀態,則表明此磁碟可能馬上損壞,必須立即執行下線動作。此時盤古通過訂閱華佗的磁碟狀態機識別到後,會將磁碟設置成SHUTDOWN狀態,即磁碟不可讀寫開始備份數據。

■ 待華佗通過盤古確認數據備份完畢(數據安全),將磁碟進入REPAIR狀態。在REPAIR狀態時,華佗會通過運維的維修系統進行報修。

■ 供應商根據報修系統報修的狀態,每周進行2~3次的磁碟更換服務。更換完畢後,華佗會自動檢測到有新盤上線,繼而進入NEWBIE狀態。進入NEWBIE狀態的磁碟,華佗會進行自動分區、格式化、預掛載。

■ 預掛載完畢後,華佗就會進入TEST狀態,進行基本的檢查和小型Benchmark測試後決定繼續維修還是上線。

■ 測試通過的盤,就會掛載到真實的掛載點上開始供盤古使用。同時磁碟進入GOOD狀態。

C. 所有的磁碟數據都會通過Analyzer進入ODPS進行挖掘和分析,分析完畢後會通過調整規則、指標、參數等提高磁碟檢測的準確度,這是一個長期的過程。

機器管理

圖6是機器狀態轉換圖,機器管理和磁碟類似。

■ 當機器有各種原因(根分區只讀、Load 超高、內存壞)會進入的ERROR狀態,伏羲會訂閱華佗的狀態,發現進入ERROR狀態,會將在這臺機器上的進程全部調度走。

■ 調度走以後,華佗機器的狀態機會很快進入FIX狀態,進入FIX狀態後會根據進入原因採取對應的動作,儘量修復(Reboot、Restart相關進程、清理磁碟)。如果修復失敗,機器的狀態機將進入REPAIR狀態。

■ 進入REPAIR狀態後,盤古會通過訂閱的狀態機發現,自動將機器SHUTDOWN開始備份數據。備份完畢後,華佗會將其通過報修系統報修掉。廠商會根據情況進行每周2~3 次的機器維修。

■ 維修完畢後,機器進入NEWBIE狀態。進入NEWBIE狀態的機器將會進行RECLONE相關環境準備等操作。

■ 完畢之後進入待上線狀態TEST。華佗會進行基礎的環境檢查,檢查完畢後通知Fuxi上線。

網絡故障檢測

網絡的檢測不像磁碟,單機就可以解決掉,並且現在都是雙上聯、Multipath的網絡,就是你和A機器進行通信走的是一根線一條路,你和另外一個機器B進行通信走的是另外一根線一條路。而恰恰有問題的情況是:一根線或者其中一個交換機有問題,造成網絡時好時壞、時快時慢,加上集群熱點等情況,非常難於定位和排查。

華佗採用簡單投票的方式篩選出最有問題的機器,工作方式如下。

■ 每臺機器會實時監測到它所通信機器的網絡丟包、TCP重傳、RTT、帶寬等指標。

■ 應用本機規則決定是否投票給異常的機器,投票給其他機器的同時投票給自己。

■ 得票最多的top N機器就是有問題的機器。

■ 找出top N機器所有通信有問題的五元組(協議、源地址、源埠、目的地址、目的埠),根據五元組算出所有通信的路徑。

■ 對於算出路徑上的網絡設備,查詢其錯誤日誌,看是否有相應的故障,有問題報警給網絡。如果有問題,則將對應的機器轉換至ERROR狀態,進入壞機器的處理策略中。

心得

通過建立磁碟自動化的處理和磁碟故障的預測,可以大大提高集群磁碟的整體合格率,原因是新集群上線一段時間內,出廠不合格的磁碟,華佗通過集群預熱期就下線掉了,再經過半年壞盤淘汰後進入穩定期,集群整體磁碟的可使用壽命大大提高。在我們的實踐中,壞盤率可以做到非常接近磁碟的MTTF。磁碟作為集群中數量最多、增長最快(6塊→12塊→18塊→24塊)、故障率最高、處理最複雜(涉及到數據安全)、最消耗人力的硬體,自動化的處理收益最高。

機器各種故障區分度很低,對於Offline的業務,我們採用了最簡單直接的處理方式,Replace、Restart、Reboot、Reimage和SHUTDOWN。使得每種故障能夠有明確的行為,降低上層處理的複雜度。

網絡是非常基礎的服務,所有的服務都依賴網絡,使得網絡變得非常敏感和複雜。一個5K集群,其交換機數量100+,埠數量超過10K。一旦有問題,第一時間定位是最關鍵的,華佗的引入使得網絡故障定位由原來的小時級別降低到分鐘級別。

總結

由於故障的處理和平臺及業務密切相關,所以這裡只是介紹了華佗通用的一面,只是冰山一角。具體各種故障處理裡隱藏著大量的細節,這些細節的處理都是平臺拿一次次的故障堆出來的,這也是Google和Amazon等大型平臺對於自動化平臺諱莫如深的原因。

相關焦點

  • 一文看懂發電機勵磁系統的三大故障及處理方法
    失磁故障的處理:當失磁保護動作跳閘,則應完成機組解列工作,查明失磁原因,經處理正常後機組重新併入電網,同時匯報調度;當失磁保護未動作,且危及系統及本廠廠用電的運行安全時,則應及時將失磁的發電機解列,並應注意廠用電應自投成功,若自投不成功,則按有關廠用電事故處理原則進行處理;當失磁保護未動作,短時未危及系統及本廠廠用電的運行安全,應迅速降低失磁機組的有功出力,切換廠用電;儘量增加其它未失磁機組的勵磁電流
  • 自動化設備常見的故障排查方法
    自動化設備隨著廠家的不斷引入,成了廣大生產廠家的提效率,降成本的利器。任何一臺機械自動化全部都是由執行元件,傳感器部分,控制器部分三部分構成,當自動化機械忽然出現故障不工作,或是工作中出現程序錯亂時,就務必做好故障檢測。
  • 電力調度自動化系統特點及發展趨勢
    電力調度自動化系統的基本特徵        該技術應該能夠及時並準確地採集、檢測和處理電網中各元件、局部或整個系統運行的實時信息。 能根據電網的實際運行狀態和系統各元件的技術、經濟等指標要求,為調度人員做出準確的調節和控制的決策提供依據。
  • 電子電路常見故障類型及處理方法系統解析
    首先,電子電路長期運行導致某些元件或線路性能老化極易發生故障,其中較為常見的故障有電阻值發生改變、電晶體擊穿、電容漏電等;其次,電子電路工作過程中一些位置出現斷線、鬆動、接觸不良等情況,進而引發系統故障發生;最後,維修人員在維修過程中,安裝了不符合規格的電子元件或接錯線路等也容易引發故障。
  • 工業自動化設備運維管理系統 工業設備遠程運維解決方案
    針對這一問題,提出了工業自動化設備遠程運維管理系統的解決方案。工業自動化設備遠程運維系統通過工業自動化設備遠程運維系統,實現眾多設備運營數據的統一管理,實現大屏、PC、手機等終端設備對設備數據的統一運維和管控。
  • 軋機主傳動系統的急停迴路故障處理與分析
    1 引言  我廠的軋機主傳動選用全套西門子控制系統,大功率交交變頻系統控制2臺16極8000kw交流同步電動機。此套系統是西門子公司非常成熟的設備,運行穩定,而且主傳動系統中的op17面板可以顯示系統故障代碼,以便維護人員對設備故障進行診斷與處理,op17的提示功能可以說是在這幾年的維護工作裡起到了絕對關鍵的作用。
  • 系統管理利器,5種適合中型企業的基礎架構自動化工具
    SaltStack功能包括:專為規模和速度而設計,每個master最多可以處理10000個minions;設置非常簡單,具有單個遠程執行體系架構;SaltStack中的配置文件支持各種語言;它可以在遠程系統上並行執行命令,這有助於快速應用自動化;提供使用Python API的簡單編程接口。
  • SCR後處理系統故障確認與注意事項
    打開APP SCR後處理系統故障確認與注意事項 汽車電子電路研究 發表於 2020-12-08 15:47:18 SCR後處理系統故障確認 將鑰匙開關打至ON檔,組合儀表上MIL指示燈常亮(鑰匙開關打至ON,發動機未啟動時,儀表MIL指示燈常亮,液晶顯示區顯示排放故障,屬正常現象,不能作為判定後處理系統是否存在故障的依據)。
  • DTU配網電力系統自動化數據採集傳輸
    方案需求配電自動化/智能化目的是為了實現配電網數據採集與監控,針對配電網電壓管理,實現配電網故障診斷,實時對數據採集、監視控制,與控制中心和配電調度自動化系統(SCADA)通信。提高供電可靠性和供電質量,縮短事故處理時間,減少停電範圍,提高配電系統運行的經濟性,同時為了降低運行維護費用,智能配網需要用到DTU來實時監測線路電壓、線路電流、零序電流、設備狀態等運行及故障信息,完成遙信、遙測、遙控功能,實現配網自動化的實時監控。最大限度提高企業的經濟效益,提高整個配電系統的管理水平和工作效率,改善為用戶服務的水平。
  • DCS系統操作和6種常見故障解析
    系統異常情況處理1)DCS操作界面數據不刷新(正常情況數據每秒刷新一次),手自動切換無法操作等情況,應聯繫DCS 維護人員進行維護,同時立即到現場操作。2)出現變送器故障,自動控制過程應立即切回手動。3)出現閥門執行機構,迴路輸出卡件等故障現象,應改為現場操作。
  • 教師資格國考小學《綜合素質》模擬題及解析(34)
    A.扁鵲 B.張仲景C.華佗 D.孫思邈4.下列是我國古代的一些歷史文化名人,其中屬於兩漢時期的是( )。A.系統運行故障 B.Word本身缺陷C.文檔帶病毒 D.這些項在當前無效7.在Word中,下列操作不能實現的是( )。A.編輯文檔 B.表格處理C.圖形處理 D.資料庫管理.8.在Excel中,工作表最小的單元格地址為( )。
  • 配網自動化系統構成有哪些
    那麼,配網自動化系統構成有哪些?那麼,配網自動化系統構成有哪些?配網自動化系統一般由下列層次組成:配電主站、配電子站(常設在變電站內,可選配)、配電遠方終端(FTU、DTU、TTU等)和通信網絡。配電主站位於城市調度中心,配電子站部署於110kv/35kv變電站,子站負責與所轄區域DTU/TTU/FTU等電力終端設備通信,主站負責與各個子站之間通信。
  • 曹操殺死華佗背後的真相,答案其實就四個字
    古今多少事,言談至今仍是三國最熱議,那個年代,不僅僅有最熱血的男兒活躍在政治舞臺上,也還有身有所長者在廟堂之外留下傳奇,前者如曹操,後者如華佗,說起來,這兩者還頗有淵源,世人皆知,華佗死於曹操之手,可這背後的真實原因,古往今來卻沒有人能下個定論。
  • 消防報警系統疑難故障判斷處理方法!
    慧聰消防網訊     CFIC2016中國消防安全產業大會將於9月25日-27日隆重召開      文章摘要:     消防報警系統疑難故障判斷處理方法介紹    3、某迴路為何不停的報故障或反饋,然後又自動消失?     不停的報故障,如:設備類型不符或反饋,多為迴路線上有較高的幹擾,因報火警有較複雜的算法,故不會亂報火警。     此時可用「操作」菜單點測試功能可以看到單點測試的5條曲線均較大幅度的波動。
  • 《工礦自動化》2020年第11期「煤礦智能化故障診斷技術」專題
    煤礦智能化發展要求對系統和設備進行全方位的運行狀態監測、診斷和預警,以確保煤炭開採過程的連續性和安全性。由於煤礦井下環境惡劣,井下系統及設備故障頻發且難以準確高效診斷,煤礦智能化故障診斷技術仍面臨著諸多科學挑戰和難題。
  • DBA故障處理的老大難--慢語句
  • 衡東光通訊:軟體定義自動化光纖配線系統 (SAODF)
    目前的網絡管理軟體系統能對第1到第7層的電子網絡部件進行有效的監控和自動化管理。然而,位於物理層的純光無源互聯部件的狀態和管理,依然是通過人工記錄、大量的上門服務、目檢以及不同的資料庫記錄來實現的。   為了確保穩定而有效的操作,物理層的自動化管理方案的發展日益重要。
  • 純乾貨:302頁弱電工程人員必備的系統知識,圖文解析標準全面
    純乾貨:302頁弱電工程人員必備的系統知識,圖文解析標準全面當你對妙趣橫生的電子世界發生興趣時;當你彷徨於就業的關口,想成為電子產業中的一名員工時;當你躍躍欲試,想成為一名工廠的技術革新能手時;當你面對「無所不能"的「單片機」,夢想成為一名自動化高手時;當你的頭腦裡冒出那麼多的奇思妙想
  • 六款企業系統管理員必備的自動化工具
    自動化絕非CRON所能涵蓋得了;比如說,它包括用戶帳戶維護、自愈型腳本、日誌觀察工具(logwatcher)、網絡服務安裝、文件拷貝、文件系統內務處理、應用程式配置以及系統監控。一些管理員使用自動化腳本來部署物理機和虛擬機。雖然CRON、任務調度器及其他進程調度應用程式肯定大有幫助、非常普遍,但是它們不是系統管理員百寶箱中僅有的自動化工具,也不應該是。
  • AlOps:自動化運維的下一站
    本次服務最早源於要更換出現故障的100G 光纖設備,美國東海岸網絡中心與美國東海岸數據中心之間的連接被斷開。連接在 43 秒後恢復,但這次短暫的中斷引發了一系列事故,導致 24 小時 11 分鐘的服務降級。近些年,因為IT系統出現故障導致對外服務降級和終止,從而造成極大影響的案例屢見不鮮,AWS、Azure、阿里雲等爆出此類事故。