Hyper-V深度評測三:NUMA、可擴展性和監控方面的改進
譯文我們在前幾篇中已經相當全面地介紹了Hyper-V,著重介紹網絡功能方面的改進。現在不妨換個角度,介紹可擴展性方面的改進、NUMA方面的考量和虛擬機監控。
可擴展性
在與VMware曠日持久的競爭中,微軟2008/2008 R2版本中的虛擬機管理程序在數量方面有點落后對方,每個虛擬機只提供4個虛擬處理器,每個虛擬機“只有”64GB內存,在16個節點組成的集群中“只有”1000個虛擬機。
在該版本中,微軟致力于確保你今天擁有的任何物理服務器都能夠成功進行虛擬化處理(想一想大型SQL集群)。每個虛擬機最多可以有64個虛擬處理器和1 TB內存;一個集群可以擴展至64個節點,虛擬機總數最多有8000個。每個虛擬機最多可以連接260只虛擬硬盤(4只IDE和256只SCSI);那些虛擬硬盤文件每個容量可多達64 TB(理論極限是1.3 PB),采用新的VHDX文件格式。每個虛擬機最多還可以有8個合成網絡適配器(和另外4個原有的仿真網卡)以及連接至光纖通道存儲區域網(SAN)的最多4個虛擬光纖通道適配器(后面會有介紹)。這些擴展性方面的極限在生產負載環境下都經過了微軟的測試。
在我們關注主機服務器的可擴展性之前,自然有必要解釋處理器數量。在Hyper-V環境下,處理器上的一個核心算作一個邏輯處理器(LP);如果該處理器使用英特爾的超線程技術(使得每個核心如同2個核心),那么它被算作是2個LP。每個虛擬機被分配一個或多個虛擬處理器(vCPU);在之前的版本中,vCPU與LP之比是有限制的——這種比例在Windows Server 2012中不再適用。
在Server 2012中,每個Hyper-V主機最多可以有320個邏輯處理器,有多達1024個虛擬機同時運行,所有虛擬機上最多可以有2048個虛擬處理器。一個主機最多可以有4TB的內存。這些數字適用于提供Hyper-V的所有三個Server 2012版本:標準版、數據中心版和免費的Hyper-V服務器版。
不同版本的Windows Server 2012還都有同樣的全部功能;比如說,標準版現在隨帶故障切換集群(Failover Clustering)功能;它們之間的區別是,標準版隨帶2個Windows虛擬機的許可,而數據中心版隨帶無限制的虛擬機許可。所以,如果你需要在某一個主機上運行4個Windows虛擬機,就可以將兩個標準版許可證分配給那臺服務器,以滿足虛擬機許可方面的要求。免費的Hyper-V服務器版并不隨帶任何虛擬機許可,因而它是很適合VDI解決方案或Linux虛擬機的理想平臺。
你的NUMA怎樣?
這些可擴展性方面的數字使另一個問題顯得尤為突出:非一致性內存訪問(NUMA)。在大型機服務器領域(比如一臺有16個物理處理器的服務器,每個物理處理器有10個核心,運行超線程技術,就共有320個邏輯處理器,可能還有數TB內存),每個處理器無法快速訪問所有內存。系統而是被分成了多個NUMA節點;每個節點有一定數量的處理器核心和內存,這些內存具有緩存一致性,實現快速訪問;如果一個處理器上的線程需要訪問存儲在另一個NUMA節點的內存里面的數據,訪問速度就會大大減慢。由于Server 2008 R2存在的限制(每個虛擬機最多4個vCPU和64 GB內存),這對虛擬機來說不是個問題(不過有一個設置,允許虛擬機橫跨多個NUMA節點)。
不過在2012中,虛擬機知道并兼顧NUMA節點的邊界以便性能不受影響,這點很重要。這由可識別NUMA的Hyper-V來處理,而且把NUMA拓撲結構投射到虛擬機里面,那樣可識別NUMA的應用程序(如SQL Server和IIS)能夠優化其性能;這被稱為虛擬NUMA。請注意:如果你的虛擬機使用動態內存,那么虛擬NUMA被禁用;只有主機有8個以上的邏輯處理器和64GB以上的內存,虛擬NUMA才會啟動。
圖1:如果你的集群里面有大型主機機器,就要確保你認真研究了最佳NUMA拓撲結構。
Hyper-V使用ACPI靜態資源關聯表(SRAT),將NUMA拓撲結構呈現在虛擬機面前;這是一項行業標準,這意味著可識別NUMA的任何操作系統應該都能夠使用虛擬NUMA。Hyper-V可以自動檢測到主機上的NUMA拓撲結構,并相應配置設置;但是如果你的集群里面有不同年代、不同處理器數量和不同內存大小的服務器,就應該查閱硬件手冊,搞清楚每個主機的NUMA節點大小。然后,你應該將NUMA節點設置手動設成集群中最小的NUMA節點,這將確保把虛擬機實時遷移到不同節點不會導致虛擬機最后出現在NUMA配置比較小的主機上。如果投射到虛擬機中的虛擬NUMA節點大于主機上物理NUMA節點的實際大小,就會出現性能問題。
如果由于某種原因你對NUMA設置的手動變更導致了性能低下,你可以使用方便的Use Hardware Topology(使用硬件拓撲結構)按鈕,返回到主機上Hyper-V自動計算出來的設置值。
性能最重要
適應大型系統的另一個變化是Hyper-V預先啟動(Early Launch);Hyper-V會在操作系統之前啟動,向父分區(實際上是主機上運行的第一個虛擬機)只顯示前64個邏輯處理器,此舉為了避免Hyper-V受制于Windows Server本身的可擴展性限制。未經過更新的第三方管理工具會誤報你服務器中的核心數量,因為它們只能看到父分區看到的東西,但是有新的API可以獲得物理主機的實際處理器數量。
由于虛擬機現在支持許多vCPU,另一個問題浮出水面:獲得調度——指把執行的線程集合起來以提高多處理器性能的過程。在物理環境下,操作系統假設:如果它檢測到啟動時一定數量的處理器核心,它們總是可用來調度執行的線程,而在虛擬化環境下,不再是這樣子。由于微軟控制著Windows,它把一些組件添加到內核中,那樣虛擬機管理程序就能告訴虛擬機它在虛擬環境下運行,因而Windows Server 2008及以后版本不需要獲得調度,就很容易擴展vCPU的數量,而Windows Server 2003虛擬機只能有2個vCPU。微軟還把這些功能添加到了幫助編寫的Linux內核中。
注意:這是VSphere與Hyper-V的一個顯著區別;在VMware環境下,總是建議盡量減少vCPU的數量;只有在虛擬機果真要使用vCPU時,才分配vCPU。在Hyper-V(帶Linux和Windows Server 2008+虛擬機)下,分配多個vCPU并不會帶來任何“開銷”;要是該虛擬機不使用它們,其他虛擬機也會使用。
為集群打上補丁
隨著集群規模不斷更大,下面這種做法再也不實用了:從一個節點手動排出(drain)虛擬機,安裝所有授權的補丁,重啟服務器,然后為下一個節點重復這個過程。雖然SCVMM 2012提供了經過協調的打補丁機制,但Windows Server更進了一步,因為它為各種類型的集群,而不是只為Hyper-V集群提供了集群識別更新(CAU)。默認情況下,通過平常的WSUS或SCCM基礎設施,只安裝Windows Updates,但是微軟熱修復程序、甚至非微軟補丁都可以添加,只要借助一點PowerShell魔力和文件共享區。第三方開發商也能擴展CAU功能。集群經配置后,可以自我更新,而集群角色(以前名為集群服務)提供了協調機制,可按照計劃自動下載和安裝更新。
你還可以安排整個集群的任務,這些任務可以在集群中的所有節點上運行、在僅僅選擇的節點上運行,或者在擁有某個資源(比如虛擬機)的那個節點上運行。現在就算聯系不上域控制器(DC),集群也可以開啟,這對分支機構場合來說很方便,因為域控制器可能是集群中某個節點上的虛擬機;Hyper-V集群還支持只讀域控制器(RODC)。
在Windows Server 2012中,默認的集群配置是動態仲裁管理:節點處于離線狀態時,它會自動調整仲裁所需的投票(vote)數量,從而提供更好的彈性。在某個節點失效(非計劃停運)、在該節點上運行的虛擬機在集群其他節點上自動重啟的情況下,現在可以為每個虛擬機指定四種不同級別的故障切換優先級:高、中、低以及不進行故障切換。這樣一來,就有可能迎合由數據庫虛擬機和Web前端虛擬機組成的來賓集群;在這種情況下,前者需要在后者正確啟動之前運行。
現在只要通過用戶界面中的一個鼠標右擊選項,就可以通過實時遷移運行中的虛擬機,排出節點。
新的關聯(Affinity)和反關聯(Anti-Affinity)規則讓你可以定義:兩個虛擬機應該總是位于同一個主機上(比如確保應用程序與數據庫之間的高速訪問),或者兩個虛擬機從不放在同一個主機上(比如說同一Exchange數據庫可用性組即DAG的兩個成員),這尤其適用于虛擬機使用來賓集群為應用程序提供高可用性的場合。
虛擬機監控
到頭來,貴公司并不在乎底層硬件的狀態,也不在乎虛擬機管理程序或虛擬機里面的操作系統;重要的是應用程序及其健康狀況。System Center 2012 Operations Manager可通過管理包(Management Pack)密切關注硬件、主機和虛擬機的健康狀況,而來賓集群虛擬機可以為支持高可用性的應用程序提供高可用性。不過,無法集群起來,又沒有OM管理包的應用程序可以充分利用新的虛擬機監控功能。
虛擬機必須是安裝了2012 Integration Components和故障切換集群功能的Windows 2008 R2或2012;COM組件在虛擬機里面運行,通過心跳(hearbeat)服務與父分區中的虛擬機管理器服務(Virtual Machine Manager Service)進行聯系。收件箱功能可檢查指定服務的狀態;如果狀態很危急,虛擬機可以從容關閉,并重啟;下一次啟動后,虛擬機被實時遷移到另一個主機。
由于虛擬機到父分區的通信可能會引發安全和隱私問題,只更改一個比特,就表明應用程序處于危急狀態。虛擬機監控還可以由第三方來擴展,賽門鐵克公司已經展示了Symantec Application HA for Hyper-V,它增添了更主動的管理功能,可以重啟應用程序,甚至從備用映像恢復虛擬機,此外本身提供了故障排查步驟。