一個(gè)通用應(yīng)用運(yùn)維管控平臺(tái)的設(shè)計(jì)實(shí)現(xiàn)
一、問(wèn)題背景:
大部分的應(yīng)用運(yùn)維工作隨著服務(wù)器數(shù)量和產(chǎn)品數(shù)量的增長(zhǎng)而增加,而運(yùn)維人數(shù)的不足導(dǎo)致單個(gè)運(yùn)維人員所承擔(dān)的工作任務(wù)較為繁重,同時(shí)運(yùn)維工作的不標(biāo)準(zhǔn)、無(wú)自動(dòng)化使得應(yīng)用運(yùn)維任務(wù)十分復(fù)雜,耗費(fèi)的大量的人員成本、時(shí)間成本和溝通成本。
應(yīng)用運(yùn)維工作說(shuō)白了大體可以分為兩種情況:1. 在某個(gè)或某些服務(wù)器上執(zhí)行某個(gè)腳本或命令;2.將某個(gè)或某些文件傳輸?shù)侥硞€(gè)或某些特定的服務(wù)器的特定位置上。在服務(wù)器數(shù)量較少的情況下,可以通過(guò)ssh或scp命令實(shí)現(xiàn)上面兩個(gè)操作;服務(wù)器數(shù)量較多的情況下,我們可以通過(guò)包裝ssh或者使用批量ssh工具,如pssh,ansible等來(lái)解決問(wèn)題,但這種方式大多數(shù)都是一次性的方式,無(wú)論使用方法以及后續(xù)跟蹤來(lái)看都并不友好。
還有,由于一系列歷史原因,現(xiàn)網(wǎng)的服務(wù)環(huán)境也較為繁雜,現(xiàn)網(wǎng)的服務(wù)器上的代碼、配置、軟件包、腳本等文件沒(méi)有進(jìn)行統(tǒng)一的版本管理與配置管理,比如某個(gè)產(chǎn)品的代碼版本多種多樣;現(xiàn)網(wǎng)的代碼和文件幾乎都是通過(guò)一臺(tái)復(fù)制到另一臺(tái)的方式來(lái)實(shí)現(xiàn);由于代碼版本、配置版本等問(wèn)題導(dǎo)致的現(xiàn)網(wǎng)質(zhì)量事件也并不在少數(shù)。
另外,應(yīng)用運(yùn)維也需要一個(gè)統(tǒng)一的資源管理系統(tǒng),對(duì)現(xiàn)網(wǎng)的服務(wù)的數(shù)據(jù)進(jìn)行業(yè)務(wù)維度的資源管理,系統(tǒng)運(yùn)維的CMDB系統(tǒng)只在靜態(tài)資源維度進(jìn)行了管控,動(dòng)態(tài)的業(yè)務(wù)數(shù)據(jù)等資源需要應(yīng)用運(yùn)維團(tuán)隊(duì)自行來(lái)管理。
因此,針對(duì)上面所述的各種問(wèn)題,需要一個(gè)運(yùn)維管控系統(tǒng),來(lái)解決包括:資源管理、配置管理、任務(wù)管理、文件發(fā)布等一些列常用的運(yùn)維跟蹤,通過(guò)簡(jiǎn)單高效、自動(dòng)化的方式將繁瑣的應(yīng)用運(yùn)維工作通過(guò)管控系統(tǒng)來(lái)完成,即可以降低運(yùn)維的難度,也可以提高運(yùn)維的效率,同時(shí)可以提高運(yùn)維操作的成功率,并實(shí)現(xiàn)運(yùn)維任務(wù)的持續(xù)跟蹤和管理,甚至在不遠(yuǎn)的將來(lái)可以實(shí)現(xiàn)移動(dòng)運(yùn)維。
二、功能結(jié)構(gòu):
經(jīng)過(guò)上述的分析和整理,我們將整個(gè)管控平臺(tái)的功能細(xì)化到如下幾個(gè)大功能,如圖所示:
三、詳細(xì)設(shè)計(jì):
這里圍繞上面功能結(jié)構(gòu)圖中的4個(gè)大功能,進(jìn)行詳細(xì)的分析和設(shè)計(jì),其中移動(dòng)運(yùn)維功能為附加功能,這里暫時(shí)不介紹。
3.1 資源管理
先說(shuō)資源管理,資源管理是一切后續(xù)自動(dòng)化運(yùn)維功能的前提,也是所有自動(dòng)化功能的數(shù)據(jù)依賴(lài)。
資源管理的功能可以較為薄弱,但是對(duì)數(shù)據(jù)的要求比較高,可以基于系統(tǒng)運(yùn)維的CMDB系統(tǒng)進(jìn)行二次構(gòu)建,主要的功能可以分為:
1、物理機(jī)資源管理:物理機(jī)資源管理功能,需要將CMDB中所有交付到應(yīng)用運(yùn)維的物理機(jī)資源進(jìn)行重新整理,按照二級(jí)業(yè)務(wù)產(chǎn)品線(xiàn)進(jìn)行管理,支持多種服務(wù)器狀態(tài)(如部署中,備用池等等)標(biāo)注??梢曰谖锢頇C(jī)資源管理系統(tǒng)進(jìn)行服務(wù)器初始化管理操作,加快服務(wù)初始化部署工作的效率。物理機(jī)資源管理對(duì)于后續(xù)的配置管理和作業(yè)管理來(lái)說(shuō)是最為重要的,是后續(xù)兩個(gè)功能的數(shù)據(jù)基礎(chǔ)。
2、管理虛機(jī)資源管理:所有的管理服務(wù)都部署在管理虛機(jī)上,因此我們也需要對(duì)管理虛機(jī)進(jìn)行管理,管理虛機(jī)的數(shù)據(jù)和物理機(jī)資源管理一樣,可以依賴(lài)系統(tǒng)運(yùn)維的CMDB中的數(shù)據(jù)進(jìn)行二次管理,功能和物理機(jī)資源管理類(lèi)似,這里不再闡述。
3、虛擬資源管理:虛擬資源管理就是在每一臺(tái)物理機(jī)上的虛擬機(jī)/業(yè)務(wù)DB的資源管理,可以基于業(yè)務(wù)管理數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行二次整合,或者通過(guò)數(shù)據(jù)采集上報(bào)的方式實(shí)現(xiàn),盡可能的做到虛擬資源數(shù)據(jù)的有效性和狀態(tài)一致性。
虛擬資源數(shù)據(jù)在進(jìn)行后續(xù)的虛擬資源管理、虛擬資源遷移等功能上會(huì)有較大幫助,可以基于虛擬資源管理完成自動(dòng)化的實(shí)例遷移工作,節(jié)省大量的手動(dòng)實(shí)例遷移任務(wù)。另外虛擬資源管理對(duì)宕機(jī)恢復(fù)或機(jī)房、機(jī)架斷電等問(wèn)題也會(huì)有較大的幫助。
整個(gè)資源管理比較簡(jiǎn)單,可以?xún)?yōu)先完成物理機(jī)資源管理功能,再實(shí)現(xiàn)虛擬資源管理功能。
3.2 作業(yè)管理
作業(yè)管理是應(yīng)用運(yùn)維管控系統(tǒng)的核心功能,也是應(yīng)用運(yùn)維工作中最經(jīng)常使用到的功能,作業(yè)管理功能也可以分為如下子功能,如圖所示:
下面將分別對(duì)上面幾個(gè)子功能進(jìn)行詳細(xì)介紹:
1. 腳本執(zhí)行:
腳本執(zhí)行和文件分發(fā)是整個(gè)作業(yè)功能的基礎(chǔ)功能,其他的功能都是通過(guò)對(duì)著兩個(gè)功能進(jìn)行組裝和裝飾來(lái)實(shí)現(xiàn)的。
腳本執(zhí)行的表現(xiàn)形式就是運(yùn)維人員在頁(yè)面中提交一個(gè)腳本,腳本建議支持shell和python兩種形式,可以通過(guò)三種方式:
1)手動(dòng)書(shū)寫(xiě);也就是在頁(yè)面上的編輯器中編寫(xiě)腳本;
2)上傳腳本;也就是通過(guò)瀏覽器將本地的腳本上傳到系統(tǒng)中;
3)克隆系統(tǒng)腳本;所謂的系統(tǒng)腳本就是運(yùn)維人員通過(guò)上面兩個(gè)步驟提交到系統(tǒng)中的腳本,可以分為基礎(chǔ)系統(tǒng)腳本和用戶(hù)系統(tǒng)腳本,基礎(chǔ)系統(tǒng)腳本就是那些我們明確可能會(huì)多次執(zhí)行的腳本,比如服務(wù)器初始化等腳本;用戶(hù)系統(tǒng)腳本就是用戶(hù)自定義的腳本,可以實(shí)現(xiàn)任何功能。
腳本的編寫(xiě)要依賴(lài)一定的語(yǔ)法規(guī)范,我們可以為shell和python語(yǔ)言提供基礎(chǔ)的類(lèi)包和函數(shù)庫(kù),同時(shí)所有的腳本的執(zhí)行結(jié)果都會(huì)根據(jù)腳本的exit的 $? 值來(lái)判斷,$? 值為0,則表示該腳本執(zhí)行成功,若為其他值則表示腳本執(zhí)行失敗。腳本的輸出內(nèi)容會(huì)存儲(chǔ)到數(shù)據(jù)庫(kù)中用于后續(xù)的問(wèn)題跟蹤和排查,因此需要運(yùn)維人員寫(xiě)腳本的時(shí)候注意寫(xiě)上詳細(xì)的日志內(nèi)容。
腳本支持輸入?yún)?shù)。用戶(hù)可以在頁(yè)面中的參數(shù)一欄輸入執(zhí)行參數(shù),當(dāng)然也可以直接寫(xiě)到腳本里。
支持選擇執(zhí)行賬戶(hù)。目前大部分服務(wù)的運(yùn)行賬戶(hù)仍然是root用戶(hù),后續(xù)可能會(huì)改成非root用戶(hù),所以這里支持選擇執(zhí)行賬戶(hù),具體的賬戶(hù)名稱(chēng),可以在用戶(hù)管理的功能中維護(hù)。
支持選擇所執(zhí)行的服務(wù)器。用戶(hù)在選擇好相應(yīng)的腳本之后,需要指定在哪些服務(wù)器上執(zhí)行該腳本,因此需要支持選擇所需的服務(wù)器。這里面服務(wù)器選擇分為兩種模式:
1)本地執(zhí)行模式;本地模式指,該腳本的執(zhí)行并不會(huì)到遠(yuǎn)程服務(wù)器去執(zhí)行,而是在管理服務(wù)所在的本地執(zhí)行,這種模式可以用來(lái)判斷遠(yuǎn)程服務(wù)器是否啟動(dòng)等功能,或是某些只能在管理服務(wù)器上執(zhí)行的命令;
標(biāo)簽: 通用應(yīng)用 運(yùn)維管控