, , , ,
(1.南瑞集團(tuán)有限公司(國(guó)網(wǎng)電力科學(xué)研究院有限公司),南京 211106; 2.國(guó)電南瑞科技股份有限公司,南京 211106)
隨著信息化技術(shù)的不斷發(fā)展,信息系統(tǒng)對(duì)電網(wǎng)企業(yè)運(yùn)營(yíng)的支撐作用愈加重要,機(jī)房建設(shè)規(guī)模也不斷隨之?dāng)U大,致使機(jī)房運(yùn)維工作較之以往更為艱難。在機(jī)房運(yùn)維管理當(dāng)中,操作系統(tǒng)、數(shù)據(jù)庫(kù)、中間件等基礎(chǔ)軟件的部署是信息化工作的基礎(chǔ)條件,而且這些工作往往是不斷重復(fù)、耗時(shí)費(fèi)力的,為了能夠?qū)⒏嗑﹃P(guān)注于應(yīng)用和業(yè)務(wù),不再關(guān)注不同廠商的服務(wù)器和軟件,需要解決標(biāo)準(zhǔn)化和自動(dòng)化問題,才能滿足日常部署的需求。因此有必要研究,制定自動(dòng)化運(yùn)維的部署策略及相關(guān)規(guī)范,實(shí)現(xiàn)系統(tǒng)應(yīng)用的自動(dòng)化部署和快速交付,提高系統(tǒng)整體部署的質(zhì)量。
國(guó)外,Google、Amazon、微軟等大型公司都建有成熟的自動(dòng)化運(yùn)維體系,如微軟公司開發(fā)了Autopilot工具提供自動(dòng)化軟件部署與系統(tǒng)監(jiān)控、故障自動(dòng)修復(fù)來(lái)管理數(shù)據(jù)中心大規(guī)模服務(wù)器,以減少人工干預(yù)[1-3]。在國(guó)內(nèi),互聯(lián)網(wǎng)公司是這方面的先行者,已經(jīng)做了大量研發(fā)工作,如阿里巴巴構(gòu)建了一套支持資產(chǎn)核對(duì)、自動(dòng)化裝機(jī)、環(huán)境配置、應(yīng)用發(fā)布、運(yùn)行監(jiān)控等功能的云效自動(dòng)化運(yùn)維平臺(tái),支撐了雙11期間百萬(wàn)量級(jí)主機(jī)管理能安全、穩(wěn)定、高效,可見自動(dòng)化運(yùn)維的重要作用[4]。還有開源部署配置軟件cobbler、ansible、Puppet和SaltStack等的廣泛使用[5-8],也減輕了運(yùn)維的壓力。目前,自動(dòng)化部署工具主要聚焦在應(yīng)用層面上很少涉及硬件配置層面,本文設(shè)計(jì)開發(fā)了一款自動(dòng)化部署工具,解決了硬件配置和軟件安裝配置自動(dòng)化的問題,以更好地滿足機(jī)房統(tǒng)一運(yùn)維部署的需求。
設(shè)計(jì)自動(dòng)化部署工具為運(yùn)維人員提供機(jī)房物理資源集中部署和展示平臺(tái),實(shí)現(xiàn)設(shè)備自動(dòng)發(fā)現(xiàn)、自動(dòng)部署、自動(dòng)配置,中間結(jié)果數(shù)據(jù)實(shí)時(shí)推送,可定制化統(tǒng)一部署模板,實(shí)現(xiàn)部署工作的標(biāo)準(zhǔn)化、合規(guī)化、統(tǒng)一化作業(yè),極大提高運(yùn)維工作效率,對(duì)機(jī)房設(shè)備實(shí)現(xiàn)集中式管理。
本文設(shè)計(jì)的自動(dòng)化部署工具采用的是B/S架構(gòu),通過在自主設(shè)計(jì)的可引導(dǎo)操作系統(tǒng)中內(nèi)置Agent來(lái)對(duì)服務(wù)器的各項(xiàng)基本信息進(jìn)行采集上報(bào)實(shí)現(xiàn)了服務(wù)器的自動(dòng)發(fā)現(xiàn),再根據(jù)任務(wù)編制時(shí)選擇的腳本來(lái)決定設(shè)備要安裝的操作系統(tǒng),并將安裝步驟的中間結(jié)果實(shí)時(shí)反饋,安裝完成操作系統(tǒng)之后再進(jìn)行其他基礎(chǔ)軟件的部署,接著進(jìn)行腳本的下發(fā)、執(zhí)行結(jié)果的回收完成整個(gè)部署過程。系統(tǒng)整體架構(gòu)圖如圖1所示。
圖1 系統(tǒng)整體架構(gòu)圖
主要分資源層、服務(wù)層、應(yīng)用層三層結(jié)構(gòu),資源層是指機(jī)房中各廠商服務(wù)器,也就是部署服務(wù)直接操作對(duì)象。服務(wù)層是應(yīng)用層與資源層之間溝通的橋梁,包含HTTP、DHCP、TFTP、任務(wù)調(diào)度、執(zhí)行引擎等服務(wù)。通過DHCP為資源層分配臨時(shí)IP地址,HTTP、TFTP為應(yīng)用層和資源層之間提供傳輸文件服務(wù),任務(wù)調(diào)度、執(zhí)行引擎為應(yīng)用層提供批量下發(fā)和執(zhí)行腳本服務(wù)。應(yīng)用層負(fù)責(zé)處理具體的業(yè)務(wù)邏輯和操作,集成了引導(dǎo)安裝管理、硬件服務(wù)管理、腳本管理和任務(wù)管理四大功能模塊。
系統(tǒng)總體設(shè)計(jì)采用MVC分層思想,前后端分離,模塊之間相互獨(dú)立通過API接口進(jìn)行調(diào)用,滿足系統(tǒng)的可擴(kuò)展性需求。
各個(gè)模塊主要功能如下。
(1)可引導(dǎo)操作系統(tǒng)管理。通過在內(nèi)存操作系統(tǒng)上內(nèi)置agent進(jìn)行信息采集上報(bào),接口查詢,調(diào)用接口完成硬件配置,引導(dǎo)操作系統(tǒng)的安裝。其中,內(nèi)存操作系統(tǒng)被資源層中服務(wù)器開機(jī)PXE啟動(dòng)自動(dòng)加載。
(2)硬件服務(wù)管理。提供支持的硬件設(shè)備信息,提供手動(dòng)添加新的硬件設(shè)備。服務(wù)器硬件配置由agent執(zhí)行,主要包括對(duì)RAID、OOB以及BIOS的設(shè)置。
(3)腳本管理。包括操作系統(tǒng)模板、數(shù)據(jù)庫(kù)、中間件等腳本的增刪改查功能以及對(duì)軟件部署的一系列腳本進(jìn)行排序,形成能夠部署軟件的腳本庫(kù)。
(4)任務(wù)管理。為自發(fā)現(xiàn)的設(shè)備選擇腳本管理中軟件形成一次部署任務(wù),任務(wù)要進(jìn)行審核,審核通過之后才能進(jìn)行執(zhí)行部署任務(wù),并提供安裝進(jìn)度監(jiān)控。
在系統(tǒng)的實(shí)現(xiàn)過程中使用以java語(yǔ)言為基礎(chǔ)的SpringMVC[9][10]框架,agent使用go[11]語(yǔ)言開發(fā),數(shù)據(jù)庫(kù)使用MySQL[12]。
引導(dǎo)安裝管理主要是收集服務(wù)器信息、配置RAID、引導(dǎo)安裝操作系統(tǒng)等,實(shí)現(xiàn)這些功能的基礎(chǔ)是可引導(dǎo)操作系統(tǒng)。可引導(dǎo)操作系統(tǒng)是一種基于內(nèi)存的操作系統(tǒng)。加載工作的基本原理。服務(wù)器上電→PXE網(wǎng)絡(luò)啟動(dòng)→加載kernel→加載initrd→解壓rootfs→切換根文件系統(tǒng)→運(yùn)行init進(jìn)程→啟動(dòng)服務(wù)→啟動(dòng)登錄shell。通過這個(gè)流程可引導(dǎo)最小操作系統(tǒng)鏡像全部加載到內(nèi)存中,啟動(dòng)了一個(gè)可用的操作系統(tǒng),而并不依賴磁盤設(shè)備。因此也就可以直接對(duì)服務(wù)器硬件進(jìn)行操作,包括升級(jí)BIOS、修改RAID、配置OOB,以及對(duì)磁盤分區(qū)和創(chuàng)建文件系統(tǒng)等。
而且在內(nèi)存操作系統(tǒng)中內(nèi)置了Agent,Agent是控制采集信息、接口查詢、硬件配置、安裝操作系統(tǒng)等過程的核心,通過與Server端以接口方式進(jìn)行交互完成部署任務(wù)。Agent工作流程如圖2所示。
圖2 Agent工作流程圖
(1)采集服務(wù)器信息
服務(wù)器信息采集是通過編寫的shell腳本在內(nèi)存操作系統(tǒng)上執(zhí)行來(lái)收集網(wǎng)卡、raid卡、廠商、內(nèi)存、磁盤等信息。以raid卡型號(hào)信息收集為例說(shuō)明。lspci | grep SAS | sed ':a;N;!ba;s/ /\n/g' 。
采集腳本由Agent調(diào)用,并將采集的信息通過接口發(fā)送給Server端,這樣也完成了設(shè)備的自動(dòng)發(fā)現(xiàn)。
(2)接口查詢
接口查詢是通過restful JSON api接口方式進(jìn)行。以狀態(tài)查詢?yōu)槔珹gent查詢當(dāng)前設(shè)備是否在安裝隊(duì)列里,通過http的POST方式發(fā)送json格式的數(shù)據(jù)到Server端。
Agent發(fā)送json格式數(shù)據(jù)詢問:
{ "Sn": "9XCE01" }
Server反饋結(jié)果json格式給Agent:
{
"Content":{ "Result":"true" },
"Message":"該設(shè)備在安裝隊(duì)列里",
"Status":"success"
}
服務(wù)器硬件配置主要包括對(duì)RAID、OOB以及BIOS的設(shè)置。如表1所示。
表1 廠商硬件配置工具
硬件的自動(dòng)化配置包括。
(1)RAID。支持RAID 0、RAID 1、RAID 5、RAID 10等Raid卡策略
(2)OOB。支持用戶、密碼、網(wǎng)絡(luò)等初始化
(3)BIOS。支持VT、HT、NUMA、C-State、Turbo等配置
由表1可知,每個(gè)廠商提供的硬件配置工具不同,也給硬件的自動(dòng)化配置提高了難度。為了能夠兼容更多的硬件設(shè)備配置,給每個(gè)設(shè)備廠商提供一套硬件配置腳本,支持RAID、OOB、BIOS的配置,并且封裝成rpm包。每個(gè)硬件配置有且只有一個(gè)入口腳本(如raid.sh、oob.sh、bios.sh),Agent會(huì)調(diào)用此腳本并接受傳遞的參數(shù)來(lái)進(jìn)行硬件配置,每個(gè)入口腳本可以調(diào)用其他子腳本。除此之外Agent采集到廠商信息后會(huì)加載相應(yīng)廠商腳本依賴的硬件配置工具包。
2.3 腳本管理
腳本管理是以軟件為管理單元,提供部署每款軟件所需一系列腳本的添加、刪除、下載、排序等操作,形成軟件腳本庫(kù)。以維護(hù)mysql部署腳本為例來(lái)說(shuō)明,管理員首先創(chuàng)建一條mysql軟件記錄,再將mysql所需腳本上傳至服務(wù)器,以mysql記錄的唯一標(biāo)識(shí)作為文件夾,存儲(chǔ)在服務(wù)器對(duì)應(yīng)的路徑下。上傳腳本實(shí)現(xiàn)流程如圖3所示。
圖3 上傳腳本流程圖
系統(tǒng)前端使用layui的upload上傳腳本,控制器響應(yīng)請(qǐng)求將腳本存入對(duì)應(yīng)路徑下的根據(jù)所屬軟件唯一標(biāo)識(shí)創(chuàng)建的文件夾,若在當(dāng)前文件夾下文件存在,則覆蓋當(dāng)前文件,始終保存最新的文件。當(dāng)寫入成功時(shí),控制器返回Success,頁(yè)面彈出提示框,顯示上傳成功,用戶可以通過預(yù)覽查看已經(jīng)上傳的腳本內(nèi)容。
任務(wù)管理主要包括任務(wù)編輯、任務(wù)執(zhí)行和任務(wù)狀態(tài)監(jiān)控等。任務(wù)編輯將服務(wù)器對(duì)象與需要部署的軟件關(guān)聯(lián)形成實(shí)例化任務(wù)。任務(wù)執(zhí)行實(shí)質(zhì)是批量腳本下發(fā)和執(zhí)行,首先連接目標(biāo)服務(wù)器,連接成功后將腳本管理中存放軟件部署腳本的整個(gè)文件夾拷貝至目標(biāo)服務(wù)器,賦予每個(gè)腳本執(zhí)行權(quán)限并依次執(zhí)行,實(shí)現(xiàn)腳本批量下發(fā)和執(zhí)行的流程如圖4所示。
圖4 腳本批量下發(fā)和執(zhí)行流程圖
其中,部署任務(wù)所需的安裝包也是通過腳本以http的方式自動(dòng)下載的。任務(wù)狀態(tài)監(jiān)控是提供在任務(wù)執(zhí)行過程中跟蹤部署狀態(tài),展示給用戶安裝進(jìn)度和日志信息。這些信息的收集是通過接口反饋給Server端。
目前系統(tǒng)已建成并投入到機(jī)房運(yùn)維管理中,是實(shí)現(xiàn)機(jī)房標(biāo)準(zhǔn)化、自動(dòng)化管理的重要工具。應(yīng)用結(jié)果表明,系統(tǒng)運(yùn)行穩(wěn)定,功能齊全,能夠滿足機(jī)房日常部署工作需求。系統(tǒng)的推廣應(yīng)用,減輕了運(yùn)維人員的工作壓力,提高了運(yùn)維管理的效率,提升了軟件部署的交付質(zhì)量。軟件效果如圖5所示。
圖5 軟件效果圖
通過介紹一種一鍵部署操作系統(tǒng)、數(shù)據(jù)庫(kù)、中間件等軟件的實(shí)現(xiàn)方案,對(duì)工具的總體設(shè)計(jì)及功能模塊的設(shè)計(jì)進(jìn)行論述,并給出了可行的設(shè)計(jì)方案。從服務(wù)器上架到交付使用的過程自動(dòng)化,實(shí)現(xiàn)了硬件配置到軟件安裝后的交付使用。隨著虛擬化技術(shù)的大規(guī)模使用,后期還會(huì)繼續(xù)擴(kuò)展對(duì)虛擬資源的支持。系統(tǒng)各功能模塊相互獨(dú)立,有良好的擴(kuò)展性,可以擴(kuò)展腳本,將腳本進(jìn)行維護(hù)編排形成任務(wù),支持更多種類軟件的部署。