虛擬化改變了計(jì)算機(jī)使用存儲(chǔ)的方式。就像物理機(jī)器抽象成虛擬機(jī)(VM:Virtual Machine)一樣,物理存儲(chǔ)設(shè)備也被抽象成虛擬磁盤(Virtual Disk)。今天我們就來(lái)聊聊虛擬化存儲(chǔ)(Storage Virtualization)技術(shù),究竟虛擬磁盤是怎樣實(shí)現(xiàn)的?
虛擬磁盤的實(shí)現(xiàn)
我們知道,服務(wù)器擴(kuò)展存儲(chǔ)的手段主要有直連存儲(chǔ)(DAS)、存儲(chǔ)區(qū)域網(wǎng)絡(luò)(SAN)和網(wǎng)絡(luò)附加存儲(chǔ)(NAS)這三種類型。那么哪種存儲(chǔ)類型可以用來(lái)實(shí)現(xiàn)虛擬磁盤呢?
在虛擬化環(huán)境中,類似VMWare這樣的虛擬機(jī)管理程序hypervisor,要同時(shí)給很多VM分配存儲(chǔ)空間。這個(gè)過(guò)程中,我們需要先把物理存儲(chǔ)資源重新劃分成虛擬磁盤,然后再分配給VM.
顯然我們不能用DAS方式把物理磁盤直連到VM上,如果這樣,需要的物理磁盤就太多了。SAN是以邏輯單元(LUN:Logic Unit)的形式提供存儲(chǔ)資源,但虛擬環(huán)境下的VM數(shù)量很大,LUN的數(shù)量也不足以支撐這么多虛擬磁盤。
更重要的一點(diǎn),虛擬磁盤對(duì)于眾多的VM來(lái)說(shuō)是共享的,因?yàn)閂M需要隨時(shí)創(chuàng)建、刪除或者遷移,在遷移VM的時(shí)候就需要共享存儲(chǔ),只有這樣原來(lái)的數(shù)據(jù)才不會(huì)丟失。無(wú)論DAS還是SAN,都不適合共享存儲(chǔ)。
考慮到資源分配以及共享的問(wèn)題,hypervisor采用NAS的方式來(lái)實(shí)現(xiàn)虛擬磁盤。VMware通常采用VMFS(Virtual Machine File System)或NFS協(xié)議來(lái)實(shí)現(xiàn)虛擬磁盤,VMFS是專門針對(duì)虛擬機(jī)環(huán)境的文件系統(tǒng)協(xié)議。
每個(gè)虛擬機(jī)的數(shù)據(jù)實(shí)際上就是一堆文件,最主要的文件就是虛擬磁盤文件(VMDK文件),此外還有交換分區(qū)文件(vswp文件,相當(dāng)于swap)、非易失性內(nèi)存文件(nvram相當(dāng)于bios)等。每個(gè)VM對(duì)虛擬磁盤的IO操作,實(shí)際上是對(duì)這個(gè)虛擬磁盤文件的讀寫。
VMFS的設(shè)計(jì)、構(gòu)建和優(yōu)化針對(duì)虛擬服務(wù)器環(huán)境,可讓多個(gè)虛擬機(jī)共同訪問(wèn)一個(gè)整合的群集式存儲(chǔ)池,從而顯著提高了資源利用率。采用 VMFS 可實(shí)現(xiàn)資源共享,使管理員輕松地從更高效率和存儲(chǔ)利用率中直接獲益。
那么我們?nèi)绾卧?a href="http://www.nxhydt.com/v/tag/475/" target="_blank">云計(jì)算中使用虛擬磁盤呢?
實(shí)例存儲(chǔ)
最主要的一種使用虛擬磁盤的方式就是實(shí)例存儲(chǔ),每一個(gè)VM就是一個(gè)虛擬機(jī)實(shí)例,hypervisor在每個(gè)實(shí)例中提供仿真的硬件環(huán)境,包括CPU、內(nèi)存和磁盤。這種方式,使得虛擬磁盤成為虛擬機(jī)實(shí)例的一部分,就像物理世界一樣。VM刪除后,虛擬磁盤也會(huì)被刪除。
這種實(shí)例存儲(chǔ)模型中,虛擬磁盤與虛擬機(jī)之間的存儲(chǔ)關(guān)系,實(shí)際上是DAS存儲(chǔ)。但虛擬磁盤的底層實(shí)現(xiàn),上面我們說(shuō)了,是用NAS方式實(shí)現(xiàn)的。而hypervisor的作用就是把VM層的存儲(chǔ)模型,與虛擬機(jī)下層的實(shí)現(xiàn)協(xié)議(VMFS或NFS)分離開(kāi)了。
卷存儲(chǔ)
實(shí)例存儲(chǔ)有它的限制,開(kāi)發(fā)者一般希望把實(shí)例數(shù)據(jù)(比如OS以及安裝的一些服務(wù)器應(yīng)用軟件)和用戶數(shù)據(jù)分開(kāi),這樣重建VM的時(shí)候可以保留用戶的數(shù)據(jù)。
這個(gè)需求衍生出另外一種存儲(chǔ)模型:卷存儲(chǔ)。卷是存儲(chǔ)的主要單位,相當(dāng)于一個(gè)虛擬的磁盤分區(qū)。不屬于虛擬機(jī)實(shí)例的一部分,可以認(rèn)為是虛擬機(jī)的外置存儲(chǔ)設(shè)備。
卷可以從一個(gè)VM卸下,然后附加給另外一個(gè)VM.這樣我們就實(shí)現(xiàn)了實(shí)例數(shù)據(jù)與用戶數(shù)據(jù)的分離。OpenStack的Cinder就是一個(gè)卷存儲(chǔ)的實(shí)現(xiàn)。
除了實(shí)例存儲(chǔ)和卷存儲(chǔ),最后我們?cè)僬f(shuō)一說(shuō)另外一種比較特殊的虛擬化存儲(chǔ):對(duì)象存儲(chǔ)。
對(duì)象存儲(chǔ)
很多云應(yīng)用需要在不同的VM之間共享數(shù)據(jù),經(jīng)常需要跨越多個(gè)數(shù)據(jù)中心,對(duì)象存儲(chǔ)可以解決這個(gè)問(wèn)題。在前文《云計(jì)算IaaS管理平臺(tái)的基本功能有哪些?》中曾經(jīng)提到過(guò)對(duì)象存儲(chǔ)。
在對(duì)象存儲(chǔ)模型中,數(shù)據(jù)存儲(chǔ)在存儲(chǔ)段(bucket)中,按字面意思bucket也可以被稱為“桶”。我們可以用硬盤進(jìn)行類比,對(duì)象就好比文件,存儲(chǔ)段就像是文件夾(或目錄)。對(duì)象和存儲(chǔ)段可以通過(guò)統(tǒng)一資源標(biāo)識(shí)符(URI: Uniform Resource Identifier)查找。
對(duì)象存儲(chǔ)的核心設(shè)計(jì)思想其實(shí)也是虛擬化,具體說(shuō)來(lái),就是把文件的物理存儲(chǔ)位置,比如卷、目錄、磁盤等,虛擬化為bucket,把文件虛擬化為對(duì)象。對(duì)應(yīng)用層來(lái)說(shuō),簡(jiǎn)化了對(duì)數(shù)據(jù)的存取訪問(wèn),屏蔽了底層存儲(chǔ)技術(shù)的異構(gòu)性和復(fù)雜性。
對(duì)象存儲(chǔ)模型
NAS與對(duì)象存儲(chǔ)各有所長(zhǎng)
當(dāng)然你也許會(huì)問(wèn),NAS存儲(chǔ)技術(shù)不是也可以解決數(shù)據(jù)共享的問(wèn)題嗎?由于對(duì)象存儲(chǔ)的規(guī)模優(yōu)勢(shì)和成本優(yōu)勢(shì),很多云環(huán)境采用對(duì)象存儲(chǔ)來(lái)代替NAS.
由于對(duì)象存儲(chǔ)將遍布于很多節(jié)點(diǎn)且最新的數(shù)據(jù)并非總是可用, 所以對(duì)象存儲(chǔ)的數(shù)據(jù)一致性不強(qiáng)。如果對(duì)強(qiáng)一致性有要求,那么可以使用NAS.目前在云計(jì)算環(huán)境下,NAS和對(duì)象存儲(chǔ)是共存的關(guān)系。
和NAS一樣,對(duì)象存儲(chǔ)也是軟件架構(gòu),不是硬件架構(gòu)。應(yīng)用直接通過(guò)REST API來(lái)訪問(wèn)對(duì)象存儲(chǔ)。常用的對(duì)象存儲(chǔ)包括:Amazon的S3和OpenStack的Swift.
結(jié)語(yǔ)
在實(shí)際的云平臺(tái)應(yīng)用中,我們需要根據(jù)自己的實(shí)際情況來(lái)合理運(yùn)用不同的虛擬化存儲(chǔ)技術(shù)。
對(duì)于非結(jié)構(gòu)化的靜態(tài)數(shù)據(jù)文件,如音視頻、圖片等,我們一般使用對(duì)象存儲(chǔ)。
對(duì)于系統(tǒng)鏡像以及應(yīng)用程序,我們需要使用云主機(jī)實(shí)例存儲(chǔ)或者卷存儲(chǔ)。
對(duì)于應(yīng)用產(chǎn)生的動(dòng)態(tài)數(shù)據(jù),我們一般還需要利用云數(shù)據(jù)庫(kù)來(lái)對(duì)數(shù)據(jù)進(jìn)行管理。
評(píng)論
查看更多