一個通用應用運維管控平臺的設計實現
一、問題背景:
本文引用地址:http://www.104case.com/article/201807/383696.htm大部分的應用運維工作隨著服務器數量和產品數量的增長而增加,而運維人數的不足導致單個運維人員所承擔的工作任務較為繁重,同時運維工作的不標準、無自動化使得應用運維任務十分復雜,耗費的大量的人員成本、時間成本和溝通成本。
應用運維工作說白了大體可以分為兩種情況:1. 在某個或某些服務器上執行某個腳本或命令;2.將某個或某些文件傳輸到某個或某些特定的服務器的特定位置上。在服務器數量較少的情況下,可以通過ssh或scp命令實現上面兩個操作;服務器數量較多的情況下,我們可以通過包裝ssh或者使用批量ssh工具,如pssh,ansible等來解決問題,但這種方式大多數都是一次性的方式,無論使用方法以及后續跟蹤來看都并不友好。
還有,由于一系列歷史原因,現網的服務環境也較為繁雜,現網的服務器上的代碼、配置、軟件包、腳本等文件沒有進行統一的版本管理與配置管理,比如某個產品的代碼版本多種多樣;現網的代碼和文件幾乎都是通過一臺復制到另一臺的方式來實現;由于代碼版本、配置版本等問題導致的現網質量事件也并不在少數。
另外,應用運維也需要一個統一的資源管理系統,對現網的服務的數據進行業務維度的資源管理,系統運維的CMDB系統只在靜態資源維度進行了管控,動態的業務數據等資源需要應用運維團隊自行來管理。
因此,針對上面所述的各種問題,需要一個運維管控系統,來解決包括:資源管理、配置管理、任務管理、文件發布等一些列常用的運維跟蹤,通過簡單高效、自動化的方式將繁瑣的應用運維工作通過管控系統來完成,即可以降低運維的難度,也可以提高運維的效率,同時可以提高運維操作的成功率,并實現運維任務的持續跟蹤和管理,甚至在不遠的將來可以實現移動運維。
二、功能結構:
經過上述的分析和整理,我們將整個管控平臺的功能細化到如下幾個大功能,如圖所示:

三、詳細設計:
這里圍繞上面功能結構圖中的4個大功能,進行詳細的分析和設計,其中移動運維功能為附加功能,這里暫時不介紹。
3.1 資源管理
先說資源管理,資源管理是一切后續自動化運維功能的前提,也是所有自動化功能的數據依賴。
資源管理的功能可以較為薄弱,但是對數據的要求比較高,可以基于系統運維的CMDB系統進行二次構建,主要的功能可以分為:
1、物理機資源管理:物理機資源管理功能,需要將CMDB中所有交付到應用運維的物理機資源進行重新整理,按照二級業務產品線進行管理,支持多種服務器狀態(如部署中,備用池等等)標注。可以基于物理機資源管理系統進行服務器初始化管理操作,加快服務初始化部署工作的效率。物理機資源管理對于后續的配置管理和作業管理來說是最為重要的,是后續兩個功能的數據基礎。
2、管理虛機資源管理:所有的管理服務都部署在管理虛機上,因此我們也需要對管理虛機進行管理,管理虛機的數據和物理機資源管理一樣,可以依賴系統運維的CMDB中的數據進行二次管理,功能和物理機資源管理類似,這里不再闡述。
3、虛擬資源管理:虛擬資源管理就是在每一臺物理機上的虛擬機/業務DB的資源管理,可以基于業務管理數據庫中的數據進行二次整合,或者通過數據采集上報的方式實現,盡可能的做到虛擬資源數據的有效性和狀態一致性。
虛擬資源數據在進行后續的虛擬資源管理、虛擬資源遷移等功能上會有較大幫助,可以基于虛擬資源管理完成自動化的實例遷移工作,節省大量的手動實例遷移任務。另外虛擬資源管理對宕機恢復或機房、機架斷電等問題也會有較大的幫助。
整個資源管理比較簡單,可以優先完成物理機資源管理功能,再實現虛擬資源管理功能。
3.2 作業管理
作業管理是應用運維管控系統的核心功能,也是應用運維工作中最經常使用到的功能,作業管理功能也可以分為如下子功能,如圖所示:

下面將分別對上面幾個子功能進行詳細介紹:
1. 腳本執行:
腳本執行和文件分發是整個作業功能的基礎功能,其他的功能都是通過對著兩個功能進行組裝和裝飾來實現的。
腳本執行的表現形式就是運維人員在頁面中提交一個腳本,腳本建議支持shell和python兩種形式,可以通過三種方式:
1)手動書寫;也就是在頁面上的編輯器中編寫腳本;
2)上傳腳本;也就是通過瀏覽器將本地的腳本上傳到系統中;
3)克隆系統腳本;所謂的系統腳本就是運維人員通過上面兩個步驟提交到系統中的腳本,可以分為基礎系統腳本和用戶系統腳本,基礎系統腳本就是那些我們明確可能會多次執行的腳本,比如服務器初始化等腳本;用戶系統腳本就是用戶自定義的腳本,可以實現任何功能。
腳本的編寫要依賴一定的語法規范,我們可以為shell和python語言提供基礎的類包和函數庫,同時所有的腳本的執行結果都會根據腳本的exit的 $? 值來判斷,$? 值為0,則表示該腳本執行成功,若為其他值則表示腳本執行失敗。腳本的輸出內容會存儲到數據庫中用于后續的問題跟蹤和排查,因此需要運維人員寫腳本的時候注意寫上詳細的日志內容。
腳本支持輸入參數。用戶可以在頁面中的參數一欄輸入執行參數,當然也可以直接寫到腳本里。
支持選擇執行賬戶。目前大部分服務的運行賬戶仍然是root用戶,后續可能會改成非root用戶,所以這里支持選擇執行賬戶,具體的賬戶名稱,可以在用戶管理的功能中維護。
支持選擇所執行的服務器。用戶在選擇好相應的腳本之后,需要指定在哪些服務器上執行該腳本,因此需要支持選擇所需的服務器。這里面服務器選擇分為兩種模式:
1)本地執行模式;本地模式指,該腳本的執行并不會到遠程服務器去執行,而是在管理服務所在的本地執行,這種模式可以用來判斷遠程服務器是否啟動等功能,或是某些只能在管理服務器上執行的命令;
評論