摘要:服務器虛擬化技術可以大大提高對服務器的整合和管理效率,便于快速部署各種應用。該文首先簡要介紹了VMware vSphere平臺的組成結(jié)構,然后詳細描述了如何利用VMware vSphere SDK開發(fā)靈活、簡潔并具有友好界面的VMware vSphere客戶應用程序的流程步驟和實現(xiàn)方法。
關鍵詞:VMware vSphere SDK;C#;虛擬化技術;客戶應用程序;Manager Of Reference(MOR)
中圖分類號:TP391文獻標識碼:A文章編號:1009-3044(2010)02-331-03
Completion of the Virtualization Client Applications Based on VMware vSphere SDK
CHEN Bo1,2, TANG Ling-li1, ZHOU Zhong-hai1, YUAN Zhi-ping1
(1.Jiangnan Computing Technology Institute, Wuxi 214083, China; 2.95846 PLA Troops, Fuzhou 350000, China)
Abstract: Server virtualization technology can improve the efficiency of server integration and management greatly, and it also can be convenient to deploy all kinds of application. At first, this paper introduces the architecture of VMware vSphere platform simply, and then describes how to use the VMware vShpere SDK to develop the flexible, compact VMware vShpere client application with friendly interface in detail.
Key words: VMware vSphere SDK; C#; virtualization technology; client applications; manager of reference(MOR)
近年來,隨著計算機技術、網(wǎng)絡技術的發(fā)展,許多企事業(yè)單位配備了越來越多的應用系統(tǒng),相應地,服務器的數(shù)量也越來越多。但是這些服務器通常只能承載單一的應用服務,過高的服務器硬件配置將使得服務器的優(yōu)越性能難以得到充分利用,從而造成資源浪費;而過低的硬件配置又怕不能滿足后續(xù)的用戶需求;此外,服務器數(shù)量的逐年增加也使得管理變得日益復雜。而虛擬化技術的引入能夠提高服務器的利用率、加快應用部署的速度,從而提供高可靠性、高可用的應用服務。
虛擬化技術是當前大型數(shù)字化中心進行硬件資源整合和提高能效的重要技術之一,主要有完全虛擬化、部分虛擬化和操作系統(tǒng)層虛擬化三種方式。虛擬化是一個抽象層,它打破了物理硬件與操作系統(tǒng)的物理連接。服務器虛擬化系統(tǒng)就是通過虛擬化技術從服務器中虛擬出多個客戶機進行統(tǒng)一的整合管理,而這些客戶機可以相互獨立運行安裝不同的操作系統(tǒng)和應用程序。作為一個面向用戶的系統(tǒng),如何能夠設計一個具有簡潔友好界面的虛擬化客戶應用程序,以便更好地滿足用戶靈活有效地管理服務器虛擬化系統(tǒng),是一個有待解決的問題。
1 VMware vSphere SDK工作原理
1.1 組成結(jié)構圖
VMware vSphere是VMware公司開發(fā)的構建云計算架構的最佳平臺,使用VMware vSphere來構建云計算基礎架構,可以減少運行的服務器數(shù)量,降低資金成本和運營成本。VMware vSphere虛擬化多個系統(tǒng)間的基礎物理硬件資源,同時為數(shù)據(jù)中心提供大量虛擬資源。作為云操作系統(tǒng),VMware vSphere可作為無縫和動態(tài)操作環(huán)境管理大型基礎架構(例如CPU、存儲器和網(wǎng)絡),同時還管理復雜的數(shù)據(jù)中心。VMware vSphere主要由以下基本組件構成:ESX主機(主服務器)、vCenter Server(虛擬中心服務器)、vSphere SDK、vSphere Web Access或vSphere Client等,組成結(jié)構圖如圖1所示。
VMware vSphere SDK是一種為VMware和第三方解決方案提供標準界面以訪問VMware vSphere功能的開發(fā)包。VMware vSphere Web Services SDK 4.0是VMware提供的最新軟件開發(fā)包,包含了VMware vSphere API實現(xiàn)的所有必需組件,其中包括WSDL文件、各種庫文件、幫助文檔和例程,是一個服務器虛擬化系統(tǒng)的二次開發(fā)平臺。我們可以利用這個平臺開發(fā)靈活方便的客戶應用程序來管理、監(jiān)控和維護VMware vSphere組件。
1.2 接口函數(shù)
主要接口函數(shù)如下:
Login(ManagedObjectReference _this,string userName,string password,string locale);
//建立一個服務器連接,ManagedObjectReference(受管對象引用)類型是一個指向?qū)ο蟮闹羔槪渲衉this參數(shù)指定一個特定的SessionManager受管對象引用,userName參數(shù)指定連接的服務器的用戶名,password參數(shù)指定該用戶名所對應的密碼,locale參數(shù)指定所在區(qū)域,缺省為服務器的所在區(qū)域。
CreateVM_Task(ManagedObjectReference _this, VirtualMachineConfigSpec config, ManagedObjectReference pool, ManagedObjectReference host);
//在指定目錄下創(chuàng)建一個新的虛擬機,其中_this參數(shù)指定一個特定的Folder受管對象引用,config參數(shù)指定新建虛擬機的相關配置,pool參數(shù)指定該虛擬機所在的資源池,host參數(shù)指定該虛擬機所在的目標主機。
RetrieveProperties(ManagedObjectReference _this,PropertyFilterSpec[] { specSet });
//取回相關實體的屬性,包含與虛擬機相關的信息,實現(xiàn)對虛擬機的監(jiān)控,其中_this參數(shù)指定一個特定PropertyCollector受管對象引用,specSet參數(shù)指定需要獲得屬性的清單。
ReconfigVM_Task(ManagedObjectReference _this, VirtualMachineConfigSpec spec);
//對虛擬機進行重新配置,實現(xiàn)對虛擬機的管理,其中_this參數(shù)指定需要重新配置的虛擬機,spec參數(shù)指定需要重新配置的相關值。
2 客戶應用程序功能模塊
該客戶應用程序系統(tǒng)是創(chuàng)建、管理、操作虛擬機的主界面,并可以訪問虛擬機控制臺。包括:虛擬機創(chuàng)建模塊、虛擬機操作模塊、虛擬機管理配置模塊、虛擬機監(jiān)控模塊,功能模塊圖如圖2所示。
各功能模塊完成的功能如下:
虛擬機創(chuàng)建模塊:完成虛擬機的創(chuàng)建工作,包括虛擬機硬件資源的分配、操作系統(tǒng)的選擇等;
虛擬機操作模塊:完成對已建虛擬機的各項操作,包括對虛擬機的電源操作、快照操作、克隆遷移操作等;
虛擬機監(jiān)控模塊:監(jiān)控主機的CPU、內(nèi)存、存儲器、網(wǎng)絡等資源的使用情況;
虛擬機管理配置模塊:查看并動態(tài)分配主機服務器的CPU、內(nèi)存、電源、存儲器、網(wǎng)絡等資源給各個虛擬機。
3 客戶應用程序開發(fā)步驟和實現(xiàn)方法
3.1 開發(fā)環(huán)境
搭建vSphere系統(tǒng)環(huán)境。首先在各主服務器上安裝VMware ESX 4.0,然后在虛擬中心服務器中安裝Windows 2003操作系統(tǒng),并在上面安裝VMware vCenter Server。安裝完成之后進行網(wǎng)絡配置。
3.2 開發(fā)工具
VMware推薦使用Java或者C#作為開發(fā)語言。本實例中我們選擇C#作為開發(fā)語言,Microsoft Visual Studio 2005作為開發(fā)環(huán)境。另外,開發(fā)客戶應用程序所需要的工具包括Microsoft .NET Framework 2.0和vSphere Web Services SDK 4.0,所需的動態(tài)鏈接庫包括AppUtil.dll,Vim25Service2005.dll,VimService2005.dll,Vim25Service2005.XmlSerializers.dll, VimService2005.XmlSerializers.dll,VMware.Security.CredentialStore.dll等。這些動態(tài)鏈接庫可通過正確設置環(huán)境變量,并運行vSphere Web Services SDK 4.0工具包中的Build2005產(chǎn)生。
3.3 開發(fā)方法
客戶應用程序的開發(fā)既可采用瀏覽器/服務器(B/S)模式(如vSphere Web Access),也可采用客戶端/服務器(C/S)模式(如vSphere Client),本文選擇客戶端/服務器(C/S)模式實現(xiàn)開發(fā)。在Microsoft Visual Studio 2005中新建一個項目,并添加上述動態(tài)鏈接庫以及Web引用,之后就可以進行客戶應用程序的功能開發(fā)。下面簡要說明整個客戶應用程序的開發(fā)過程。
3.3.1 連接服務器的實現(xiàn)
用SDK創(chuàng)建客戶應用程序首先應該連接到服務器。
SimpleClient可以實現(xiàn)連接到服務器、與服務器的通信,并可獲得該服務器下相關實體的一些信息。步驟如下:
Step1 //創(chuàng)建一個特定于服務器MOR
_svcRef = new ManagedObjectReference();
_svcRef.type = \"ServiceInstance\";
其中MOR(managed object reference),即受管對象引用,受管對象具有特定于服務器的MOR。MOR是指向?qū)ο蟮闹羔槨?/p>
Step2 //VMA代理實例化
_service = new VimService();
Step3 //獲得ServiceContent對象
_sic = _service.RetrieveServiceContent(_svcRef);
Step4 //調(diào)用Login方法實現(xiàn)與服務器的連接
if (_sic.sessionManager != 1) {
_service.Login(_sic.sessionManager, username, password, 1);}
Step5 //獲取服務器相關信息
_sic.getAbout().getFullName();
_sic.getAbout().getApiType();
_sic.getAbout().getApiVersion()等。
3.3.2 創(chuàng)建虛擬機的實現(xiàn)
連接到服務器之后,可以在主服務器上創(chuàng)建新的虛擬機。主要步驟如下:
Step1 //VMA代理實例化
_service = cb.getConnection()._service;
Step2 //創(chuàng)建相關MOR數(shù)據(jù)對象
ManagedObjectReference dcmor
= cb.getServiceUtil().GetDecendentMoRef(1,\"Datacenter\",dcName);
ManagedObjectReference hfmor
= cb.getServiceUtil().GetMoRefProp(dcmor, \"hostFolder\");
Step3 //創(chuàng)建VirtualMachineConfigSpec數(shù)據(jù)對象
VirtualMachineConfigSpec vmConfigSpec
=vmUtils.createVmConfigSpec(vmname,datastorename,int.Parse(disksize),crmor, hostmor);
Step4 //調(diào)用CreateVM_Task方法實現(xiàn)虛擬機的創(chuàng)建
ManagedObjectReference taskmor
= _service.CreateVM_Task(vmFolderMor, vmConfigSpec, resourcePool, hostmor);
3.3.3 虛擬機監(jiān)控的實現(xiàn)
可以對已經(jīng)創(chuàng)建的虛擬機實現(xiàn)監(jiān)控。步驟如下:
Step1 //初始化
private static AppUtil.AppUtil cb = 1;
static VimService _service = cb.getConnection()._service;
static ServiceContent _sic = cb.getConnection()._sic;
Step2// 對PropertyFilterSpec進行實例化
PropertySpec pSpec = new PropertySpec();
ObjectSpec oSpec = new ObjectSpec();
PropertyFilterSpec pfSpec = new PropertyFilterSpec();
pfSpec.propSet = new PropertySpec[] { pSpec };
pfSpec.objectSet = new ObjectSpec[] { oSpec };
Step3 //調(diào)用RetrieveProperties方法獲得虛擬機的相關信息,以實現(xiàn)對虛擬機的監(jiān)控
ObjectContent[] ocs = new ObjectContent[20];
ocs=_service.RetrieveProperties(_sic.propertyCollector,new PropertyFilterSpec[] { pfSpec });
3.3.4 虛擬機管理配置的實現(xiàn)
對已經(jīng)創(chuàng)建的虛擬機進行管理配置,步驟如下:
Step1//初始化
private static AppUtil.AppUtil cb = 1;
private ManagedObjectReference _virtualMachine = 1;
Step2//實例化
_virtualMachine=cb.getServiceUtil().GetDecendentMoRef(1, \"VirtualMachine\", vmName);
VirtualMachineConfigSpec vmConfigSpec = new VirtualMachineConfigSpec();
Step3 //調(diào)用ReconfigVM_Task方法實現(xiàn)虛擬機的重新配置
ManagedObjectReference tmor
= cb.getConnection()._service.ReconfigVM_Task(_virtualMachine, vmConfigSpec);
4 程序演示
4.1 客戶應用登陸運行結(jié)果顯示
如圖3所示。
4.2 客戶應用程序主界面展示
如圖4所示。
5 結(jié)束語
目前企事業(yè)單位的服務器虛擬化整合是數(shù)字化應用部署的一個趨勢,不僅可以有效地利用有限的設備經(jīng)費,還能夠滿足企事業(yè)單位應用服務種類的不斷增加、數(shù)據(jù)庫資源數(shù)量不斷增長的需求。而自己開發(fā)的客戶應用程序可以為用戶提供一個方便簡潔靈活的操作界面,實現(xiàn)與主服務端和虛擬中心服務器之間的交互,以達到從客戶需求的角度有效管理和使用整個計算機系統(tǒng)的目標。
參考文獻:
[1] vSphere Web Services SDK Programming Guide(vSphere Web Services SDK 4.0)[EB/OL].http://www.vmware.com/support/pubs/sdk_pubs.html.
[2] Developer’s Setup Guide(VMware vSphere Web Services SDK 4.0)[EB/OL].http://www.vmware.com/support/pubs/sdk_pubs.html.
[3] VMware vSphere簡介[EB/OL].http://www.vmware.com/support/pubs.html.
[4] 王石.精通Visual C#2005-語言基礎、數(shù)據(jù)庫系統(tǒng)開發(fā)、Web開發(fā)[M].北京:人民郵電出版社,2007.
[5] 金海,廖小飛.面向計算系統(tǒng)的虛擬化技術[J].中國基礎科學,2008(6):12-18.
[6] 金海等.計算系統(tǒng)虛擬化——原理與應用[M].北京:清華大學出版社,2008.