, , , ,
(1.南瑞集團有限公司(國網(wǎng)電力科學研究院有限公司),南京 211106; 2.國電南瑞科技股份有限公司,南京 211106)
隨著信息化技術的不斷發(fā)展,信息系統(tǒng)對電網(wǎng)企業(yè)運營的支撐作用愈加重要,機房建設規(guī)模也不斷隨之擴大,致使機房運維工作較之以往更為艱難。在機房運維管理當中,操作系統(tǒng)、數(shù)據(jù)庫、中間件等基礎軟件的部署是信息化工作的基礎條件,而且這些工作往往是不斷重復、耗時費力的,為了能夠將更多精力關注于應用和業(yè)務,不再關注不同廠商的服務器和軟件,需要解決標準化和自動化問題,才能滿足日常部署的需求。因此有必要研究,制定自動化運維的部署策略及相關規(guī)范,實現(xiàn)系統(tǒng)應用的自動化部署和快速交付,提高系統(tǒng)整體部署的質量。
國外,Google、Amazon、微軟等大型公司都建有成熟的自動化運維體系,如微軟公司開發(fā)了Autopilot工具提供自動化軟件部署與系統(tǒng)監(jiān)控、故障自動修復來管理數(shù)據(jù)中心大規(guī)模服務器,以減少人工干預[1-3]。在國內(nèi),互聯(lián)網(wǎng)公司是這方面的先行者,已經(jīng)做了大量研發(fā)工作,如阿里巴巴構建了一套支持資產(chǎn)核對、自動化裝機、環(huán)境配置、應用發(fā)布、運行監(jiān)控等功能的云效自動化運維平臺,支撐了雙11期間百萬量級主機管理能安全、穩(wěn)定、高效,可見自動化運維的重要作用[4]。還有開源部署配置軟件cobbler、ansible、Puppet和SaltStack等的廣泛使用[5-8],也減輕了運維的壓力。目前,自動化部署工具主要聚焦在應用層面上很少涉及硬件配置層面,本文設計開發(fā)了一款自動化部署工具,解決了硬件配置和軟件安裝配置自動化的問題,以更好地滿足機房統(tǒng)一運維部署的需求。
設計自動化部署工具為運維人員提供機房物理資源集中部署和展示平臺,實現(xiàn)設備自動發(fā)現(xiàn)、自動部署、自動配置,中間結果數(shù)據(jù)實時推送,可定制化統(tǒng)一部署模板,實現(xiàn)部署工作的標準化、合規(guī)化、統(tǒng)一化作業(yè),極大提高運維工作效率,對機房設備實現(xiàn)集中式管理。
本文設計的自動化部署工具采用的是B/S架構,通過在自主設計的可引導操作系統(tǒng)中內(nèi)置Agent來對服務器的各項基本信息進行采集上報實現(xiàn)了服務器的自動發(fā)現(xiàn),再根據(jù)任務編制時選擇的腳本來決定設備要安裝的操作系統(tǒng),并將安裝步驟的中間結果實時反饋,安裝完成操作系統(tǒng)之后再進行其他基礎軟件的部署,接著進行腳本的下發(fā)、執(zhí)行結果的回收完成整個部署過程。系統(tǒng)整體架構圖如圖1所示。

圖1 系統(tǒng)整體架構圖
主要分資源層、服務層、應用層三層結構,資源層是指機房中各廠商服務器,也就是部署服務直接操作對象。服務層是應用層與資源層之間溝通的橋梁,包含HTTP、DHCP、TFTP、任務調度、執(zhí)行引擎等服務。通過DHCP為資源層分配臨時IP地址,HTTP、TFTP為應用層和資源層之間提供傳輸文件服務,任務調度、執(zhí)行引擎為應用層提供批量下發(fā)和執(zhí)行腳本服務。應用層負責處理具體的業(yè)務邏輯和操作,集成了引導安裝管理、硬件服務管理、腳本管理和任務管理四大功能模塊。
系統(tǒng)總體設計采用MVC分層思想,前后端分離,模塊之間相互獨立通過API接口進行調用,滿足系統(tǒng)的可擴展性需求。
各個模塊主要功能如下。
(1)可引導操作系統(tǒng)管理。通過在內(nèi)存操作系統(tǒng)上內(nèi)置agent進行信息采集上報,接口查詢,調用接口完成硬件配置,引導操作系統(tǒng)的安裝。其中,內(nèi)存操作系統(tǒng)被資源層中服務器開機PXE啟動自動加載。
(2)硬件服務管理。提供支持的硬件設備信息,提供手動添加新的硬件設備。服務器硬件配置由agent執(zhí)行,主要包括對RAID、OOB以及BIOS的設置。
(3)腳本管理。包括操作系統(tǒng)模板、數(shù)據(jù)庫、中間件等腳本的增刪改查功能以及對軟件部署的一系列腳本進行排序,形成能夠部署軟件的腳本庫。
(4)任務管理。為自發(fā)現(xiàn)的設備選擇腳本管理中軟件形成一次部署任務,任務要進行審核,審核通過之后才能進行執(zhí)行部署任務,并提供安裝進度監(jiān)控。
在系統(tǒng)的實現(xiàn)過程中使用以java語言為基礎的SpringMVC[9][10]框架,agent使用go[11]語言開發(fā),數(shù)據(jù)庫使用MySQL[12]。
引導安裝管理主要是收集服務器信息、配置RAID、引導安裝操作系統(tǒng)等,實現(xiàn)這些功能的基礎是可引導操作系統(tǒng)。可引導操作系統(tǒng)是一種基于內(nèi)存的操作系統(tǒng)。加載工作的基本原理。服務器上電→PXE網(wǎng)絡啟動→加載kernel→加載initrd→解壓rootfs→切換根文件系統(tǒng)→運行init進程→啟動服務→啟動登錄shell。通過這個流程可引導最小操作系統(tǒng)鏡像全部加載到內(nèi)存中,啟動了一個可用的操作系統(tǒng),而并不依賴磁盤設備。因此也就可以直接對服務器硬件進行操作,包括升級BIOS、修改RAID、配置OOB,以及對磁盤分區(qū)和創(chuàng)建文件系統(tǒng)等。
而且在內(nèi)存操作系統(tǒng)中內(nèi)置了Agent,Agent是控制采集信息、接口查詢、硬件配置、安裝操作系統(tǒng)等過程的核心,通過與Server端以接口方式進行交互完成部署任務。Agent工作流程如圖2所示。

圖2 Agent工作流程圖
(1)采集服務器信息
服務器信息采集是通過編寫的shell腳本在內(nèi)存操作系統(tǒng)上執(zhí)行來收集網(wǎng)卡、raid卡、廠商、內(nèi)存、磁盤等信息。以raid卡型號信息收集為例說明。lspci | grep SAS | sed ':a;N;!ba;s/ /\n/g' 。
采集腳本由Agent調用,并將采集的信息通過接口發(fā)送給Server端,這樣也完成了設備的自動發(fā)現(xiàn)。
(2)接口查詢
接口查詢是通過restful JSON api接口方式進行。以狀態(tài)查詢?yōu)槔珹gent查詢當前設備是否在安裝隊列里,通過http的POST方式發(fā)送json格式的數(shù)據(jù)到Server端。
Agent發(fā)送json格式數(shù)據(jù)詢問:
{ "Sn": "9XCE01" }
Server反饋結果json格式給Agent:
{
"Content":{ "Result":"true" },
"Message":"該設備在安裝隊列里",
"Status":"success"
}
服務器硬件配置主要包括對RAID、OOB以及BIOS的設置。如表1所示。

表1 廠商硬件配置工具
硬件的自動化配置包括。
(1)RAID。支持RAID 0、RAID 1、RAID 5、RAID 10等Raid卡策略
(2)OOB。支持用戶、密碼、網(wǎng)絡等初始化
(3)BIOS。支持VT、HT、NUMA、C-State、Turbo等配置
由表1可知,每個廠商提供的硬件配置工具不同,也給硬件的自動化配置提高了難度。為了能夠兼容更多的硬件設備配置,給每個設備廠商提供一套硬件配置腳本,支持RAID、OOB、BIOS的配置,并且封裝成rpm包。每個硬件配置有且只有一個入口腳本(如raid.sh、oob.sh、bios.sh),Agent會調用此腳本并接受傳遞的參數(shù)來進行硬件配置,每個入口腳本可以調用其他子腳本。除此之外Agent采集到廠商信息后會加載相應廠商腳本依賴的硬件配置工具包。
2.3 腳本管理
腳本管理是以軟件為管理單元,提供部署每款軟件所需一系列腳本的添加、刪除、下載、排序等操作,形成軟件腳本庫。以維護mysql部署腳本為例來說明,管理員首先創(chuàng)建一條mysql軟件記錄,再將mysql所需腳本上傳至服務器,以mysql記錄的唯一標識作為文件夾,存儲在服務器對應的路徑下。上傳腳本實現(xiàn)流程如圖3所示。

圖3 上傳腳本流程圖
系統(tǒng)前端使用layui的upload上傳腳本,控制器響應請求將腳本存入對應路徑下的根據(jù)所屬軟件唯一標識創(chuàng)建的文件夾,若在當前文件夾下文件存在,則覆蓋當前文件,始終保存最新的文件。當寫入成功時,控制器返回Success,頁面彈出提示框,顯示上傳成功,用戶可以通過預覽查看已經(jīng)上傳的腳本內(nèi)容。
任務管理主要包括任務編輯、任務執(zhí)行和任務狀態(tài)監(jiān)控等。任務編輯將服務器對象與需要部署的軟件關聯(lián)形成實例化任務。任務執(zhí)行實質是批量腳本下發(fā)和執(zhí)行,首先連接目標服務器,連接成功后將腳本管理中存放軟件部署腳本的整個文件夾拷貝至目標服務器,賦予每個腳本執(zhí)行權限并依次執(zhí)行,實現(xiàn)腳本批量下發(fā)和執(zhí)行的流程如圖4所示。

圖4 腳本批量下發(fā)和執(zhí)行流程圖
其中,部署任務所需的安裝包也是通過腳本以http的方式自動下載的。任務狀態(tài)監(jiān)控是提供在任務執(zhí)行過程中跟蹤部署狀態(tài),展示給用戶安裝進度和日志信息。這些信息的收集是通過接口反饋給Server端。
目前系統(tǒng)已建成并投入到機房運維管理中,是實現(xiàn)機房標準化、自動化管理的重要工具。應用結果表明,系統(tǒng)運行穩(wěn)定,功能齊全,能夠滿足機房日常部署工作需求。系統(tǒng)的推廣應用,減輕了運維人員的工作壓力,提高了運維管理的效率,提升了軟件部署的交付質量。軟件效果如圖5所示。

圖5 軟件效果圖
通過介紹一種一鍵部署操作系統(tǒng)、數(shù)據(jù)庫、中間件等軟件的實現(xiàn)方案,對工具的總體設計及功能模塊的設計進行論述,并給出了可行的設計方案。從服務器上架到交付使用的過程自動化,實現(xiàn)了硬件配置到軟件安裝后的交付使用。隨著虛擬化技術的大規(guī)模使用,后期還會繼續(xù)擴展對虛擬資源的支持。系統(tǒng)各功能模塊相互獨立,有良好的擴展性,可以擴展腳本,將腳本進行維護編排形成任務,支持更多種類軟件的部署。