陳旭輝,劉 洋,張 鴻,高 鵬,許竹霞
(甘肅省氣象信息與技術裝備保障中心,甘肅 蘭州 730020)
集群技術[1-3]是大型互聯網業務、人工智能、大數 據等領域廣泛使用的技術,可以提高應用系統的可靠性等性能。大型數據中心運行的一個業務系統一般由多個集群組成,每個集群都有自己的管理系統,互不兼容,運維人員在維護中不得不在多個集群、主機之間來回切換,這種方式效率低、容易出錯。ansible、puppet、saltstack[4-6]等運維工具可以對集群多臺主機實施批量操作,但管理功能簡單、缺乏監控功能。在HPC 領域[7-9],使用的Torque、slurm、LSF、LICO等管理軟件主要用于并行計算集群,不適合一般的集群。Veritas InfoScale Availability 是一個通用的集群應用管理軟件[10],但是該軟件存在以下問題:①應用監控不能真實反映主機在集群中的狀態;②無法管理單點啟動、資源池等特殊的集群;③不支持分層管理;④采用代理模式,使用不便。AIOps(Artificial Intelligence for IT Operations)將人工智能與運維結合,通過機器學習方法提升運維效率[11-12],但技術門檻高,只在大型互聯網企業應用。針對上述問題,文中提出一種通用的無代理集群應用管理模型,該模型可以集中管理集群環境下的各種應用。
根據大型集群環境應用管理的需求,提出無代理分級管理模型,模型在功能方面具備監控和控制雙重功能,在通用性方面支持管理所有的集群應用。
應用管理采用無代理模式,被管理計算機不用安裝管理軟件,所有管理命令由管理節點通過SSH在被管理節點上遠程執行。
模型將集群分為應用集群、管理集群、超級管理集群3 種。應用集群指應用系統建立的集群,用于運行特定的集群應用;應用管理集群由多個應用集群組成;超級管理集群由管理集群中的管理節點組成。3 種集群的關系圖如圖1 所示。

圖1 3種集群關系圖
模型采用兩級管理模式,超級應用管理系統是最高級的管理系統,負責管理超級管理集群中的應用管理系統。應用管理系統運行在應用管理集群上,負責管理轄區內所有的集群應用。
管理模型定義了系統監控、應用監控、應用控制、遠程運維4 個管理功能。
1)系統監控:對主機CPU、內存、磁盤空間、磁盤IONODE 空間等使用情況監控,可以設置監控告警閾值,共享存儲可以指定由一臺主機監控。
2)應用監控:對主機、應用、應用組運行是否正常進行實時監測。
3)應用控制:集群環境下的應用控制操作主要包含啟動、停止、強制停止、重啟、主備切換、守護、監控、負載均衡等。
4)遠程運維:具有遠程查看進程、遠程執行命令、應用備份、應用克隆等功能。
管理對象為應用、應用組、應用系統3 種。應用是應用集群中實現某一功能的一個或一組程序;多個應用按順序組成應用組;多個應用組按順序組成應用系統。
通用性要求模型支持各種集群應用的狀態監控和維護。在監控方面,模型支持主備應用集群、并行應用集群、資源池應用集群、互斥集群4 種集群。在啟動、停止等維護方面,支持多節點并行啟動、均衡方式啟動、單節點啟動、互斥啟動4 種集群啟動方式。應用集群的分類標準如下:
主備應用集群指一個應用只能在集群中一臺主機上運行,其他主機作為冷備。并行應用集群指應用在集群中所有主機上運行。資源池應用集群指應用在集群中任意幾個主機上運行,且運行應用的主機數量小于集群節點數量。當兩個集群以互斥方式運行時為互斥集群。
多節點并行啟動指應用在集群中所有主機上同時啟動。均衡方式啟動指應用在集群中部分主機上同時啟動,啟動主機按CPU 負載自動選取。單節點啟動指應用在集群中的一個主機上啟動。互斥啟動指一個集群啟動前,必須停止另一個集群。
輸入是用戶在執行管理命令時使用的參數,模型的輸入參數有3個,第一個為命令,第二個為管理對象,第三為主機,格式為:<action><any|應用系統|應用組|應用><any|-H host>,其中第二個和第三個參數可以為多個,可以用any 表示全部應用或全部主機。
應用監控輸出按應用分組顯示,對異常的組或主機以紅色顯示。輸出格式有短格式、長格式、監控格式3 種。短格式顯示應用狀態和每個主機的狀態;長格式在每一行信息前增加“系統.應用組.應用”;監控格式只顯示異常的信息。輸出格式根據第一個參數自動判斷。
利用提出的管理模型,采用bash 腳本語言設計了一套應用管理軟件,設計原則及架構如下。
1)無依賴:采用bash shell 腳本語言開發,不依賴任何第三方模塊或中間件,可以直接在Linux 機器上運行。
2)無代理:采用無代理模式,軟件只需部署在一臺管理機器上,被管理機器上不需安裝任何軟件。
3)低開銷:監控行為要盡量減少對被監控機器的干擾,降低給被管理機器帶來的額外開銷。
軟件采用分級管理模式,由超級應用管理軟件和應用管理軟件兩部分組成。超級應用管理軟件管理多個應用管理軟件。應用管理軟件由應用控制、應用監控、系統監控、維護工具、日志收集、結果展示等模塊組成。系統架構如圖2 所示。

圖2 應用管理軟件架構
2.3.1 應用狀態評估技術
該軟件對主機及應用狀態評估采用運行模式、進程、進程數量3 個維度結合的評估方法,相比于文獻[13-15]中使用的方法,能夠更加全面、準確地反映每臺主機、每個應用在整個集群中的狀態。
2.3.1.1 監控項
監控項是用來監控應用狀態的參數,由進程關鍵字和進程數量兩項組成。進程關鍵字用能夠唯一識別一個進程的字符串表示,可以使用復合關鍵字。進程數量是正常狀態時該進程的數量,用一個整數或范圍表示。一個應用可以配置多個進程監控項。
2.3.1.2 主機狀態評估
主機狀態采用兩次評估法,首先根據監控項獲取每個主機上進程的啟動情況,然后依據該應用中所有進程的狀態,將每臺主機狀態預評估為正常、部分異常、未啟動、SSH 異常4 種。其次在預評估基礎上,結合應用運行模式將主機狀態修正為正常、部分異常、未啟動異常、SSH異常、違反運行模式、空閑6種狀態。
2.3.1.3 應用狀態評估
利用主機狀態,根據應用運行模式對應用狀態進行評估,評估規則如下。
主備模式:只有一臺主機狀態正常,其他未啟動,則應用為正常;主機狀態全部為異常,則應用為異常;兩臺以上主機正常或存在部分異常的主機,則應用為部分異常。
并行模式:所有主機狀態正常,則該應用狀態為正常;若所有主機狀態異常,則應用狀態為異常;至少有一臺主機異常,則應用狀態為部分異常。
資源池模式:集群內正常的主機數量在設定的范圍內,且無異常或部分異常主機,則應用狀態為正常;主機全部異常,則應用狀態為異常;若正常的主機數量超過設定范圍或存在異常的主機,則應用狀態為部分異常。
互斥模式:互斥應用需要根據兩個應用的狀態進行再次評估,如果一個應用正常,另一個異常,則將異常的應用狀態修正為正常,如果兩個應用都正常,則將它們都修正為異常,其他情況不用修正。
2.3.2 并行化
在軟件執行的不同階段,采用了應用系統間并行、應用組間并行、應用組內并行、應用內多主機并行、主機內監控命令并行5 種并行技術,將可以同時執行的命令全部并行化。在編程中,使用了bash 的進程并行、函數并行、代碼塊并行3 種并行技術。
2.3.3 緩存加速技術
該軟件采用了應用配置緩存、SSH 命令輸出緩存兩種緩存技術。1)應用配置緩存:在首次執行應用管理命令時,將解析后的應用配置文件緩存到內存,后期直接從內存讀入配置。2)SSH 命令輸出緩存:對一臺主機首次執行SSH 命令時,執行合并后的監控命令,獲取該主機上所有應用的狀態并緩存,其他并行執行的進程需要該主機上應用的狀態時,直接從緩存中讀取,不需執行SSH。
2.3.4 多叉樹剪枝分層算法
在對應用組進行啟動、重啟操作時,必須依照應用組之間的依賴關系按順序執行,軟件有先啟動依賴、后重啟依賴兩種依賴關系。依賴關系一般由依賴圖或依賴樹描述[16],文中使用可以體現層次關系的依賴樹來表示多個應用組之間的依賴關系,并采用多叉樹剪枝分層算法對依賴樹進行剪枝,生成一顆無重復的多叉樹。該算法首先使用前序遍歷法搜索每個節點,并裁剪、移動重復的節點,最終生成帶有分層信息的無重復多叉樹。
重復節點裁剪規則:不同層重復的節點將低層的子樹剪枝后接到高層,同層重復的節點保留右節點刪除左側節點,其下子節點合并到右側節點的子節點中。
圖3(a)是根據應用組A 的依賴關系生成的初始啟動樹,共5 層,其中應用組E、F 組有重復,經過裁剪后生成圖3(b)所示的無重復6 層多叉樹。

圖3 初始啟動樹和裁剪后啟動樹
2.3.5 資源池負載均衡調度算法
資源池負載均衡調度負責將一個應用按照主機CPU 負載合理地加載或遷移到適合的主機上。調度策略如下:初次啟動時,應用自動加載到CPU 負載最輕的主機上。后期負載均衡調度時,應用遷移到可用主機中CPU 負載最輕的主機上,且每次調度只能遷移運行該應用的主機中一半的主機。
Veritas InfoScale 是功能比較全面的集群應用管理軟件,為應用提供了高可用方案,可以實現對集群中應用的啟動、停止、監控、故障恢復等操作。文中的應用管理軟件可以實現InfoScale 的應用管理功能,同時還增加了一些其不具備的功能,可以管理任意集群應用,二者功能比較如表1 所示,表中的“是”表示支持或有,“否”表示不支持或沒有。

表1 應用管理系統與Veritas InfoScale的功能比較
甘肅省氣象局大數據云平臺有Linux主機147臺,按照功能劃分為12 個相對獨立的應用系統,共有105 個應用組、367 個應用,一個應用表示一個應用集群。每個應用系統建立一個管理集群,在每個管理集群中選2 臺主機作為管理節點,部署應用管理軟件,然后將24 臺管理節點組成超級管理集群,選擇其中任意一臺作為超級管理節點,部署應用超級管理軟件。系統劃分如表2 所示。

表2 甘肅氣象大數據云平臺應用系統
1)通用性方面,軟件支持大數據平臺中所有的應用集群,管理的應用集群達到360 多個[17-18]。如spark 集群的應用組包含兩個應用,master 應用以主備模式運行,可以運行在集群中任意一臺主機上,有浮動IP。slave 是資源池模式應用,運行在除master節點之外的任意2 臺主機上。
2)監控方面,軟件可以真實反映集群應用的運行情況,可以快速定位故障節點及故障原因,并可以通過微信向管理人員發送告警信息。圖4 是spark 應用組正常運行時監控命令輸出結果,其中第3 列表示正在運行的進程數量,第4 列表示配置的進程數量,雖然部分主機上進程沒有啟動,但符合集群運行模式要求,主機及應用狀態均為正常。

圖4 spark應用組正常時監控輸出
3)監控性能方面,采用并行技術可以明顯提高監控的效率。圖5 是不同并行方案所需的時間。在未使用并行技術時,對147 臺主機的應用狀態監控需執行600 多次SSH,用時2 min 以上;在使用5 種并行及緩存技術后,只需執行147次SSH,用時不到5 s。而且增加主機數量對監控性能影響不大,5 種并行技術中,應用內多主機并行效果最明顯,其次為應用組內并行。

圖5 不同并行方案比較
文中提出的Linux 集群應用無代理分級管理模型支持各種類型的集群,具有監控和管理功能,管理效率高,可以用于設計大型復雜業務的統一監控管理平臺。
利用bash 設計的Linux 集群應用管理軟件實現了甘肅省氣象大數據平臺所有應用的集中統一管理,降低了應用管理的難度,減少了運維工作中的失誤,提高了運維的效率,提升了應用系統的可用性。