◆郭 宇 葛佳斌
?
高性能計算集群運維自動化研究
◆郭 宇 葛佳斌
(中國航發商用航空發動機有限責任公司設計研發中心研發體系與仿真技術部 上海 200241)
隨著高性能計算技術的發展,越來越多的行業都將高性能計算作為重要研發手段,依賴系統管理員手工進行運維的工作方式面臨越來越多的挑戰,逐漸表現出種種不足:運維效率低,容易出錯,不利于知識傳承,針對高性能計算集群運維工作特點,梳理總結出運維自動化工作三方面主要內容:系統監測自動化、數據分析自動化、問題處理自動化,研究了三步走的運維自動化實施途徑:操作流程化、流程標準化、標準自動化,通過運維自動化系統設計和巡檢腳本可視化配置為例介紹了運維自動化的技術實現要點。
高性能計算;集群管理;運維;自動化
隨著高性能計算技術的發展,越來越多的行業都將高性能計算作為重要研發手段[1]。高性能計算集群規模越來越大,系統運維面臨越來越多的難點,包括服務器節點類型復雜、運維問題類型眾多、問題發生不可預測等[2],以往依賴系統管理員手工進行運維的工作方式逐漸表現出不足:運維效率低,容易出錯,不利于知識傳承。
在大規模運維場景下,將重復度高的工作,基于監控數據智能決策觸發,實現無人參與的自動操作的運維能力,稱為運維自動化[3]。運維自動化技術在業界廣泛應用,如騰訊藍鯨織云系統[4]、大眾點評運維自動化系統[5]和東方物探[6],實現了知識沉淀,工作效率與可用性提高,業務彈性擴展。
目前運維自動化技術在互聯網企業和傳統服務器運維中應用較廣泛,為了應對高性能計算運維工作的種種挑戰,本文將探討如何在高性能計算運維中應用自動化技術。
在大規模運維場景下,將重復度高的工作,基于監控數據智能決策觸發,實現無人參與的自動操作的運維能力,稱為運維自動化[3]。高性能計算運維自動化除了具有上述特點以外,還具有其特定的業務應用場景和需求,包括與信息系統融合、系統配置動態調節、調度策略配置,計算應用問題處理等。總體來講,高性能計算運維自動化包括以下三方面內容:
系統監測自動化。系統監測是運維自動化的基礎,自動化抓取服務器硬件、操作系統、作業調度系統、計算應用的各種狀態信息,如CPU使用率、作業負載、存儲使用率等,全面掌握集群狀態,并將部分運行數據存儲于數據庫,為業務運維提供原始信息與數據。
數據分析自動化。監測數據一般為運行信息,無法直接用于業務運維,必須對其進行分析處理,形成業務運行數據,與運維事件特征庫比對,可實現運維問題自動識別。如自動監測得到各節點CPU使用率和作業狀態數據,將作業所在節點CPU使用量與申請資源比值作為作業負載健康度,一般情況下該值為1,上下波動5%,如偏差過大,說明作業運行出現問題。
問題處理自動化。經分析的業務數據出現異常時,說明業務存在運行問題,需運維人員處理,其中大部分是重復出現的簡單問題,占用了運維人員大量時間。將運維人員處理問題的方法總結形成標準化工作流程,或將復雜操作封裝為可視化操作,業務異常發生時,自動觸發問題處理流程,或由管理員一鍵式操作恢復,保證業務連續性。如饑餓策略閾值時間在系統負載低時可適當加長,當系統負載高時需縮短,運維人員不必24小時職守系統調整策略,當業務運行數據滿足觸發條件,系統自動實現策略調整。

圖1 高性能計算集群運維架構
運維自動化是一個循序漸進的過程,高性能計算集群建設伊始,首先需梳理運維業務流程,待業務流程成熟后再考慮通過自動化手段提高運維效率。一般來講,運維自動化的實現分為三步[7][8]:操作流程化、流程標準化、標準自動化。
2.1 操作流程化
操作流程化是運維自動化的基礎,運維操作都有不同操作流程,要整理出核心邏輯算法,定義輸入輸出,形成操作腳本,一般運維人員都能夠做到這一層,形成一系列運維腳本集,此時腳本集還分散存儲于各系統管理員處。
2.2 流程標準化
運維腳本集往往是自發形成的,不同運維人員編寫習慣不同造成腳本集的重用性和維護性較差,必須統一腳本編寫標準,形成運維腳本標準架構。首先要統一腳本開發語言,如涉及操作系統的操作使用shell,其他操作使用Python,其次要統一腳本編寫習慣,包括變量命名,依據數據邏輯分離等原則建立配置管理數據庫,最后要從頂層業務場景梳理腳本集,對腳本分類分層,復雜腳本分解封裝為原子操作,實現腳本功能的復用,最終形成運維體系標準架構。這一步是運維自動化的重中之重。
2.3 標準自動化
利用前一階段形成的運維體系標準架構,以服務的形式將各功能封裝,形成自硬件至應用的運維自動化架構。硬件系統層定期自動抓取信息,存入數據庫,數據分析層自動根據數據庫中存儲的運行數據分析形成業務數據,通過與運維事件特征庫比對識別出運維問題,并自動觸發業務處理層解決運維問題。在統一的運維架構下,做到自動化是水到渠成的事情。
運維自動化不能為了自動化而自動化,20%的重復性工作消耗了80%的精力,只要集中精力把20%重復性工作做好基本上就可以達到很好的狀態,能夠釋放精力去解決更重要的問題,而不是任何場景都要追求到完全極致自動化[3]。
為了做到自動化,必須做到以下兩點:數據與邏輯分離,邏輯與操作分離。根據這兩條原則,運維自動化系統一般按照三層架構設計,數據庫、后端控制腳本和前端操作頁面。
3.1 功能模塊設計
根據運維自動化業務模式,系統分為系統監測、統計分析、任務配置和文檔管理四個模塊,系統功能架構如圖2。系統監測模塊負責監測服務器硬件、操作系統和調度系統各項服務以及用戶作業的狀態,并將必要的信息存儲到數據庫中作為統計分析和任務執行的依據。統計分析模塊主要用于分析系統日志、統計系統與作業運行數據,為任務執行實時提供決策數據支持。任務配置模塊可實現眾多服務、任務的可視化配置和自動化問題處理,相應的配置信息和問題處理邏輯存儲在數據庫中。文檔管理模塊為管理員提供了問題追蹤、通知管理和技術筆記等功能,一站式解決管理員的文檔管理需求。

圖 2 系統功能架構
3.2 主要技術介紹
本系統主要使用MySQL、XML、PHP、Python、HTML5、CSS3、JavaScript等技術實現運維自動化,并集成Ganglia、Mantis等成熟工具。
MySQL是一個關系型數據管理系統。MySQL所使用的SQL語言是用于訪問數據庫的最常用的標準化語言。本系統中使用MySQL數據庫作為主數據庫存儲各類基礎信息和運行信息。
XML可擴展標記語言是一種簡單的數據存儲語言,使用簡單的標記描述數據,本系統用于存儲頁面配置信息。
PHP是一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特點,利于學習,使用廣泛,主要適用于web開發領域。本系統中PHP主要用于編寫部分后端邏輯和生成HTML代碼。
Python是一種面向對象、解釋型的編程語言,也是腳本語言的一種。Python具有豐富和強大的庫,能夠把其他語言很容易地連結在一起。本系統中Python主要用來編寫各類后端腳本程序邏輯。
HTML5是一個新的網絡標準,目標在于取代現有的HTML4.01、XHTML1.0和DOM Level 2 HTML標注。本系統中HTML5用于生成各種頁面。
CSS即層疊樣式表(Cascading StyleSheet)。在頁面制作時采用層疊樣式表技術,可以有效地對頁面布局、字體、顏色、背景和其他效果實現精準控制。CSS3是CSS技術的升級版本,CSS3語言開發是朝著模塊化發展的。
JavaScript是一種直譯式、動態類型、弱類型、基于原形的腳本語言,內置支持類型。它的解釋器被稱為JavaScript引擎,為瀏覽器的一部分,廣泛用于客戶端的腳本語言。JavaScript作為前端的唯一腳本語言,在頁面設計與開發過程中不可或缺,它擁有眾多優秀庫。本系統開發中主要使用了jquery和Highcharts兩個JavaScript庫。
Ganglia是一個跨平臺、可擴展的高性能計算集群分布式監控系統,可監控集群中各類節點的各種狀態信息,并將歷史數據以曲線方式呈現。本系統中將Ganglia集成于系統監測模塊,用于硬件和系統監測。
Mantis是一個輕量級的缺陷跟蹤系統,可跟蹤缺陷變更歷史,并支持缺陷統計功能。本系統中將Mantis集成于文檔模塊,用于追蹤各類問題解決。
3.3 技術實現
本文以實現巡檢腳本可視化配置功能為例介紹詳細技術實現。
系統運行于Apache服務器上,使用MySQL數據庫存儲監控、統計、配置和文檔信息等數據,后端整合為具備通用功能的模塊,模塊直接與數據庫交互,模塊間不存在數據交互關系,使用PHP和Python開發,并通過數據庫接口對數據進行讀取和更新,其中PHP負責與前端頁面數據通信,Python負責運維邏輯。前端頁面面向管理員操作設計,盡可能簡化操作提高效率,頁面配置相關的信息存儲在XML文件中,HTML代碼由PHP生成,頁面樣式(布局、控件的顏色和動態效果等)由CSS決定,JavaScript負責頁面動態功能的實現。

圖3 系統技術架構
高性能計算集群配有多臺管理登陸節點保證服務的連續性和可用性,這類節點上通常使用crontab在各臺管理登陸節點上分散配置多種自動運行的巡檢腳本進行系統檢查、配置調整等操作,這類操作會對所有集群節點遍歷執行,運行時間也長短不一,占用服務器負載也有所不同。由于缺少全局性的集中管理,任何對巡檢腳本的配置調整都是對管理員的記憶力和系統熟悉程度的挑戰,因此很有必要對這些巡檢腳本統一部署,達到協調執行時間與運行負載,一方面在服務器間根據巡檢腳本不同負載平衡分配,保證各服務器整體負載均衡,另一方面根據巡檢腳本運行特征合理分配巡檢腳本運行時段,保證對業務的影響最小。本系統中使用MySQL數據庫統一存儲整個集群各類巡檢腳本及相關配置信息,在頁面中集中顯示,便于管理員集中調整配置,并通過后端腳本程序將配置推送到相應服務器上執行。
MySQL數據庫中包括了存儲運維自動化系統用戶、作業、計算機節點、應用軟件等基礎信息的數據表和更新日志、巡檢腳本、巡檢腳本運行日志等運行數據信息的數據表,巡檢腳本數據表結構如表1所示。
表1 巡檢腳本數據表

自定義類mysqlCrontab控制巡檢腳本的屬性與操作,該類包括了巡檢腳本的各類屬性信息(對應于數據表中的數據)和巡檢腳本的操作(運行、數據庫查詢、日志記錄等),功能實現邏輯如圖4。

圖4 巡檢腳本可視化配置實現邏輯
在運維自動化系統服務器crontab中配置執行巡檢腳本的Python程序,代碼如下:
from commands import getstatusoutput as pyGet
def execute(self):
#執行mysql查詢語句,獲取mysqlCrontab表中isOn字段為#true的記錄
records = mysql(self.sql)
#開始遍歷記錄
for record in records.split(" "):
#獲取記錄各個字段的值,各字段含義見表。
node, minute, hour, day, month, week, script = record.split(" ")
#根據minute、hour、 day、 month、 week的值
#及self.minute、self.hour、self.day、self.month、self.week的
#值,判斷是否執行該條記錄的腳本
if self.isExecute(minute, hour, day, month, week):
#記錄log信息的sql語句
sqlLog= "INSERT INTO webpage.logCrontab(node, script, start, end, error)
VALUES('%s','%s',%d,%d,'%s')"
#腳本執行的錯誤信息
error = ""
#腳本執行的開始時間
start = int(time.time())
#執行腳本
status, errorInfo = pyGet("ssh " + node + " " + os.path.join(self.path, script))
#如果有錯誤信息則記錄錯誤信息
if status:
error = errorInfo.split(" ")[-1]
#腳本執行的結束時間
end = int(time.time())
#向數據庫插入log記錄
#log記錄可以在統計頁面上查看
mysql(sqlLog % (node, script, start, end, error))
#停止遍歷,程序執行完畢
return
mysqlCrontab表中記錄了巡檢腳本、執行時間和頻率,前端頁面可直接修改其內容。頁面中數據修改后即推送至數據庫,并通過運維自動化系統巡檢腳本執行程序運行,從而實現巡檢腳本配置可視化。

圖5 巡檢腳本可視化配置頁面
前端的頁面樣式由CSS負責,例如表格的淺灰色和深灰色交錯的展示效果可通過如下CSS代碼實現:
table tr:nth-child(odd) { background-color: #DDD }
table tr:nth-child(even) { background-color: #EEE }
表格各種動態功能通過JavaScript實現,動態功能包括:排序、篩選、在線編輯等。以在線編輯為例:通過定義Click事件,使鼠標點擊單元格后,單元格進入編輯狀態;編輯完畢后,在空白處點擊鼠標,觸發定義的Blur事件,單元格顯示為橘紅色,編輯后的數據通過AJAX技術以Post的方式傳到服務器端。
圖5為巡檢腳本可視化配置頁面,該頁面的HTML代碼由PHP讀取數據庫中mysqlCrontab表內容后動態生成。頁面內容被修改后,數據會傳至服務器端,并通過PHP數據庫接口,對mysqlCrontab表的對應字段進行修改。
運維自動化通過數據收集、處理分析等技術,提升了人工運維工作效率,運維自動化的關鍵在于業務數據分析的準確度、問題特征的明確化和處理流程的有效性,目前的自動化只是部分取代人工運維,今后將從自動化向智能化發展,通過對歷史運行數據分析實現業務數據智能提取、問題特征智能識別和處理流程智能歸納,實現真正意義上的運維自動化、智能化。
[1]袁國興,姚繼峰.2016年中國高性能計算機發展現狀分析[J].計算機工程與科學,2016.
[2]林皎,徐偉平,張武生,楊廣文.百萬億次集群系統的設備管理與系統運維實驗技術與管理[J],2013.
[3]梁定安.顯微鏡下的運維自動化[EB/OL].http://diyi tui.com/content-1472138007.52047416.html.
[4]徐勇州.騰訊織云自動化高效運維體系演進[EB/OL]. http://www.infoq.com/cn/presentations/tencent-operation-and maintenance-system-evolution.
[5]張冠宇.大眾點評運維架構圖文詳解[EB/OL]. https://www.douban.com/url/1153868.
[6]曹士炳,王建新,張穎.淺談高性能計算機運維的發展趨勢[J].物探裝備, 2012.
[7]馬超,馮世杰,王國仕.Linux系統自動化運維管理平臺實現及應用[J].通訊世界,2015.
[8]毛承國,張衛華,張進鐸,馬迅飛,史哲,方凱.大規模集群運維自動化的探索與實踐[J].信息安全與技術,2014.