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