基於指令碼的伺服器集群管理工具

2022-02-17 16:27:27 字數 3020 閱讀 4503

基於指令碼的伺服器集群管理工具

背景:隨著雲計算服務的普及,基於雲計算的paas、iaas受到越來越多的關注,使用這些服務的使用者也越來越多。對於一些大型的應用而言,可能包含多種服務,而這些服務需要部署在多台伺服器上。例如:某個應用可能部署了10臺資料庫伺服器,10臺web http伺服器以及5臺靜態檔案儲存伺服器等。那麼作為應用程式管理員來說,一台一台地登入去管理這些機器顯得非常繁瑣,而且對於同一種服務(比如資料庫服務)的機器需要執行的管理任務又都大致相同,那麼對每台機器進行重複的工作也會增加集群管理員的負擔。

應對上述需求場景,我開發了這樣乙個基於指令碼的伺服器集群管理工具,它主要具有如下功能和優點:

1、  針對不同應用場景,對伺服器進行高效的分組管理。

2、  以可執行指令碼作為子任務,可以自定義指令碼內容,具有高度靈活性。以多個指令碼組成的有序組序列作為可執行任務單元。指令碼可分組,同組內可排序,有效組織和管理。

3、  針對不同需求,建立「伺服器組指令碼組」的執行任務。隨時啟動該任務,便可下達對該伺服器組的基於指令碼序列的任務執行命令。

4、  提供對「伺服器組指令碼組」的執行任務的執行狀態查詢,便於監控。可以檢視遠端伺服器控制台的輸出顯示,當前執行狀態,執行到哪個指令碼,哪個指令碼有異常等等資訊。

應用場景舉例:

假如我想為我的10臺機器同時安裝lamp。那麼首先我們建立乙個伺服器組server_group,並將這10臺機器加入到該組中。接下來,我們建立三個指令碼,分別為setup_apache,setup_mysql,setup_php,然後我們再建立乙個指令碼組,命名為lamp_group,並將前面的三個指令碼新增到該組來,並在組內排好順序(針對有執行順序要求的任務)。最後,我們建立乙個可執行任務並執行,再狀態查詢頁面中監控該任務的在不同伺服器上的個指令碼執**況。

過一段時間,我又想為另乙個伺服器組安裝某些服務,也需要使用到mysql ,那麼就可以將之前建立的setup_mysql指令碼復用新增,再增加一些其他需要的指令碼,生成新的指令碼組。

或是,我突然想檢視集群上的某個日誌檔案,那麼編寫乙個將日誌檔案內容列印到控制台的指令碼,對該集群執行該指令碼,再通過監控頁面得到遠端主機的控制台輸出結果,方便檢視。

技術實現過程中的關鍵點:

1、如何將指令碼檔案拷貝到遠端主機上;

基於pexpect,使用scp命令,進行指令碼檔案的遠端拷貝,因為scp是成熟的命令,可以確保檔案的完整性與安全性。

2、如何觸發遠端主機上指令碼的執行;

觸發指令碼執行功能使用的pexpect提供的pxssh模組,該模組式是對pexpect核心模組的進一步封裝,並用於實現基於ssh方式通訊的互動模組。由於,指令碼的執行效果與耗時都是無法預知的,客戶端觸發指令碼執行命令後不可能一直等待這些指令碼程序結束。因此,在下達執行命令後,客戶端應該立即結束自身,而執行指令碼應該把執行過程中產生的輸出內容重定向寫入到某個日誌檔案中,客戶端獲取該檔案得到輸出結果。

由於主要耗時在網路通訊,因此對多台主機採用多執行緒的方式進行處理。

3、如何獲取指令碼的執行狀態與執行結果。

有一些重要的問題需要考慮:客戶端如何獲知這些指令碼的執行是否已經結束了?它們是正常結束的,還是出錯掛掉的?以及當前正在執行的是哪個指令碼檔案? 因此,我們需要獲取這些指令碼執行程序的狀態。在linux上,一般用ps命令進行程序狀態的檢視,使用grep可以進行內容的篩選。在這裡,我們利用某種標識串對每個指令碼進行標識,這樣使用「ps -aux | grep 標識串」命令就可以檢視該執行指令碼的程序狀態了。為了判斷指令碼檔案執行是否是正常退出的,我們在按序執行這些指令碼後在日誌檔案結尾插入乙個標識串。如果日誌檔案中,存有該標誌串則證明是正常結束的,否則可能仍在執行或是發生了某些錯誤。程式裡,使用了一些小技巧。

截圖及說明:

技術實現:

系統環境:linux(ubuntu)

使用到技術及模組:python2.6 ,pexpect ,web.py(輕量級web框架) , sqlalchemy(orm) , mysql ,  jquery , twitter bootstrap。

一些說明:

0、  專案包括控制台console和web兩個應用

console 通過根據配置檔案作為引數執行命令,web則更好的可以進行伺服器、指令碼、任務的視覺化系統管理。

console執行:./run_task.py tasks.xml

web啟動:./start.sh  通過瀏覽器訪問,預設埠8080(該資料夾下的database.conf為mysql資料庫的配置)

1、被管理的server需為unix(linux)系統,且裝有ssh server(即可以ssh遠端登入)。

2、指令碼頭部請填寫類似「#!/usr/bin/python」等說明,以確保其可以正常執行。

3、該專案目前只開發了乙個大致的框架,由於課業壓力較大,時間倉促,專案裡一些細節的東西可能還需進一步完善。

專案原始檔:

clustermanagement.zip

基於指令碼的伺服器集群管理工具

基於指令碼的伺服器集群管理工具 背景 隨著雲計算服務的普及,基於雲計算的paas iaas受到越來越多的關注,使用這些服務的使用者也越來越多。對於一些大型的應用而言,可能包含多種服務,而這些服務需要部署在多台伺服器上。例如 某個應用可能部署了10臺資料庫伺服器,10臺web http伺服器以及5臺靜...

多伺服器管理工具fablinker

fablinker是本人自主開發的乙個多伺服器專案部署和管理的工具。基於python 2.7 用到fabric第三方庫,在一台伺服器上可管理控制多個遠端主機,目前v0.01已開發完成。使用前提是多個伺服器之前可以通過ssh互聯。具體配置請在網上搜尋。開源 2.1 專案部署 比如分布式爬蟲部署在12臺...

開源伺服器管理工具 3個開源時間管理工具

開源伺服器管理工具 對於許多人來說,他們引用使用基於linux的作業系統的原因之一就是生產力。如果您是只根據自己的喜好對系統進行了調整的超級使用者,尤其是如果您熟練使用命令列,則很有可能已經實現了生產率的顯著提高。但是,您是否必須成為極端使用者才能利用開放源 軟體的能力來提高生產率?絕對不!除了生產...