文/陳琳 王彬
開源系統自動監控大量虛擬主機
文/陳琳 王彬
當虛擬主機數量達到幾十個甚至上百時,手工管理方式已不能滿足要求,對虛擬主機的日常運行管理、維護及對虛擬主機用戶的技術支持服務迫切需要自動化的系統進行管理。山東大學選擇多種開源軟件進行整合,開發出一套虛擬主機管理監控系統。
虛擬主機是采用特殊的軟件技術,把一臺服務器劃分為若干個“虛擬”的主機。然而當虛擬主機數量達到幾十個甚至上百時,手工管理方式已不能滿足要求,對虛擬主機的日常運行管理、維護及對虛擬主機用戶的技術支持服務迫切需要自動化的系統進行管理。
虛擬主機主要有基于Windows操作系統的和基于Linux操作系統的兩種,目前基于Linux的開源虛擬主機管理系統多是國外人員研發,采用單機方式,中文支持不理想,且運行環境依賴軟件多、安裝設置復雜,可用性不強。
山東大學根據工作需要對虛擬主機管理監控系統提出以下需求:
1.虛擬主機管理監控系統可以支持Linux操作系統,以便于在主流的虛擬主機環境Linux+Apache+PHP中采用B/S方式來管理操作系統;
2. 應用系統必須分別部署到不同的服務器上,并且可以進行集中管理;
3. 支持多語言環境,可以通過不同的應用環境管理虛擬主機服務器本身和虛擬主機站點;
4. 服務器管理員通過系統登錄后可以發布系統通知、按不同的服務器查看各自虛擬主機磁盤空間使用情況;
5. 新的添加的服務器可以方便地納入系統的管理中;可以靈活地增加、刪除虛擬主機,顯示虛擬主機列表,可以為虛擬主機分配數據庫、磁盤配額,并且在創建虛擬主機時從可用服務器中選擇,可以查看網站訪問日志的統計信息,可以修改虛擬主機用戶的密碼;
6. 虛擬主機管理員登錄后可以查看系統通知,查看自己所管理的虛擬主機的空間使用情況、網站訪問日志統計,可以修改自己的網站密碼和數據庫密碼;
7.登錄系統采用用戶名、密碼、驗證碼相結合的方式,必須考慮管理端和被管理服務器間數據通訊的安全性,管理系統開發中必須考慮安全性、具有一定的防止SQL注入、跨站攻擊能力。
我們采用分布式設計方案,即用戶可以在任意一臺主機上登錄,管理所有的虛擬主機和物理機節點,魯棒性強,使用方便。普通用戶和管理員用戶程序分開,運行安全穩定。
系統的創新點
針對現在市面上主流的虛擬主機管理軟件產品,山東大學利用開源軟件開發了一套虛擬主機管理監控系統,具有以下創新點:
1.對等方式服務器架構,魯棒性強。在所有的服務器上部署相同的虛擬主機管理軟件,服務器之間直接通信、共享資源、協同工作,每個服務器有著相同的功能,無主從之分,任意一臺主機既可作為受控服務器而被其他的控制端所使用,又可以作為控制端的計算機來訪問網絡中的其他虛擬主機節點,沒有專用的Web服務器。這樣就能夠提供分布式訪問。即使一臺服務器宕機也不會影響網絡中的其他服務器和整個虛擬主機網絡,所以系統的健壯性強;
2.本系統跨平臺支持Linux以及AIX、Solaris等Unix系統,并且系統方便部署,鑒于 Perl 先天的優勢,能夠方便地實現對系統命令的調用和前臺CGI對接。本系統在使用中支持中英等多國語言;
3.加密數據傳輸,可以安全地傳遞指令和數據。我們使用RSA公鑰加密來加密主機之間的數據,以保障信息不被竊取;
4.純Web界面管理,不需要任何客戶端軟件,方便用戶在網絡環境下操作;
5.使用開源開發工具及數據庫,使系統的安全性更強,二次開發能力也更好。
系統的優勢
普通情況下,虛擬主機管理監控網絡中的所有系統都是對等的(如圖1所示),這樣可以有很高的系統冗余性,并且保證系統的穩定和安全。
然而,當管理員從任何一臺計算機登錄時,提供Web服務的服務器就充當虛擬主機管理監控系統中的Client, Client負責從網絡中其他的主機上取回信息,生成Web頁面,并響應用戶請求,完成用戶發出的命令(如圖2所示)。
用戶所登錄的那臺服務器上存放其他服務器的公鑰,用來加密數據。用戶只需登錄到系統中就可以管理其他服務器,而不用輸入密碼,這減少了密碼輸入的次數,且密碼不用在服務器間傳輸,提高了安全性。
虛擬主機管理監控系統優化用戶權限管理,參照sudo,定制用戶執行命令的權限,過濾特殊字符,對各種注入攻擊起到一定的防范作用。
主機的訪問統計通過讀取Apache日志實現,對日訪問量、月訪問量和年訪問量進行統計。
在該系統實現過程中,我們充分注意細節,比如,用戶語言可以根據用戶當前瀏覽器語言來設定,當用戶瀏覽器語言為英文時,虛擬主機管理用戶界面顯示為英文,當瀏覽器語言為中文時顯示為中文,這樣就能充分滿足不同用戶的需求。后端的實現采用Linux系統通用的 Gettext 國際化方式,結構清晰,過程嚴謹。在Apache控制方面,該系統提供了普通模式和高級模式,在普通模式下用戶可以根據系統提示來更改配置,只需要填寫相關項目就可以方便地更改配置,高級模式下用戶可以自行編寫Apache配置文件,定制性強,可根據需要來更改Apache配置,方式多種多樣,使用方便,靈活性強。在用戶登錄時添加驗證碼的實現方式保證用戶登錄的安全性。


針對系統的設計需求,我們應用了多種開源軟件進行整合開發。例如處理磁盤配額問題,采用Quota 來進行管理;對于遠程主機調用的問題,采用 SSH方法;我們使用 Apache為用戶提供 Web 服務;對于FTP 服務我們采用vsftp;對于系統的數據庫,我們采用MySQL軟件 。另外,我們需要對虛擬主機信息進行監控,所以選擇了Awstats、Cacti和CutyCapt。
我們對系統開發模塊進行具體分析。
1.用戶登錄模塊
在虛擬主機網絡中所有主機的數據庫上都保存一份管理員的用戶名和密碼。當用戶登錄時,首先看到的是登錄頁面,頁面上有驗證碼, 需要用戶輸入驗證碼才能進行用戶名和密碼的驗證。在用戶提交表單后,先檢查驗證碼是否正確,如果不正確,則返回登錄頁面,如果正確,則繼續進行用戶名和密碼驗證。當所有驗證都通過時,將Sessionid寫入用戶Cookie,返回給用戶管理頁面。
部分代碼實現:




2.系統驗證登錄和退出
用戶進行每一步操作時都要進行是否登錄的驗證,以阻止未登錄用戶直接調用某個頁面進行操作,這是由單獨的模塊進行:每次用戶進行操作時,都對用戶sessionid 與已經登錄的sessionid進行比較,如果二者相同,則認為用戶已經登錄。用戶登出時,服務器清空Session。
3.系統新增節點
當系統增加服務器節點時,先在新增加的實體機節點上配置、授權一臺虛擬主機管理網絡中的主機訪問,再在這臺授權過的主機上增加節點。增加節點時,虛擬主機管理會更新所有主機上的主機列表,復制當前的列表到新增主機上,授權數據庫,并同步RSA公鑰,完成授權。
部分代碼實現:


4.主機列表及其負載情況
因為主機列表分布在不同的服務器上,分別由不同的服務器來維護,因此在登錄時要從虛擬主機網絡中的服務器取回主機列表信息,包括用戶名、用戶信息、磁盤配額等(這一步通過數據庫連接進行)。
5.系統消息列表的維護
每一臺服務器都維護一個消息列表,讀取通知時只需在本地讀取即可。但在發布通知和修改刪除通知時,需要在所有服務器上推送消息,保證消息列表的可靠性。
6.添加虛擬主機
添加虛擬主機時首先需要選取服務器,服務器接收到表單,判斷服務器是本地服務器還是遠程服務器,若是本地服務器,則在本地新建虛擬主機,若是遠程服務器,則在遠程服務器進行遠程過程調用RPC來新建虛擬主機。在主機新建時,要調用到Apache控制模塊來完成Apache配置。
新建虛擬主機時需要配置vsftpd、Apache、MySQL和 Quota,這是由過程調用產生的。
部分代碼實現:


7.配置Apache控制模塊
該模塊完成Apache的配置、修改、刪除、重啟工作,在連接遠程主機完成工作時,需要進行加密連接,遠程調用。
部分代碼實現:



8.查看FTP日志
用戶從查看FTP日志的頁面上選擇一個要查看FTP日志的主機或者用戶,FTP日志模塊就會讀取本地或者遠程日志,返回給用戶,在遠程讀取時進行加密連接。
9.系統附加功能
為了更好地完善虛擬主機管理系統的功能,添加照片墻和訪問管理等開源軟件的支持以方便用戶的使用。
(1)照片墻
照片墻后臺選用Qt庫來實現,Cutycapt生成頁面快照,genSnapWall來調用xvfb和Cutycapt共同完成快照,將結果存于服務器上,照片墻可方便地展現網站快照,直觀地顯示管理虛擬主機的現狀。
(2)Awstats
Awstats是一個免費、簡潔、強大、有個性的統計工具。它可以統計站點中的如下信息:訪問量、訪問次數、頁面瀏覽量、點擊數、數據流量等;精確到每月、每日、每小時的數據;訪問者國家;訪問者IP;Robots/Spiders的統計;訪客持續時間;對不同Files type 的統計信息;Pages-URL的統計;訪客操作系統瀏覽器等信息;其他信息(搜索關鍵字等等)。
(作者單位為山東大學網絡與信息中心)