在計算機世界我們隨處可以見的一種方法,那就是抽象。1946年馮諾依曼提出了計算機的基本結構包含:計算器,存儲器和I/O設備。這可能是對計算機這一新生事物最重要的一次抽象,它直接影響了今后幾十年計算機軟硬件的發展。我們每個人對計算機的計算器,存儲器和I/O設備都有不同的認知,你可能不認識所有計算芯片,不了解各種存儲設備和輸入輸出設備,但是這絕對不會阻礙你區分出它們來。計算機系統中的各個部分可能是不可或缺的,但一定是可以替換的,這就是抽象的力量。沒有抽象,我們可能要為每一套硬件開發不同的操作系統,要為每一種操作系統開發不同的應用程序,那簡直是不可想象的事情。
當然事情發展到今天,我們依然覺得軟硬件系統種類太多了,我們需要新的層次上的抽象。虛擬化就是一個抽象的過程,是對軟硬件資源的進行抽象的過程。虛擬化的目的之一是讓上層無需感知下層的差異,並提供統一的接口以備上層使用下層資源。
理想狀態下的硬件虛擬化要實現的也許就是對硬件不受任何限制的使用,應用程序無需感知計算、存儲和網絡等硬件設備的差異而能夠充分利用硬件資源。但是現實的情況,我們還是需要考慮或多或少考慮硬件的限制的。接下來我們先來考慮硬件虛擬化中,最關鍵的角色——存儲。
一、存儲發展現狀
對於存儲每個人都會有直觀的認識,從紙帶、軟盤、光盤到硬盤。根據馮諾依曼的計算機結構理論,存儲的概念就如同字面一樣簡單,就是任何可用於存儲數據的設備,也如同這一抽象的獨立的概念,存儲設備在計算機結構中甚至是可以相對獨立的。隨着網絡的發展,存儲不再局限於計算機外殼的內部,網絡存儲在服務器領域日益成為主流。
在存儲設備中最重要的應該是硬盤,對硬盤的讀寫速度、容量和質量的追求,硬盤技術幾經變遷。單從與主板的接口標准上分就有ATA(IDE)、SATA、SCSI、SAS、FC和Infiniband之多,他們在接口、傳輸媒介和協議上都存在一定區別。其中ATA接口常連接大家熟悉的IDE設備;SATA(Serial ATA)是串行ATA;SAS(Serial Attached SCSI)是串行SCSI;SATA與SAS是孿生兄弟,SATA硬盤可以連接SAS接口,反之卻不兼容;FC(Fiber Channel)是光纖通道,光纖通道其實不一定使用光纖,也可以使用銅質電纜。需要詳細了解各接口技術細節請google之。
隨着網絡存儲的發展,區分出了DAS (Direct-Attached Storage) 、NAS(Network Attached Storage)、SAN(Storage Area Network)等存儲模式。下圖是他們之間的比較,其中每個虛線框表示為一個相對獨立的整體,箭頭左側描述的是一種接口或者連接方式,右側描述的是實現存儲的技術方案。圖中所顯示的只是各個模式中最為簡單的組織或連接方式。DAS中File System連接Storage的方式不僅僅限於機器內部各種接口和線纜(如計算機連接內置SAS硬盤),也可以是外部的接口和線纜(如通過外部SAS線纜連接存儲),這樣情況就會變得復雜了,NAS或SAN作為整體可以容易成為DAS的一部分。但DAS與其他二者的最大不同在於DAS不需要網絡的支持。NAS和SAN最初的最大區別在於NAS是基於文件的存儲,而SAN是基於數據塊的存儲。NAS存儲更多表現為獨立的文件服務器,但SAN更多表現的像是一塊磁盤,因而SAN可以成為NAS網絡中更加底層的那一部分。
最后是分布式存儲,簡單來說分布式存儲充分利用廉價的硬件設施,在操作系統之上實現了對存儲的抽象。分布式存儲暫時與本文討論無關,今后另開篇討論。
二、Windows Server 2012 操作系統的存儲特性
接下來,我們來看看Windows Server 2012對支持存儲虛擬化的幾項重要改進。在Windows Server 2012中新增和改進許了多存儲特性實現對存儲虛擬化的支持,其中最為引人關注的是iSCSI目標服務器、SMB3.0和存儲空間。Windows Server 2012及其集群可以容易實現目前主流的存儲方案用於測試或生產環境,並且微軟還有一套自己特有的基於文件服務器及文件服務器集群(SMB3.0和存儲空間技術)的存儲解決方案。
1、iSCSI目標服務器
iSCSI(Internet Small Computer System Interface)即Internet小型計算機系統接口。iSCSI在服務器與存儲系統之間使用以太網連接,基於TCP/IP協議封裝傳輸SCSI指令和數據,創建IP SAN。iSCSI和IP SAN應該是目前最具性價比的存儲解決方案了。
在Windows Server 2012 中,iSCSI目標服務器(iSCSI Software Target Server)成為一個內建於文件與存儲服務下的一個服務器角色,集成在服務器管理器中,不再需要額外下載安裝(之前的Server版本都需要下載獨立安裝包進行安裝),因此部署與更新變得更加簡單。查找文檔后我們發現iSCSI 目標服務器可提供下列服務:
- 網絡和無磁盤啟動:通過使用支持啟動的網絡適配器或軟件加載程序,可以快速部署成百上千個無磁盤服務器。使用差異虛擬磁盤,你可以節省多達90%的操作系統映像存儲空間。這對於相同操作系統映像的大型部署很有用,如部署大型機房或者在大規模集群中部署服務器。
- 服務器應用程序存儲:某些應用程序需要塊存儲(例如 Hyper-V 和 Exchange Server)。iSCSI 目標服務器可以為這些應用程序提供持續可用的塊存儲。由於存儲可以遠程訪問,因此還可以合並中心或分支機構位置的塊存儲。這個是iSCSI的最重要的功能。
- 異類存儲:iSCSI 目標服務器支持非 Windows iSCSI 發起程序,以便能夠在混合軟件環境中共享的 Windows Server 上存儲。
- 開發、測試、演示和實驗室環境:當啟用 iSCSI 目標服務器角色服務時,它會將任何 Windows Server 轉變為可通過網絡訪問的塊存儲設備。存儲陣列一般非常昂貴,測試環境中我們可以使用部署iSCSI目標服務器角色的Windows Server計算機來充當這樣的存儲設備。這個功能非常實用,如果想進行虛擬化測試卻苦於沒有獨立的存儲陣列,可以使用iSCSI目標服務器服務可以讓任何一台安裝Window Server的服務器成為存儲陣列。
由上可見,如果不考慮高性能iSCSI目標服務器生產環境中還是有用武之地的,在測試環境中更是不可或缺的幫手。另外iSCSI目標服務器可以配置成為Windows Server 2012故障轉移集群的集群角色,同時通過配置MPIO實現高可以性。這里向iSCSI目標服務器發起連接與向其他iSCSI設備發起連接並沒有什么不同。
2、文件服務器/SMB3.0
在Windows Server 2012中,文件服務器是另一個重要服務器角色。訪問文件服務器有兩個可選協議:NFS(Network File System)和SMB(Server Message Block) / CIFS(Common Internet File System )協議。在配置文件服務器的時候會要求進行選擇,我們來看看他們的區別:
- NFS最早由SUN公司開發,是最常見的網絡文件共享協議。NFS允許系統將其目錄和文件共享給網絡上的其他系統。用戶和應用程序可以像訪問本地文件一樣訪問遠程系統上的文件。NFS更多應用在Unix或類Unix系統中,當然Windows也支持該協議。
- SMB最早源自IBM,但隨后Microsoft對其提供支持和改進,最初SMB是基於NetBIOS建立一個文件共享協議,但為將SMB擴展到Internet上,擺脫對NetBIOS的依賴,微軟對SMB協議進行整理,並重命名為CIFS。Windows網絡環境的核心是SMB/CIFS,許多Microsoft系的網絡應用都可以基於SMB/CIFS協議,包括在Windows系統之間的文件共享,在Unix類系統上要為Windows客戶提供文件共享服務就需要實現SMB/CIFS協議,例如Samba。
SMB3.0是SMB最新版本,提供了許多新功能,如:SMB透明故障轉移,SMB多通道,SMB直連(SMB Direct)等。SMB3.0能夠在以太網上實現1Gbps的文件訪問速度,從而能匹敵DAS的性能。因而在Windows網絡環境中,SMB可以作為替代iSCSI的另一個選擇。
在Windows Server 2012中文件服務器也可以配置成為Windows Server 2012故障轉移集群的集群角色,為滿足不同應用對文件服務器的需要,集群角色配置過程中也有基於NFS和SMB的多種可選方案。
Windows Server虛擬化的核心Hyper-V服務器對與存儲網絡的要求很高,這里我們有多種選擇:雖然Hyper-V的虛擬機可以部署於DAS、NAS或SAN存儲中,但為了實現高可用性,基於SAN是最常見(基於iSCSI的IP SAN和基於FC通道的FC SAN),現在還可以選擇基於文件服務器集群的Hyper-V over SMB(小型網絡中可以配合使用下文中將要提到的“存儲空間”特性),后文將實現它。
3、存儲空間
存儲空間是Windows Server 2012中的一個新特性,它提供了一種高效便捷的存儲虛擬化解決方案。
簡單來說,它可以將符合標准的存儲設備,放入存儲池中並進行虛擬化,創建稱為存儲空間的虛擬磁盤。目前符合標准的存儲設備包括通過ATA、SATA、SCSI、SAS直接連接的磁盤或JBOD磁盤陣列,甚至也可以是通過USB連接的存儲設備,但不可以是那些經過虛擬化和分層的磁盤,比如VHDs虛擬磁盤、虛擬機中的直通磁盤、RAID陣列等,另外存儲池也不支持iSCSI和FC光纖通道。
再簡單來說,存儲空間實現類似RAID卡那樣的功能,但實現的層級是在操作系統上,而不是在硬件上,這就是所謂的軟件定義存儲的實現吧。
如果存儲設備中存在RAID卡,那么只能將RAID的所有功能禁用(如果允許禁用的話)才可能兼容存儲空間特性,這樣其實是一種浪費。因而采用存儲空間的虛擬化方案,就不需要采購帶RAID控制器的磁盤陣列,而直接采購JBOD磁盤櫃就可以了,省不少錢。
如下官網上的示意圖已經清楚的展示的存儲空間相關概念:
在存儲空間中建立的虛擬磁盤是一種彈性存儲,虛擬磁盤定義好后無法改變存儲布局(即無法在Simple、Mirror和Parity模式中自由切換)和提供方式(Thin和Fixed),但是可以調整容量。微軟提供了三種存儲布局,類似RAID的幾種級別,TEDNET上的定義是:
- 簡單(Simple):數據跨物理磁盤條帶化,這最大化了容量並提高了吞吐量,但降低了可靠性。這種存儲布局至少需要一塊磁盤,並且不能針對磁盤故障提供保護。
- 鏡像(Mirror):數據在兩個或三個物理磁盤上復制,這提高了可靠性,但降低了容量。這種存儲布局至少需要兩塊磁盤用於針對單一磁盤故障提供保護,或者至少需要五塊磁盤用於針對同時發生的兩起磁盤故障提供保護。
- 奇偶校驗(Parity):數據和奇偶校驗信息跨物理磁盤條帶化,這提高了可靠性,但一定程度上降低了容量。這種存儲布局至少需要三塊磁盤用於針對單一磁盤故障提供保護,並且至少需要七塊磁盤用於針對兩起磁盤故障提供保護。
存儲空間特性也可以應用在Windows Server 2012的故障轉移集群中,但要求會更高:
- 虛擬磁盤提供方式必須是固定(Fiexed,創建時就占據固定容量)。
- 虛擬磁盤奇偶校驗存儲布局在Windows Server 2012中不被支持,但2012 R2支持。
- 所有物理磁盤必須通過SAS鏈接。
- 所有物理磁盤必須支持PR(Persistent Reservation)且通過故障轉移集群驗證測試。
- 集群需要共享存儲,因而JBOD磁盤必須通過SAS物理連接所有節點(可以通過SAS連接所有節點或者使用SAS交換機),因而DAS不被支持。
從以上要求看,要使用集群存儲空間特性局限性是比較明顯的,要與SAN方案競爭還有很長的路要走。想了解更多關於存儲空間特性的細節,可以訪問Storage Spaces Frequently Asked Questions (FAQ)
三、Windows Server 2012虛擬化支持的存儲網絡
在Windows Server 2012中實現虛擬化的關鍵是部署Hyper-V服務器,保障Hyper-V虛擬機運行。原則上我們可以將Hyper-V虛擬機放置任何存儲中,基於DAS、NAS或SAN存儲都是可選的,Hyper-V Server 2012甚至已經實現在非共享存儲的獨立主機間實時遷移虛擬機。但是為了實現高可用性,我們一般會部署Hyper-V服務器故障轉移集群,這要求集群節點擁有共享存儲,因而為實現共享存儲我們還有兩種選擇:基於SAN(基於iSCSI的IP SAN和基於FC通道的FC SAN)和基於文件服務器集群的Hyper-V over SMB。
1、基於IP SAN和FC SAN
如下圖是典型的兩節點集群連接存儲的實現高可用性的方案,可以看出IP SAN與FC SAN在網絡拓撲上沒有本質區別,兩者都可以通過多路徑IO(MPIO)實現IO高可靠性和負載均衡。這里的Storage Server即是傳統意義上的存儲服務器(帶CPU和控制器的存儲陣列),為Hyper-V Server集群提供共享存儲。測試環境中,可以利用Windows Server中 iSCSI目標服務器角色在普通PC中實現一個IP SAN所需要的Storage Server。
2、Hyper-V over SMB
Hyper-V over SMB是微軟特有的存儲解決方案。從下圖的網絡拓撲看,多了一級Windows File Server Cluster作為Hyper-V集群的共享存儲的提供者,大家也許會認為這樣是多此一舉,但實際上這樣的方案有幾個好處:
- 節約成本,重用舊有資產,使用便宜硬件。如果無需實現文件服務器的高可用性,那么任何一台連接的存儲設備的PC都可以充當Hyper-V集群的共享存儲的提供者,文件服務器的存儲可以采用任何形式的存儲模式(DAS、NAS和SAN),因而甚至可以是PC中的本地磁盤。如果實現文件服務器的高可以性,那么文件服務器故障轉移集群本身也需要共享存儲,因而文件服務器集群要么采用SAN,要么采用共享SAS連接JBOD,但應當推薦如下圖所示通過共享SAS連接JBOD。JBOD比傳統的RAID存儲陣列便宜,它沒有控制器,沒有RAID的高可用性,但配合Windows Server存儲空間特性,可以在文件服務器集群中實現高可用性和擴展性。
- 擴展性。文件服務器集群的節點可擴展。另外存儲空間可擴展,如下圖各個文件服務器節點可連接2個以上JBOD,配合存儲空間特性實現大容量虛擬磁盤(存儲空間特性需要微軟驗證的JBOD才支持,可以在此查閱通過驗證的JBOD產品)。
- 兼容性。多一層文件服務器或文件服務器集群,上層應用只需訪問文件服務器而無需知道底層存儲的實現細節,因而可以兼容不同型號的產品。如下圖兩個JBOD可以來自不同廠家。
- 其他好處,關於與Hyper-V和其他微軟產品的完美配合以及微軟的產品簡單易用就不提了。
實際上上圖文件服務器集群不僅可以通過SMB也可以通過NFS協議和iSCIS將存儲共享出去。但SMB 3.0已經明顯強化了采用SMB協議的優勢。
四、Windows Server故障轉移集群的集群共享卷
集群共享卷是從Windows Server 2008 R2起就具有的為故障轉移集群新增的一項特性。簡單來說,集群共享卷使得多個節點對網絡中同一位置的訪問實現了真正的同步,各節點都擁有該位置的最新狀態信息。集群共享卷特性為Windows Server 2012的虛擬化在存儲上提供了一個可靠的基礎,實現了虛擬化平台中的虛擬機的高可用性。
當我們使用Windows文件共享服務時會這樣的經驗:在節點1打開的共享文件夾\\fs01\share中新增了文件A,但是在節點2打開的同樣位置\\fs01\share卻沒有文件A。網絡位置\\fs01\share雖然是共享文件夾,但是在同一時間只能有一個節點維護其最新狀態。在故障轉移集群各節點上訪問集群共享卷時卻沒有這樣的問題。
集群共享卷的好處遠不止上面這一點:
- 每個集群共享卷都會被映射到每個節點的系統分區下ClusterStorage文件夾中,因為各節點訪問集群共享卷就如同訪問本地路徑。如果系統分區在C盤,那么集群共享卷1的路徑默認為C:\ClusterStorage\Volume1\,其中Volume1的名稱可以隨意更改。
- 多個虛擬機可以放置在同一個集群共享卷中,即同一個LUN中,並且可以正常進行故障轉移(這時故障轉移的單位不再是LUN,而是虛擬機),這充分利用了磁盤空間,也省卻了為每個虛擬機配置LUN的繁瑣工作。
- 即使一個節點和SAN之間連接中斷或者部分網絡中斷,集群也可以正常響應,集群將通過SAN或網絡中完好的部分來重新路由集群共享卷的通信。
Windows Server 2012對集群共享卷特性做了很大的改進,關於集群共享卷的實現原理詳細可以參考 Cluster Shared Volume (CSV) Inside Out 和 Cluster Shared Volumes Reborn in Windows Server 2012: Deep Dive 這兩篇文章。






