徹底理解VMware vSphere 下的虛擬卷:vVols
本文簡要介紹一下在VSphere 6.7/7.0中vVol的相關內容。隨著虛擬化技術的發展,新的概念不斷被引入。特別是VMWare的產品更是新概念不斷,讓人眼花繚亂。
vVol是的全稱是Virtual Volume,也就是虛擬卷。但是vVol并非傳統意義上卷的概念,它更多的是一個對SAN和NAS進行虛擬化集成與管理的框架。該框架式提供了一個更加有效的對虛擬化環境進行管理的模型,同時將數據中心以基礎設施為中心轉換為以應用為中心。從而使得虛擬化技術更好的為應用服務。
vVol通過一種基于策略驅動的自動化方法來簡化操作。這使得更加靈活的滿足虛擬機對存儲的消費,同時可以實現按需實時動態調整。它通過對硬件資源及以虛擬卷為粒度的基于磁盤陣列的數據服務的更精細的控制來簡化向應用交付存儲服務級別操作。這里的存儲服務級別是指不同性能的存儲資源。
如下圖所示,通過vVol將多臺不同性能的SAN或者NAS設備虛擬化為一個稱為Datastore的資源池。而虛擬機所需資源都是從該池分配。

基于vVol, WMware提供了一個虛擬機及其磁盤粒度的視圖,而非LUN,使其變成了一個存儲系統管理單元。vVol封裝了虛擬磁盤和其他虛擬卷文件,并且將其存儲在存儲系統上。
vVol概述
vVol是從存儲陣列導出的VMDK粒度的存儲實體。vVol通過一個很小的協議終端(Protocal end-point,簡稱PE)集合導出到ESXi主機。PE是物理存儲結構的一部分,其按需的建立起虛擬卷到期望vVol之間的數據通路。存儲系統在vVol上提供數據服務。結果是這些數據服務就是新的vVol。相對于數據路徑,數據服務、配置和虛擬卷的管理等則是帶外的。為了管理方便,多個vVol可以被打包為一個稱為存儲容器(SC)的邏輯項。
vVol和存儲容器形成了虛擬存儲結構,PE是物理存儲結構的一部分。這點大家需要區分清楚。
通過使用一系列的稱為存儲感知的vSphere API(VASA),存儲系統可以感知vVol和其相關的虛擬機。通過VASA,vSphere和底層的存儲系統建立了兩路帶外通信鏈路。通過該通信鏈路vSphere可以執行數據服務操作并將某些虛擬機的操作卸載到存儲系統端完成。例如快照和克隆等,可以從虛擬卷端轉移到存儲端來執行。
對于帶內通信,vSphere仍然通過標準的SCSI和NFS協議。于是,vVol可以支持任意類型的存儲系統,包括iSCSI、FC、FCoE和NFS等。
- vVols 代表一個虛擬卷的虛擬磁盤,它是一個128位的GUID標識的抽象對象,并被存儲系統硬件管理。
- 模型從數據存儲的空間管理轉變為磁盤陣列的抽象對象的管理。
- 存儲硬件可以完全控制虛擬磁盤的內容、布局和管理。
VMware的很多合作伙伴在其陣列中添加了多vVol的支持。為了端到端的支持,HBA卡驅動需要實現對基于vVol設備的支持。這需要為SCSI驅動提供一個新的API,該API用于獲得二級LUNID(SLLID)。

vVol 核心組件簡述
vVol包含5個主要的組件,分別是vVol設備,協議終端(PE),存儲容器(SC),VASA提供者和陣列。所有這些組件被VSphere棧的不同組件所管理或者使用。比如Virtual Center(VSSA,SPBM),ESXi(Hostd,VVolD,VVol FDS 驅動)。關于vVol的整體特性,我們概述如下:
- 沒有文件系統
- ESX通過VASA來管理磁盤陣列
- 陣列被劃分為邏輯的容器,稱為存儲容器
- 虛擬卷磁盤稱為vVol,被存儲在存儲容器當中
- 從ESXi主機到存儲陣列的IO通過稱為PE的連接點進行定位
- 數據服務被下沉(offload)到陣列,比如快照和加密等由陣列完成,而非虛擬化平臺
- 通過基于策略的存儲管理框(SPBM)架完成管理
VASA (存儲感知的vSphere APIs) APIs (VP)
vVol存儲提供者,也被稱為VASA提供者,本質上就是一個軟件組件。其角色就是vSphere的一個存儲感知的服務。它負責組件間的帶外通信,其一端是ESXi主機,另外一端是存儲系統。如下圖所示是EMC Unity的整體架構圖,這個圖比較清楚的描述清楚了VASA與其它組件間的關系。

- 該組件由存儲陣列供應商開發
- ESX和vCenter Server連接到VASA提供者
- 提供存儲感知的服務
- 一個VASA提供者可以管理多個陣列
- 支持VASA API通過ESXi主機導出
- VASA提供者可以基于陣列的管理程序或者固件實現
- 負責創建vVol
存儲容器 (SC)
不同于傳統LUN和基于NFS的vSphere存儲,vVol功能并不需要在存儲端預配置卷。取而代之的是,vVol使用一個存儲容器。這個存儲容器可以是一個原始的存儲池或者聚合的存儲池。我們這里對存儲容器做如下總結:
- 用于分組vVol的邏輯存儲結構
- 根據虛擬卷對存儲的不同需求進行隔離
- 一個SC可以被多個不同的PE訪問
- 所需能力(容量,QoS等)由SC申請
- VASA 提供者(Provider)發現存儲容器,并報告給vCenter服務
- 新虛擬機創建時,隨后SC會自動創建所需資源
協議終端 (PE)
雖然存儲系統負責vVol的所有管理工作,ESXi主機并不直接訪問存儲端的vVol。但是,ESXi主機通過一個邏輯IO代理與vVol和由vVol封裝的虛擬磁盤文件進行通信。這里所謂的IO代理就是PE。ESXi通過PE按需的建立虛擬機與vVol的數據通路。
- 由存儲端隔離訪問點
- 可以使用多路徑策略或者NFS拓撲
- 實現ESXi主機與磁盤陣列間的通信
- 兼容所有SAN和NAS協議,如iSCSI, NFS v3, FC, FCoE.
- PE可以使用上述任何協議
vVols對象
在vCenter和vSphere Web客戶端中,虛擬數據存儲(datastore)代表一個存儲容器。vVol是對虛擬機文件、虛擬盤和其衍生品(比如快照)的封裝。
虛擬卷對象存儲在存儲容器當中有5種不同類型的vVol,具體如下:
- Config-vVol - 元數據
- Data-vVol - VMDK
- Mem-vVol - 快照
- Swap-vVol - Swap 文件
- Other-vVol - 供應商解決方案相關
實例簡析
雖然上面對vSphere的關鍵概念都做了解釋,估計還會有摸不著頭腦的感覺。其實簡單的理解就是提供了一套在虛擬機管理軟件中對存儲進行管理的接口。這樣,在創建虛擬機,或者進行虛擬卷操作的時候,可以通過存儲系統的支持提供虛擬機操作的性能等。當然,為了能夠讓虛擬機管理軟件訪問存儲系統,需要建立兩者之間的關聯,也就是集成的過程。
以vSphere與Unity集成為例。首先需要在存儲系統添加虛擬主機信息,然后創建datastore。之后在vSphere中將存儲系統添加到其中。當然,具體操作比較多,本文不再贅述,下面是一個主要的流程。

另外,還需要建立ESXi主機與存儲之間數據鏈路。可以是iSCSI或者FC,通過在宿主機實現到存儲系統的掛載,而且每個宿主機都要掛載成功。
