:::

學校實驗室的伺服器虛擬化方案評比(一):背景需求

2011-08-08_215458 manage virtual machine

我所在的教學單位實驗室中一直有著大量伺服器的需求,因此我最近開始研究起虛擬機器技術。這一篇事先敘述為什麼實驗室需要伺服器虛擬化方案來解決伺服器的需求,以及一些基本的虛擬機器相關技術名詞。

本篇要講的內容頗多,我預計拆成三篇文章來敘述,這一篇主要描述背景需求與相關名詞解釋。

背景需求

我們實驗室在進行實驗時,往往會需要伺服器來安裝網站、提供服務,主要使用的作業系統是Windows(因為很多系統是以ASPMSSQL實作),此外普通架站時常常使用的則是Linux。另一方面,在學生畢業之後,我們也要典藏學校畢業論文的系統,供後續研究發展的用途。

但是不管實驗室經費再多,伺服器的數量也不能滿足永無止盡的實驗、典藏需求。所以我們需要借助伺服器虛擬化方案的力量,將不常用、測試用的伺服器需求轉換成虛擬機器來運作,以達到節省經費成本、機器空間的效益。

具體來說,這種伺服器虛擬化的需求有兩種:一種是實驗用的短時間伺服器,可以讓人在虛擬機器裡面胡搞瞎搞,搞壞了也不會影響到其他虛擬機器的運作;另一種是展示用的長時間伺服器,這是在偶爾需要展示系統功能一下時才會連線使用的系統,效能不是第一考量,但需要長時間保持運作、易於備份才行。

由於我們是教育單位的實驗室,人力跟經費都不比外面的企業公司,因此方案的考量點都是開放原始碼、免費的方案為主。

目前我打算將虛擬機器架在一台老舊的伺服器上,它連VT-x / AMD-V的硬體協助虛擬化技術都沒有,這會造成之後選擇虛擬化方案上的限制。

在網路環境方面,這邊要配置獨立、公開的IP才能連線到網際網路。然而大部分伺服器虛擬化方案的前提,都在於已經有大量IP可以使用,或是已經架設在有DHCP服務的內部網路中、可透過NAT路由器進行連接埠轉遞。這些差異在之後評比時會再進行說明。

最後,最麻煩的是人力方面。這邊並不是理工科系,不太能期待學生能擁有網管的技能。學生一屆一屆地交替,複雜的管理技術也會難以轉交。因此整個伺服器虛擬化方案必須簡單,能夠有圖形化介面進行操作,盡量不用記憶文字型指令。

基於以上背景需求,我大概花了一週多的時間研究、比較各種伺服器虛擬化方案的運作方式。比較其優缺點,並從中決定最後要採用的最佳方案。

而接下來幾篇也就是記錄各種伺服器虛擬化方案的評比過程。


名詞解釋

由於本篇會用到一些虛擬機器與網路技術的專有名詞,在此先解釋一下常用名詞的意思。

主端電腦 / 客端電腦 (HostOS / GuestOS)

在虛擬機器的角色中,用來安裝虛擬機器軟體的作業系統稱為主端電腦(Host OS),被模擬出來、安裝在虛擬機器上的作業系統,稱為客端電腦(Guest OS)。我們通常是在一個主端電腦上建立多個客端電腦的虛擬機器提供服務。

而在伺服器虛擬化方案中,常常會將多台主端電腦結合成一個集叢(Cluster),以進行即時遷移、高可用等技術的實作。

名詞解釋:虛擬化技術

本篇評比的方案中,大致上會用到幾種虛擬化技術。

全虛擬化(Full-Virtualization)

虛擬機器軟體模擬出所有硬體設備與可操作的指令,客端電腦安裝在虛擬機器時就像是安裝在一個普通的機器硬體上。VMware、VirtualBox都是採用這種全虛擬化技術。

客端電腦發出的硬體指令會經過擷取、轉換,並於主端電腦上實作,虛擬化的效能較差。相對的,全虛擬化可以模擬出完整的電腦環境,可以安裝的客端電腦種類也比較多,不論是Linux或Windows都可以安裝。

半虛擬化(Para-Virtualization)

虛擬機器軟體模擬出部分硬體設備與指令,而部分硬體不進行模擬、客端電腦會直接使用主端電腦的硬體。因為這種部分硬體模擬的方式,所以中文常以「半虛擬化」稱之。英文原名的意思是「在旁邊的虛擬化」,意思是客端電腦的執行實際上是部分仰賴於主端電腦的虛擬化。

為了讓客端電腦能夠順利融入主端電腦中並進行半虛擬化的作業,通常需要修改客端電腦的核心。這通常是半虛擬化為人所詬病的缺點。但有人認為半虛擬化中客端電腦可以直接操作硬體,因此虛擬化損耗的效能較低、運作效率較高。

硬體協助虛擬化 Intel VT-x / AMD-V

在x86虛擬化的硬體支援中,Intel跟AMD都個別開發出虛擬化擴充的功能。他們彼此並不直接相容,但大部分功能卻都相同。VT-x / AMD-V技術可以讓主端電腦擷取客端電腦發出的低特權態部件的敏感指令,因此半虛擬化技術就不需要修改客端電腦的核心、全虛擬化也不用轉換客端電腦的執行代碼,這種硬體協助技術在某些方面來說可視為已經抵消了這兩種虛擬化技術的差別,而都可以視為全虛擬化技術。

藉由VT-x / AMD-V的協助,XenKVM等多種虛擬機器就能夠以全虛擬化模擬或是支援64位元的客端電腦。

然而,由於VT-x / AMD-V允許客端主機對記憶體的直接取用(Direct Memory Access,DMA),容易造成安全管理上的問題。因此Citrix XenServerMicorsoft Hyper-VVMware ESX等不同虛擬化方案會在系統服務安全上有著不同的性質,這也是他們之間會有明顯差異的地方。

容器虛擬化(Container-based virtualization)

容器虛擬化是在主端電腦中將部分資源、程序區隔成獨立的虛擬環境。容器中的客端電腦與主端電腦一樣的硬體設備,但是與主端電腦、其他客端電腦之間有很好的隔離性與安全性。

OpenVZ是容器虛擬化技術中相當知名的開放原始碼專案,它不需依賴硬體虛擬化技術VT-x / AMD-V的支援,可攜性也很高,而且允許你在客端電腦執行中直接動態調整客端電腦的資源(硬碟大小、記憶體等)。有不少人認為容器虛擬化的效能相當地高。

容器虛擬化技術要建立虛擬機器時,通常是要從虛擬裝置(Virtual Appliance),或是樣板(Template)中建立。例如你可以下載一個CentOS作業系統的虛擬裝置,然後基於這個虛擬裝置來建立一個全新、可以馬上執行的CentOS──大概只要三分鐘。

容器虛擬化最大的限制在於支援的作業系統很少、可選擇的類型不多,OpenVZ就只能從Linux主端電腦去模擬Linux客端電腦,並不能使用Windows。

      名詞解釋:虛擬機器應用

      有些與虛擬機器安裝、建立、操作時的相關技術名詞,在此也先解釋定義。

      空機安裝(Bare-metal installer)

      空機安裝是指在電腦上透過光碟或網路直接進行安裝,架設起一個包含作業系統與虛擬機器的完整電腦,這樣就不需要仰賴其他作業系統。

      為了讓伺服器虛擬化能夠穩定運作,主端電腦盡量是精簡服務、專心在虛擬機器運作上就好。空機安裝採用了預先規劃好的作業系統與虛擬機器服務設定,提供必要的功能,也減少安裝時額外設定的麻煩。

      許多方案都有提供空機安裝的ISO光碟映像檔。就像安裝普通的作業系統一樣,你可以把空機安裝的ISO檔燒成光碟、放到實體電腦光碟機上安裝,也可以掛載到虛擬機器上、在虛擬機器進行空機安裝。

      空機安裝的系統通常包括作業系統與虛擬機器軟體。有些開放原始碼專案的作業系統是採用常見的CentOS、Debian等Linux發佈版,允許使用者能再作業系統上加工。也有的作業系統單一功能的精簡版,除了虛擬化工作與基本設定之外沒有什麼能夠調整的地方,就像安裝了一個嵌入式系統一樣,例如VMware ESXi。

      虛擬裝置 / 樣板(Virtual Appliance / Template)

      將虛擬機器打包之後供人下載、使用,這就是一個「虛擬裝置」(Virtual Appliance),通常翻譯成「虛擬設備」。虛擬裝置就像是一台完整的、可以獨立運作的客端電腦,你只需要把它放到主端電腦中,以虛擬機器開啟、設定一下參數與網路,就能夠直接使用。

      在容器虛擬化的OepnVZ或半虛擬化的Xen中,通常是稱之為「樣板」(Template)。使用者可以以一個樣板為基礎產生多台同時運作的客端電腦。

      VMware的虛擬裝置市場有著1799個虛擬裝置可供下載,OpenVR也有許多Linux作業系統的樣板,而Proxmox也提供了各種網站伺服器的虛擬裝置

      利用虛擬裝置快速建立客端電腦,比起從光碟安裝作業系統更有效率。有些對應的技術也可將客端電腦轉換成虛擬裝置或樣板,供大量配置使用。

      虛擬機器主控台(Virtual Machine Console)

      2011-08-09_150658 console - mask

      VMware vShpere Client的虛擬機器主控台,裡面是一個Windows的虛擬機器。

      虛擬機器的操作介面稱為主控台(Console)。有些虛擬機器會模擬顯示卡,因此主控台可以看到漂亮的圖形化操作介面,類似平常我們在實體機器與螢幕上操作電腦一樣。但也有些虛擬機器並不模擬顯示卡,操作全部都以無頭模式(Headless Mode)進行,你只能在僅有鍵盤的情況以文字指令操作客端電腦。雖然這大致上跟Linux的指令列模式差不多。

      而主端電腦虛擬機器顯示客端電腦主控台畫面的方式有很多種,通常可以在虛擬機器管理介面開啟,VirtualBox可以用特有的VRDP虛擬遠端桌面協定,用Windows的遠端桌面開啟客端電腦的主控台。

      主控台為了模擬真實的操作環境,有時候會在開啟時捕捉鍵盤與滑鼠的操作。被捕捉的鍵盤與滑鼠只能在客端電腦主控台中進行操作,要脫離捕捉狀態時必須按下特殊按鍵組合,以VMware來說就是「Ctrl + Alt」。而虛擬機器無法捕捉特殊的按鍵組合「Ctrl + Alt + Del」(這會在Windows伺服器登入時使用),因此會有一些功能按鈕可以讓使用直接送出這個組合。

      似乎很少虛擬機器相關技術會在意這個基本的功能,但我真的覺得不同方案的主控台技術之間有很大的差異。

      名詞解釋:虛擬機器與網路

      虛擬內部網路(Virtual Intranet Network)

      許多方案都能夠建立虛擬的網路環境,就像是建立一個虛擬的交換器(switch),讓虛擬機器的網路卡與他連線,進而構築出複雜的網路結構。VMware及某些方案稱之為「vSwitch」,VirtualBox稱之為「Internal Network」(intnet),使用起來差不多都是類似的概念。

      橋接網路(Bridged Network)

      在這種網路型態之下,客端電腦會透過虛擬橋接器與主端電腦的實體網卡相連接。在這個網域中,主端電腦跟客端電腦都會被視為兩台獨立的電腦,可以各別配給IP、連上網路。

      NAT (Network Address Traslation)

      NAT是路由器常使用的技術,通常會搭配DHCP服務、連接埠轉遞機制一起使用。

      VirtualBox提供了NAT的網路模式,客端電腦會連到VirtualBox建立的虛擬路由器上,由虛擬路由器透過DHCP配給客端電腦內部IP,客端電腦責是透過虛擬路由器連線到網際網路。當網際網路的電腦要連到客端電腦時,則需要搭配連接埠轉遞機制,將指定的連接埠轉移到客端電腦中。

      NAT的網路功能不僅在個人使用時很容易就能建立一個可以連上網際網路的客端電腦(相較之下,其他模式都要自行指定IP),更可以讓你只要用一個IP、多個不同的連接埠,就能同時讓許多客端電腦提供服務。但是在伺服器虛擬化方案中,幾乎看不到內建NAT網路的功能。

      名詞解釋:伺服器虛擬化應用

      要進行大量虛擬機器的管理時,必須配合多種網路技術搭配,才能做到服務穩定、容易管理的目標,也是各個方案都想要實作的技術。在此舉兩個常見的技術:

      遷移(migration)

      遷移是讓伺服器管理者將虛擬機器轉移到不同的實體主端電腦上。當主端電腦需要維修、停機時,遷移功能可以快速將虛擬機器轉移到其他主端電腦再繼續執行。

      要進行遷移的先決條件是要有多台具有虛擬機器軟體的主端電腦。大部分的伺服器虛擬化方案中,遷移是在特定的管理介面中進行。你必須要先將多台主端電腦都結集成叢集,而且需要準備一個遷移時暫存的空間,這樣才能進行遷移的動作。

      即時遷移(Live migration)則強調遷移過程中虛擬機器運作不會中斷,而客戶端的網路服務也不會因此斷線。由於這還牽涉到網路技術,因此並不只是單純的虛擬化技術就能完成。許多伺服器虛擬化方案都會強調他們具有即時遷移的功能,而成為各家競爭的賣點之一。

      高可用性(High Availability,簡稱HA)

      高可用性是指為了縮短日常維護操作和突發系統崩潰的停機時間,配置多個相同的系統,而在其中某些停機的時候短時間內轉移到其他可用的系統中。

      在網路架構中,高可用性通常會與負載平衡、同步備份、服務監控與故障排除等技術一起使用。而在虛擬機器應用上,可以輕易地部屬多台相同功能與內容的虛擬機器,而以低成本實現高可用性的優勢。在伺服器虛擬化方案中,高可用性也是各家主打的賣點之一。