李茂超,敬 昕
(中國鐵路南寧局集團(tuán)有限公司 信息技術(shù)所,1.助理工程師,2.高級(jí)工程師,廣西 南寧 530029)
隨著鐵路信息化建設(shè)工作的日益深入,云計(jì)算管理平臺(tái)(下文簡稱云平臺(tái))規(guī)模迅速擴(kuò)大,截至2022年5月,中國鐵路南寧局集團(tuán)有限公司(簡稱南寧局)云平臺(tái)部署服務(wù)器已超過200臺(tái),同年計(jì)劃從基層單位至云平臺(tái)的系統(tǒng)94個(gè),預(yù)計(jì)年底虛擬機(jī)規(guī)模將超過500臺(tái),運(yùn)維人員的工作量不斷增大。因此,研究資源自動(dòng)擴(kuò)容技術(shù)對(duì)提升運(yùn)維效率、減輕人員運(yùn)維壓力有重要意義。
南寧局部署的管理信息私有云、互聯(lián)網(wǎng)網(wǎng)站群、一體化生產(chǎn)集成平臺(tái)均采用云平臺(tái)架構(gòu),為集團(tuán)公司各類生產(chǎn)、管理、互聯(lián)網(wǎng)業(yè)務(wù)系統(tǒng)提供了統(tǒng)一的計(jì)算、存儲(chǔ)及網(wǎng)絡(luò)資源。
南寧局采用的云平臺(tái)資源監(jiān)控平臺(tái)具有高度集成、分布式和開箱即用的特性,能夠?qū)Ψ?wù)器、網(wǎng)絡(luò)設(shè)備和存儲(chǔ)等硬件設(shè)備以及數(shù)據(jù)庫、中間件等軟件進(jìn)行監(jiān)控,同時(shí)還支持快捷添加自定義監(jiān)控腳本,靈活實(shí)現(xiàn)對(duì)自研程序的監(jiān)控。監(jiān)控平臺(tái)的引入實(shí)現(xiàn)了600多套信息系統(tǒng)重要節(jié)點(diǎn)的監(jiān)控,改變了南寧局信息運(yùn)維部門長期存在的人工巡檢的工作模式,有效提升了問題發(fā)現(xiàn)與解決效率。
但是,隨著信息系統(tǒng)規(guī)模和重要程度日益加大,虛擬化技術(shù)的廣泛使用,對(duì)人工處置故障的效率有了更高的要求。同時(shí)資源管理部門為節(jié)約資源往往采用最小規(guī)模分配,按需調(diào)整的資源管理模式,容易產(chǎn)生因業(yè)務(wù)突然增長、虛擬機(jī)資源調(diào)整不及時(shí)造成系統(tǒng)崩潰的重大風(fēng)險(xiǎn)。
依據(jù)智能運(yùn)管的理念,運(yùn)維自動(dòng)化不應(yīng)僅僅局限在資源監(jiān)控方面,更應(yīng)該在資源自動(dòng)擴(kuò)容方面發(fā)揮作用,真正實(shí)現(xiàn)“監(jiān)”、“控”全流程的自動(dòng)化。
研究設(shè)計(jì)的智能運(yùn)管技術(shù)方案主要包括四個(gè)部分,分別是云平臺(tái)、監(jiān)控平臺(tái)、資源管理程序和操作系統(tǒng)管理工具。
自動(dòng)擴(kuò)容技術(shù)架構(gòu)如圖1所示。
圖1 自動(dòng)擴(kuò)容技術(shù)架構(gòu)設(shè)計(jì)
云平臺(tái)主要由兩部分構(gòu)成,分別是計(jì)算節(jié)點(diǎn)和控制節(jié)點(diǎn),計(jì)算節(jié)點(diǎn)用于提供虛擬機(jī)所需的計(jì)算資源,控制節(jié)點(diǎn)提供網(wǎng)絡(luò)管理和資源管控;在每臺(tái)虛擬機(jī)上均需安裝監(jiān)控平臺(tái)客戶端,控制節(jié)點(diǎn)需要安裝操作系統(tǒng)管理客戶端。監(jiān)控平臺(tái)服務(wù)器通過監(jiān)控平臺(tái)客戶端采集虛擬服務(wù)器當(dāng)前CPU、內(nèi)存等資源使用情況信息,如果出現(xiàn)使用率過高情況,監(jiān)控平臺(tái)服務(wù)器會(huì)產(chǎn)生報(bào)警信息;自動(dòng)化資源管理程序由調(diào)度器(Scheduler)和執(zhí)行器(Executer)兩個(gè)子進(jìn)程組成,調(diào)度器用于周期性調(diào)用執(zhí)行器執(zhí)行相關(guān)服務(wù)功能,執(zhí)行器通過調(diào)用操作系統(tǒng)管理工具接口獲取出報(bào)警信息,篩選出所有與性能瓶頸相關(guān)的報(bào)警,調(diào)用操作系統(tǒng)管理工具接口對(duì)云平臺(tái)進(jìn)行操作;操作系統(tǒng)管理服務(wù)發(fā)送虛擬機(jī)模板調(diào)整命令到安裝工具控制節(jié)點(diǎn),工具將命令在控制節(jié)點(diǎn)執(zhí)行,實(shí)現(xiàn)對(duì)虛擬機(jī)的擴(kuò)容。
在云平臺(tái)標(biāo)準(zhǔn)架構(gòu)下,所有資源都使用通用身份驗(yàn)證機(jī)制的接口進(jìn)行管理和配置[1]。云平臺(tái)所有組件以一種松散的方式組織在一起,分成一個(gè)個(gè)服務(wù),允許用戶按需插拔和使用。云平臺(tái)標(biāo)準(zhǔn)架構(gòu)如圖2。
圖2 云平臺(tái)標(biāo)準(zhǔn)架構(gòu)視圖
操作系統(tǒng)管理工具可以簡單的實(shí)現(xiàn)快速橫向擴(kuò)展,并且高效地對(duì)服務(wù)器進(jìn)行管理[2]。操作系統(tǒng)管理工具工作在C∕S模式下,既可以通過被控服務(wù)器上普通SSH服務(wù)進(jìn)行管理,也可以通過操作系統(tǒng)管理工具專用客戶端代理軟件進(jìn)行通信[3]。架構(gòu)與組件說明如圖3。
圖3 操作系統(tǒng)管理工具架構(gòu)與組件
操作系統(tǒng)管理服務(wù)器是運(yùn)行管理服務(wù)的服務(wù)器。它向一個(gè)或多個(gè)運(yùn)行著并已經(jīng)向服務(wù)器注冊(cè)過的操作系統(tǒng)管理客戶端發(fā)送指令,指令發(fā)送到端口為4505的總線上,之后再從端口地址為4506的總線上獲取返回結(jié)果[4]。
操作系統(tǒng)管理客戶端配置完后會(huì)立即向服務(wù)器進(jìn)行注冊(cè),并通過4505端口訂閱所有目標(biāo)包含的消息。客戶端接收到消息后,在本地執(zhí)行,執(zhí)行后產(chǎn)生的結(jié)果發(fā)送到端口號(hào)4506的事件總線上[5]。
速度是操作系統(tǒng)管理工具的最強(qiáng)項(xiàng),速度的基礎(chǔ)就在于有這一套高性能的事件系統(tǒng)。操作系統(tǒng)管理消息總線使用的是ZeroMQ,它使創(chuàng)建異步拓?fù)湟蕴峁┳羁斓耐ㄐ懦蔀榭赡堋?/p>
為保證資源管理程序能通過監(jiān)控平臺(tái)接口中的報(bào)警信息唯一定位到云平臺(tái)中的虛擬機(jī)實(shí)例(如圖4),需要使監(jiān)控平臺(tái)在客戶端(如圖5)和服務(wù)器端(如圖6)配置的主機(jī)名,云平臺(tái)中實(shí)例名稱,以及操作系統(tǒng)管理客戶端中配置的客戶端ID(如圖7)均需相同。
圖4 云平臺(tái)實(shí)例配置
圖5 監(jiān)控平臺(tái)客戶端配置
圖6 監(jiān)控平臺(tái)服務(wù)器實(shí)例配置
圖7 操作系統(tǒng)管理客戶端id配置
為使資源管理程序能精準(zhǔn)實(shí)現(xiàn)對(duì)出現(xiàn)性能瓶頸的服務(wù)器進(jìn)行擴(kuò)容,需要通過監(jiān)控平臺(tái)提供報(bào)警信息。監(jiān)控平臺(tái)提供了完善的接口程序,用于實(shí)現(xiàn)報(bào)警信息的提取。
為判斷虛擬機(jī)是否需要擴(kuò)容,要將通過實(shí)例(host)名獲取實(shí)例id(hostid)信息,通過事件(event)獲取事件id(eventid),并以實(shí)例id和事件id共同篩選當(dāng)前發(fā)生的報(bào)警事件,以此為根據(jù)對(duì)實(shí)例進(jìn)行擴(kuò)容。
監(jiān)控平臺(tái)提供了三種方法用于提取實(shí)例id,事件id和 報(bào) 警 信 息,分 別 是:host.get、event.get和problem.get。host.get用于根據(jù)被監(jiān)控實(shí)例列表獲取被監(jiān)控實(shí)例hostid,event.get用于根據(jù)與性能瓶頸相關(guān)的事件名篩選出相關(guān)的eventid,problem.get將結(jié)合host.get和event.get方法返回的hostid和eventid,判斷是否存與被控實(shí)例相關(guān)的性能瓶頸報(bào)警。通過這三個(gè)接口就可以從所有報(bào)警信息中,并定位實(shí)例,以此為根據(jù),對(duì)云平臺(tái)實(shí)例進(jìn)行擴(kuò)容操作。
圖8為使用host.get方法獲取hostid的代碼實(shí)現(xiàn),其中HOST_LIST為被控虛擬機(jī)列表,使用POST方法,將監(jiān)控平臺(tái)接口的返回hostid信息存入返回指令集中。
圖8獲取hostid
圖9 為使用event.get方法獲取eventid的代碼實(shí)現(xiàn),其中EVENT_NAME為與資源是否出現(xiàn)瓶頸相關(guān)的事件名,使用POST方法,將監(jiān)控平臺(tái)接口返回的eventid信息存入返回指令集中。
圖9獲取eventid
圖10 為使用hostid和eventid共同篩選當(dāng)前存在的報(bào)警信息,判斷當(dāng)前哪些被控服務(wù)器需要擴(kuò)容,在此實(shí)現(xiàn)代碼中,如果執(zhí)行后返回報(bào)警信息,則表示hostid對(duì)應(yīng)的被控服務(wù)器已經(jīng)出現(xiàn)資源瓶頸,需要對(duì)其進(jìn)行擴(kuò)容操作。
圖10 報(bào)警信息采集實(shí)現(xiàn)
將上一步中所有存在資源瓶頸告警的被控服務(wù)器匯總成列表,并調(diào)用操作系統(tǒng)管理接口在云平臺(tái)控制節(jié)點(diǎn)上執(zhí)行遠(yuǎn)程操作,逐一對(duì)被控服務(wù)器進(jìn)行資源擴(kuò)容。
通過將監(jiān)控平臺(tái)、云平臺(tái)、操作系統(tǒng)管理工具技術(shù)相結(jié)合,研發(fā)了一套資源管理程序,設(shè)計(jì)出一套適用于南寧局云平臺(tái)的虛擬機(jī)實(shí)例自動(dòng)擴(kuò)容方案,實(shí)現(xiàn)自動(dòng)發(fā)現(xiàn)虛擬機(jī)實(shí)例的資源出現(xiàn)不足隱患,并對(duì)出現(xiàn)性能瓶頸隱患的虛擬機(jī)進(jìn)行自動(dòng)擴(kuò)容,保證運(yùn)行在虛擬機(jī)實(shí)例上的業(yè)務(wù)更加穩(wěn)定。結(jié)合鐵路業(yè)務(wù)特性,自動(dòng)擴(kuò)容技術(shù)還可以解決客運(yùn)高峰、財(cái)務(wù)統(tǒng)計(jì)等可預(yù)見性資源調(diào)整的需求。
在試運(yùn)行實(shí)驗(yàn)過程中,通過人工干預(yù)虛擬機(jī)運(yùn)算量檢驗(yàn)功能,實(shí)驗(yàn)結(jié)果顯示,從虛擬機(jī)資源占比超出閾值,到監(jiān)控平臺(tái)自動(dòng)發(fā)現(xiàn)預(yù)警,再到操作系統(tǒng)管理工具主動(dòng)干預(yù)完成虛擬機(jī)資源擴(kuò)容,整個(gè)流程約30秒。按傳統(tǒng)運(yùn)維經(jīng)驗(yàn),通過人工處置該故障,從資源問題發(fā)現(xiàn)到資源擴(kuò)容申請(qǐng)、審核,再到最后的資源擴(kuò)容需要數(shù)小時(shí)。所以,利用自動(dòng)擴(kuò)容技術(shù)能夠有效提升了運(yùn)維自動(dòng)化程度及運(yùn)維效率。