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

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