文 /陸春 黃杰 陳云
高校信息化快速發(fā)展,隨著信息化建設的逐步深入,IT運維管理和提高服務能力也越發(fā)得到重視。隨著IT規(guī)模不斷擴大,應用系統(tǒng)的迭代速度越來越快,運行環(huán)境對可用性和伸縮性的要求不斷提高,這給基礎設施維護工作帶來巨大的壓力與挑戰(zhàn)。
系統(tǒng)管理員面對幾百臺服務器和應用服務,傳統(tǒng)方式下通過手工操作或是使用定制腳本實現(xiàn)部分工作的自動化或者半自動化。但是,這種方式在服務器數(shù)量日益增多,軟件應用環(huán)境日趨復雜的情況下,漸漸顯得捉襟見肘,問題主要體現(xiàn)在以下幾個方面:1.手工操作避免不了會有誤操作、漏操作等人為因素帶來的問題;2.手工操作難以保證多個系統(tǒng)參數(shù)配置的一致性,尤其是在多人共同維護的情況下;3.定制的腳本雖然能在一定程度上提高一些重復性操作的效率,但是定制腳本的通用性差,開發(fā)調(diào)試過程復雜,而且對腳本本身的管理也不是件輕松的事。這樣產(chǎn)生的后果就是問題千奇百怪,故障定位困難,不僅用戶的滿意度大打折扣,而且運維人員疲于應付,工作效率較低下。
鑒于以上現(xiàn)狀,迫切的需要一種實現(xiàn)自動化配置的方法。所以,上海財經(jīng)大學基于開源自動化配置管理工具Puppet搭建了自動化配置管理系統(tǒng),并借助該系統(tǒng),實現(xiàn)了大部分主機配置管理的自動化,取得了較好的應用效果。
Puppet是開源的基于Ruby的自動化系統(tǒng)配置管理工具,遵循GPLv2版權協(xié)議,其目標是幫助系統(tǒng)管理員快捷高效地完成基礎設施整個生命周期的自動化管理。
Puppet主要用來管理Unix和Linux平臺,從2.6版本后逐步開始支持Microsoft Windows系統(tǒng)。Puppet通??梢杂脕砉芾硪慌_主機的整個生命周期:從初始化到安裝、升級、維護以及最后將服務遷移并下線。
Puppet既可以在C/S模式下運行,也可以在一臺主機上獨立運行。大多數(shù)的使用場景中,會選擇C/S模式。該模式下,服務器端運行著Puppet Master,被管理的客戶端安裝Puppet Agent。當Puppet Agent連接上Puppet Master后,該結點的配置信息會被編譯,然后在客戶端上運行。Puppet Agent可以后臺進程的方式運行,默認每半個小時向服務器發(fā)起一次請求,當有配置發(fā)生改變時,自動進行配置更新。也可以通過crontab的形式,達到類似的效果。如果客戶端的配置信息通過其他方式被改變了,還可以從服務器獲得原始配置進行修復,確??蛻舳说呐渲煤头掌鞫说呐渲檬且恢碌?。
Puppet管理實際上是客戶端所應有的狀態(tài),客戶端根據(jù)當前是否達到這個狀態(tài)決定采取相應的動作。Puppet將所有可操作對象抽象為資源,目前已實現(xiàn)的有40多種,如文件、用戶、用戶組、主機名、軟件包、服務、計劃任務、執(zhí)行命令等。
實施自動化配置管理,首要的工作就是對現(xiàn)有的系統(tǒng)配置進行梳理,將各項配置標準化。所謂標準化,是指對服務器環(huán)境中的各種配置制定統(tǒng)一的技術規(guī)范、準則或者約定。具體來講,包括明確定義所使用的軟件及版本,基礎服務的地址(如dns、ntp、yum),常用軟件的默認配置,應用軟件的安裝目錄,主機名的命名規(guī)則等。
Puppet支持多種部署方式,從支持上百個結點的系統(tǒng)默認最小化部署,到支持萬千上萬結點的集群式部署,都能從容應對。我校目前服務器規(guī)模在200左右,而且剛開始實施配置管理自動化,對Puppet的使用還處于探索階段,所以先選擇了最小化部署方案。如圖1所示,自動化配置管理系統(tǒng)主要包含配置版本庫、PuppetServer、PuppetClient幾個組成部分。各部分的功能如下:
配置版本庫。用于存放各服務器的配置信息,并對配置信息進行版本控制,記錄服務器配置修改的過程,在必要時還可以進行回退。配置版本庫支持SVN、GIT等常見的版本控制軟件。
圖1 系統(tǒng)架構
PuppetServer(Master)。PuppetMaster負責接受來自各服務器結點上的請求,驗證客戶端的身份,并返回相應的配置信息給客戶端。服務器端有可能會成為整個配置管理系統(tǒng)的性能瓶頸,將來根據(jù)需要可以把默認的WebrickHttpServer更換成Apache或者Nginx,還可以集群方式部署,增加多個PuppetMaster結點。如果是更大規(guī)模的部署,還可以增加消息隊列服務,以確保數(shù)以萬計的客戶端請求,能夠可靠地被接收和處理。
PuppetClient(Agent)。在所有需要集中配置管理的客戶端上,都必須安裝PuppetClient,以定時向配置服務器請求配置信息,并將這些配置應用到所在的系統(tǒng)中??蛻舳说陌惭b配置比較簡單,但是往往數(shù)量眾多,為了方便部署,可以編寫自動化腳本,一個命令即可自動完成客戶端的安裝和配置。在虛擬化環(huán)境中,可以直接在模板中預先完成這些安裝配置工作。
該部署方案,結構簡單,配置方便,在現(xiàn)階段足以滿足我們的需要。將來服務器規(guī)模擴大后,再對當前架構進行擴展,也不會影響已有結點的配置。
系統(tǒng)安裝配置完成后,必須根據(jù)需求開發(fā)相應的配置管理模塊。在Puppet Forge上有大量由開源社區(qū)貢獻的模塊,所以,模塊的開發(fā)并不需要從零開始。用戶可以從中挑選適合自身環(huán)境和功能需求的模塊來使用,也可以在現(xiàn)有模塊的基礎上進行二次開發(fā)來滿足需求。對于一些特殊的需求,根據(jù)Puppet相關文檔開發(fā)一個新的模塊,也是比較容易的。
截至本文完成時,上海財經(jīng)大學信息辦按照現(xiàn)有環(huán)境中使用的軟件和配置需要,已經(jīng)開發(fā)和使用了表1中所列的模塊。這些模塊基本上覆蓋了學校服務器環(huán)境所使用的軟件,可以自動完成絕大部分的日常配置工作。在將來,這些模塊還會不斷更新、完善和增加,以實現(xiàn)更加穩(wěn)定、可靠和自動化程度更高的配置管理。
表1 模塊列表
配置管理自動化適用于那些數(shù)量大,可描述,并且可重復的情況。數(shù)量大是指被管理對象數(shù)量大,數(shù)量越大,自動化的優(yōu)勢越明顯??擅枋鍪侵概渲庙椏梢杂糜嬎銠C可以理解的形式進行描述,可重復是指同樣的操作在同樣的環(huán)境反復執(zhí)行得到的結果是固定的,這兩個特征是實現(xiàn)自動化的前提條件。因此,在實施過程中,要根據(jù)以上原則對納入自動化管理的配置項進行選擇,不能盲目追求自動化的全覆蓋。
和所有程序開發(fā)一樣,Puppet模塊的開發(fā)也應該遵循一定的規(guī)范。Puppet官方文檔中有相關的指南,對開發(fā)的基本原則、編碼風格、設計模式等方面提供指導。這些內(nèi)容都是在長期實踐過程中總結出的最佳實踐,對開發(fā)出更加容易維護,更加容易擴展的代碼有很大的幫助。
配置管理的自動化主要是變更的執(zhí)行過程的自動化,并不意味著不需要人的干預和管理。自動化配置管理系統(tǒng)的操作應該納入到配置管理和變更管理的流程控制范圍之內(nèi),使得配置變更能夠在規(guī)范的流程管理之下有序地執(zhí)行。
通過搭建集中配置管理平臺實現(xiàn)了對學校IT基礎設施中近200臺服務器(包括Linux、HP-UX、solaris、Windows等多種操作系統(tǒng))的自動化配置管理。操作系統(tǒng)初始化的配置實現(xiàn)了標準化控制,配置的變更和修改實現(xiàn)了集中控制和自動化應用,軟件的安裝和配置實現(xiàn)了版本統(tǒng)一和快速安裝,參數(shù)的個性化配置滿足不同業(yè)務的需求,同時實現(xiàn)了對業(yè)務系統(tǒng)的自動化發(fā)布和部署管理。極大地提高了運維人員的工作效率,降低了出錯風險,保障了業(yè)務系統(tǒng)的持續(xù)健康穩(wěn)定運行。
以操作系統(tǒng)安裝升級為例,新增服務器操作系統(tǒng)安裝,軟件與補丁安裝,安全配置等工作,占到我部服務器維護人員日常工作的20%。這類工作,重復程度很高,而且比較費時。采用集中配置管理之后,制定好經(jīng)過驗證的Puppet模塊之后,發(fā)送各個客戶端,能夠在幾分鐘的之內(nèi)完成之前需要兩三天所要進行的工作,而且能夠確保所有軟件安裝、參數(shù)和預定的配置完全一致。
此外,對于其他管理規(guī)定中的工作,也可通過Puppet這樣的有效工具進行落地。如我部在安全管理辦法中定義所有服務器管理員密碼必須每三個月更換一次,但考慮到我部管轄到上百臺服務器,現(xiàn)有人力手工操作根本無法達成這樣的標準,這使得許多規(guī)范都成了所謂的“看看”規(guī)范,采用了Puppet集中配置管理之后,通過制定好密碼規(guī)則,五分鐘之內(nèi)即可將所有服務器的管理員密碼進行修改,極大地提高了運維人員的工作效率。
集中配置管理平臺雖然在保證服務的持續(xù)穩(wěn)定高效運行方面發(fā)揮了重要的作用,但在實踐中還是有更多工作要做:
1.Puppet服務器目前還是單節(jié)點運行,存在單點故障隱患。我們將解決Puppet服務器集群環(huán)境的建設,既可以消除單節(jié)點的故障隱患,又能增加Puppet服務器集群的處理能力,管理控制更多的客戶端,滿足日益增長的服務器數(shù)量。
2.集中配置管理是自動化運維平臺的一部分,下一步將考慮其與自動化運維平臺中其他組成部分的接口,如自動化監(jiān)控、CMDB等,形成一整套自動化運維體系,完成這些工作還需要相當?shù)呐Α?/p>