Hyper-V深度評測三:NUMA、可擴展性和監(jiān)控方面的改進
譯文我們在前幾篇中已經(jīng)相當全面地介紹了Hyper-V,著重介紹網(wǎng)絡(luò)功能方面的改進。現(xiàn)在不妨換個角度,介紹可擴展性方面的改進、NUMA方面的考量和虛擬機監(jiān)控。
可擴展性
在與VMware曠日持久的競爭中,微軟2008/2008 R2版本中的虛擬機管理程序在數(shù)量方面有點落后對方,每個虛擬機只提供4個虛擬處理器,每個虛擬機“只有”64GB內(nèi)存,在16個節(jié)點組成的集群中“只有”1000個虛擬機。
在該版本中,微軟致力于確保你今天擁有的任何物理服務(wù)器都能夠成功進行虛擬化處理(想一想大型SQL集群)。每個虛擬機最多可以有64個虛擬處理器和1 TB內(nèi)存;一個集群可以擴展至64個節(jié)點,虛擬機總數(shù)最多有8000個。每個虛擬機最多可以連接260只虛擬硬盤(4只IDE和256只SCSI);那些虛擬硬盤文件每個容量可多達64 TB(理論極限是1.3 PB),采用新的VHDX文件格式。每個虛擬機最多還可以有8個合成網(wǎng)絡(luò)適配器(和另外4個原有的仿真網(wǎng)卡)以及連接至光纖通道存儲區(qū)域網(wǎng)(SAN)的最多4個虛擬光纖通道適配器(后面會有介紹)。這些擴展性方面的極限在生產(chǎn)負載環(huán)境下都經(jīng)過了微軟的測試。
在我們關(guān)注主機服務(wù)器的可擴展性之前,自然有必要解釋處理器數(shù)量。在Hyper-V環(huán)境下,處理器上的一個核心算作一個邏輯處理器(LP);如果該處理器使用英特爾的超線程技術(shù)(使得每個核心如同2個核心),那么它被算作是2個LP。每個虛擬機被分配一個或多個虛擬處理器(vCPU);在之前的版本中,vCPU與LP之比是有限制的——這種比例在Windows Server 2012中不再適用。
在Server 2012中,每個Hyper-V主機最多可以有320個邏輯處理器,有多達1024個虛擬機同時運行,所有虛擬機上最多可以有2048個虛擬處理器。一個主機最多可以有4TB的內(nèi)存。這些數(shù)字適用于提供Hyper-V的所有三個Server 2012版本:標準版、數(shù)據(jù)中心版和免費的Hyper-V服務(wù)器版。
不同版本的Windows Server 2012還都有同樣的全部功能;比如說,標準版現(xiàn)在隨帶故障切換集群(Failover Clustering)功能;它們之間的區(qū)別是,標準版隨帶2個Windows虛擬機的許可,而數(shù)據(jù)中心版隨帶無限制的虛擬機許可。所以,如果你需要在某一個主機上運行4個Windows虛擬機,就可以將兩個標準版許可證分配給那臺服務(wù)器,以滿足虛擬機許可方面的要求。免費的Hyper-V服務(wù)器版并不隨帶任何虛擬機許可,因而它是很適合VDI解決方案或Linux虛擬機的理想平臺。
你的NUMA怎樣?
這些可擴展性方面的數(shù)字使另一個問題顯得尤為突出:非一致性內(nèi)存訪問(NUMA)。在大型機服務(wù)器領(lǐng)域(比如一臺有16個物理處理器的服務(wù)器,每個物理處理器有10個核心,運行超線程技術(shù),就共有320個邏輯處理器,可能還有數(shù)TB內(nèi)存),每個處理器無法快速訪問所有內(nèi)存。系統(tǒng)而是被分成了多個NUMA節(jié)點;每個節(jié)點有一定數(shù)量的處理器核心和內(nèi)存,這些內(nèi)存具有緩存一致性,實現(xiàn)快速訪問;如果一個處理器上的線程需要訪問存儲在另一個NUMA節(jié)點的內(nèi)存里面的數(shù)據(jù),訪問速度就會大大減慢。由于Server 2008 R2存在的限制(每個虛擬機最多4個vCPU和64 GB內(nèi)存),這對虛擬機來說不是個問題(不過有一個設(shè)置,允許虛擬機橫跨多個NUMA節(jié)點)。
不過在2012中,虛擬機知道并兼顧NUMA節(jié)點的邊界以便性能不受影響,這點很重要。這由可識別NUMA的Hyper-V來處理,而且把NUMA拓撲結(jié)構(gòu)投射到虛擬機里面,那樣可識別NUMA的應(yīng)用程序(如SQL Server和IIS)能夠優(yōu)化其性能;這被稱為虛擬NUMA。請注意:如果你的虛擬機使用動態(tài)內(nèi)存,那么虛擬NUMA被禁用;只有主機有8個以上的邏輯處理器和64GB以上的內(nèi)存,虛擬NUMA才會啟動。

圖1:如果你的集群里面有大型主機機器,就要確保你認真研究了最佳NUMA拓撲結(jié)構(gòu)。
Hyper-V使用ACPI靜態(tài)資源關(guān)聯(lián)表(SRAT),將NUMA拓撲結(jié)構(gòu)呈現(xiàn)在虛擬機面前;這是一項行業(yè)標準,這意味著可識別NUMA的任何操作系統(tǒng)應(yīng)該都能夠使用虛擬NUMA。Hyper-V可以自動檢測到主機上的NUMA拓撲結(jié)構(gòu),并相應(yīng)配置設(shè)置;但是如果你的集群里面有不同年代、不同處理器數(shù)量和不同內(nèi)存大小的服務(wù)器,就應(yīng)該查閱硬件手冊,搞清楚每個主機的NUMA節(jié)點大小。然后,你應(yīng)該將NUMA節(jié)點設(shè)置手動設(shè)成集群中最小的NUMA節(jié)點,這將確保把虛擬機實時遷移到不同節(jié)點不會導(dǎo)致虛擬機最后出現(xiàn)在NUMA配置比較小的主機上。如果投射到虛擬機中的虛擬NUMA節(jié)點大于主機上物理NUMA節(jié)點的實際大小,就會出現(xiàn)性能問題。
如果由于某種原因你對NUMA設(shè)置的手動變更導(dǎo)致了性能低下,你可以使用方便的Use Hardware Topology(使用硬件拓撲結(jié)構(gòu))按鈕,返回到主機上Hyper-V自動計算出來的設(shè)置值。
性能最重要
適應(yīng)大型系統(tǒng)的另一個變化是Hyper-V預(yù)先啟動(Early Launch);Hyper-V會在操作系統(tǒng)之前啟動,向父分區(qū)(實際上是主機上運行的第一個虛擬機)只顯示前64個邏輯處理器,此舉為了避免Hyper-V受制于Windows Server本身的可擴展性限制。未經(jīng)過更新的第三方管理工具會誤報你服務(wù)器中的核心數(shù)量,因為它們只能看到父分區(qū)看到的東西,但是有新的API可以獲得物理主機的實際處理器數(shù)量。
由于虛擬機現(xiàn)在支持許多vCPU,另一個問題浮出水面:獲得調(diào)度——指把執(zhí)行的線程集合起來以提高多處理器性能的過程。在物理環(huán)境下,操作系統(tǒng)假設(shè):如果它檢測到啟動時一定數(shù)量的處理器核心,它們總是可用來調(diào)度執(zhí)行的線程,而在虛擬化環(huán)境下,不再是這樣子。由于微軟控制著Windows,它把一些組件添加到內(nèi)核中,那樣虛擬機管理程序就能告訴虛擬機它在虛擬環(huán)境下運行,因而Windows Server 2008及以后版本不需要獲得調(diào)度,就很容易擴展vCPU的數(shù)量,而Windows Server 2003虛擬機只能有2個vCPU。微軟還把這些功能添加到了幫助編寫的Linux內(nèi)核中。
注意:這是VSphere與Hyper-V的一個顯著區(qū)別;在VMware環(huán)境下,總是建議盡量減少vCPU的數(shù)量;只有在虛擬機果真要使用vCPU時,才分配vCPU。在Hyper-V(帶Linux和Windows Server 2008+虛擬機)下,分配多個vCPU并不會帶來任何“開銷”;要是該虛擬機不使用它們,其他虛擬機也會使用。
為集群打上補丁
隨著集群規(guī)模不斷更大,下面這種做法再也不實用了:從一個節(jié)點手動排出(drain)虛擬機,安裝所有授權(quán)的補丁,重啟服務(wù)器,然后為下一個節(jié)點重復(fù)這個過程。雖然SCVMM 2012提供了經(jīng)過協(xié)調(diào)的打補丁機制,但Windows Server更進了一步,因為它為各種類型的集群,而不是只為Hyper-V集群提供了集群識別更新(CAU)。默認情況下,通過平常的WSUS或SCCM基礎(chǔ)設(shè)施,只安裝Windows Updates,但是微軟熱修復(fù)程序、甚至非微軟補丁都可以添加,只要借助一點PowerShell魔力和文件共享區(qū)。第三方開發(fā)商也能擴展CAU功能。集群經(jīng)配置后,可以自我更新,而集群角色(以前名為集群服務(wù))提供了協(xié)調(diào)機制,可按照計劃自動下載和安裝更新。
你還可以安排整個集群的任務(wù),這些任務(wù)可以在集群中的所有節(jié)點上運行、在僅僅選擇的節(jié)點上運行,或者在擁有某個資源(比如虛擬機)的那個節(jié)點上運行。現(xiàn)在就算聯(lián)系不上域控制器(DC),集群也可以開啟,這對分支機構(gòu)場合來說很方便,因為域控制器可能是集群中某個節(jié)點上的虛擬機;Hyper-V集群還支持只讀域控制器(RODC)。
在Windows Server 2012中,默認的集群配置是動態(tài)仲裁管理:節(jié)點處于離線狀態(tài)時,它會自動調(diào)整仲裁所需的投票(vote)數(shù)量,從而提供更好的彈性。在某個節(jié)點失效(非計劃停運)、在該節(jié)點上運行的虛擬機在集群其他節(jié)點上自動重啟的情況下,現(xiàn)在可以為每個虛擬機指定四種不同級別的故障切換優(yōu)先級:高、中、低以及不進行故障切換。這樣一來,就有可能迎合由數(shù)據(jù)庫虛擬機和Web前端虛擬機組成的來賓集群;在這種情況下,前者需要在后者正確啟動之前運行。
現(xiàn)在只要通過用戶界面中的一個鼠標右擊選項,就可以通過實時遷移運行中的虛擬機,排出節(jié)點。
新的關(guān)聯(lián)(Affinity)和反關(guān)聯(lián)(Anti-Affinity)規(guī)則讓你可以定義:兩個虛擬機應(yīng)該總是位于同一個主機上(比如確保應(yīng)用程序與數(shù)據(jù)庫之間的高速訪問),或者兩個虛擬機從不放在同一個主機上(比如說同一Exchange數(shù)據(jù)庫可用性組即DAG的兩個成員),這尤其適用于虛擬機使用來賓集群為應(yīng)用程序提供高可用性的場合。
虛擬機監(jiān)控
到頭來,貴公司并不在乎底層硬件的狀態(tài),也不在乎虛擬機管理程序或虛擬機里面的操作系統(tǒng);重要的是應(yīng)用程序及其健康狀況。System Center 2012 Operations Manager可通過管理包(Management Pack)密切關(guān)注硬件、主機和虛擬機的健康狀況,而來賓集群虛擬機可以為支持高可用性的應(yīng)用程序提供高可用性。不過,無法集群起來,又沒有OM管理包的應(yīng)用程序可以充分利用新的虛擬機監(jiān)控功能。
虛擬機必須是安裝了2012 Integration Components和故障切換集群功能的Windows 2008 R2或2012;COM組件在虛擬機里面運行,通過心跳(hearbeat)服務(wù)與父分區(qū)中的虛擬機管理器服務(wù)(Virtual Machine Manager Service)進行聯(lián)系。收件箱功能可檢查指定服務(wù)的狀態(tài);如果狀態(tài)很危急,虛擬機可以從容關(guān)閉,并重啟;下一次啟動后,虛擬機被實時遷移到另一個主機。
由于虛擬機到父分區(qū)的通信可能會引發(fā)安全和隱私問題,只更改一個比特,就表明應(yīng)用程序處于危急狀態(tài)。虛擬機監(jiān)控還可以由第三方來擴展,賽門鐵克公司已經(jīng)展示了Symantec Application HA for Hyper-V,它增添了更主動的管理功能,可以重啟應(yīng)用程序,甚至從備用映像恢復(fù)虛擬機,此外本身提供了故障排查步驟。