-
【塊存儲】
-
典型設備:磁盤陣列,硬盤,虛擬硬盤
-
這種接口一般以QEMU Driver或者Kernel Module的方式存在,這種接口須要實現Linux的Block Device的接口或者QEMU提供的Block Driver接口,如Sheepdog,AWS的EBS,青雲的雲硬盤和阿里雲的盤古系統,還有Ceph的RBD(RBD是Ceph面向塊存儲的接口)
-
塊存儲主要是將裸磁盤空間整個映射給主機使用的,就是說例如磁盤陣列裏面有5塊硬盤(爲方便說明,假設每一個硬盤1G),而後能夠經過劃邏輯盤、作Raid、或者LVM(邏輯卷)等種種方式邏輯劃分出N個邏輯的硬盤。(假設劃分完的邏輯盤也是5個,每一個也是1G,可是這5個1G的邏輯盤已經於原來的5個物理硬盤意義徹底不一樣了。例如第一個邏輯硬盤A裏面,可能第一個200M是來自物理硬盤1,第二個200M是來自物理硬盤2,因此邏輯硬盤A是由多個物理硬盤邏輯虛構出來的硬盤。)
-
接着塊存儲會採用映射的方式將這幾個邏輯盤映射給主機,主機上面的操做系統會識別到有5塊硬盤,可是操做系統是區分不出究竟是邏輯仍是物理的,它一律就認爲只是5塊裸的物理硬盤而已,跟直接拿一塊物理硬盤掛載到操做系統沒有區別的,至少操做系統感知上沒有區別。
-
此種方式下,操做系統還須要對掛載的裸硬盤進行分區、格式化後,才能使用,與日常主機內置硬盤的方式徹底無異。
-
優勢:
-
一、 這種方式的好處固然是由於經過了Raid與LVM等手段,對數據提供了保護。
-
二、 另外也能夠將多塊廉價的硬盤組合起來,成爲一個大容量的邏輯盤對外提供服務,提升了容量。
-
三、 寫入數據的時候,因爲是多塊磁盤組合出來的邏輯盤,因此幾塊磁盤能夠並行寫入的,提高了讀寫效率。
-
四、 不少時候塊存儲採用SAN架構組網,傳輸速率以及封裝協議的緣由,使得傳輸速度與讀寫速率獲得提高。
-
缺點:
-
一、採用SAN架構組網時,須要額外爲主機購買光纖通道卡,還要買光纖交換機,造價成本高。
-
二、主機之間的數據沒法共享,在服務器不作集羣的狀況下,塊存儲裸盤映射給主機,再格式化使用後,對於主機來講至關於本地盤,那麼主機A的本地盤根本不能給主機B去使用,沒法共享數據。
-
三、不利於不一樣操做系統主機間的數據共享:另一個緣由是由於操做系統使用不一樣的文件系統,格式化完以後,不一樣文件系統間的數據是共享不了的。例如一臺裝了WIN7/XP,文件系統是FAT32/NTFS,而Linux是EXT4,EXT4是沒法識別NTFS的文件系統的。就像一隻NTFS格式的U盤,插進Linux的筆記本,根本沒法識別出來。因此不利於文件共享。
-
典型設備: 磁盤陣列,硬盤
-
主要是將裸磁盤空間映射給主機使用的。
-
優勢:
-
經過Raid與LVM等手段,對數據提供了保護。
-
多塊廉價的硬盤組合起來,提升容量。
-
多塊磁盤組合出來的邏輯盤,提高讀寫效率。
-
缺點:
-
採用SAN架構組網時,光纖交換機,造價成本高。
-
主機之間沒法共享數據。
-
使用場景:
-
docker容器、虛擬機磁盤存儲分配。
-
日誌存儲。
-
文件存儲。
-
…
-
-
如下列出的兩種存儲方式都是塊存儲類型:
-
1) DAS(Direct Attach STorage):是直接鏈接於主機服務器的一種儲存方式,每一臺主機服務器有獨立的儲存設備,每臺主機服務器的儲存設備沒法互通,須要跨主機存取資料時,必須通過相對複雜的設定,若主機服務器分屬不一樣的操做系統,要存取彼此的資料,更是複雜,有些系統甚至不能存取。一般用在單一網絡環境下且數據交換量不大,性能要求不高的環境下,能夠說是一種應用較爲早的技術實現。
-
2)SAN(Storage Area Network):是一種用高速(光纖)網絡聯接專業主機服務器的一種儲存方式,此係統會位於主機羣的後端,它使用高速I/O 聯結方式, 如 SCSI, ESCON 及 Fibre- Channels。通常而言,SAN應用在對網絡速度要求高、對數據的可靠性和安全性要求高、對數據共享的性能要求高的應用環境中,特色是代價高,性能好。例如電信、銀行的大數據量關鍵應用。它採用SCSI 塊I/O的命令集,經過在磁盤或FC(Fiber Channel)級的數據訪問提供高性能的隨機I/O和數據吞吐率,它具備高帶寬、低延遲的優點,在高性能計算中佔有一席之地,可是因爲SAN系統的價格較高,且可擴展性較差,已不能知足成千上萬個CPU規模的系統。
-
-
【文件存儲】
-
典型設備:FTP、NFS服務器,SamBa
-
一般意義是支持POSIX接口,它跟傳統的文件系統如Ext4是一個類型的,但區別在於分佈式存儲提供了並行化的能力,如Ceph的CephFS(CephFS是Ceph面向文件存儲的接口),可是有時候又會把GFS,HDFS這種非POSIX接口的類文件存儲接口納入此類。
-
爲了克服上述文件沒法共享的問題,因此有了文件存儲。
-
文件存儲也有軟硬一體化的設備,可是其實普通拿一臺服務器/筆記本,只要裝上合適的操做系統與軟件,就能夠架設FTP與NFS服務了,架上該類服務以後的服務器,就是文件存儲的一種了。
-
主機A能夠直接對文件存儲進行文件的上傳下載,與塊存儲不一樣,主機A是不須要再對文件存儲進行格式化的,由於文件管理功能已經由文件存儲本身搞定了。
-
優勢:
-
一、造價交低:隨便一臺機器就能夠了,另外普通以太網就能夠,根本不須要專用的SAN網絡,因此造價低。
-
二、方便文件共享:例如主機A(WIN7,NTFS文件系統),主機B(Linux,EXT4文件系統),想互拷一部電影,原本不行。加了個主機C(NFS服務器),而後能夠先A拷到C,再C拷到B就OK了。(例子比較膚淺,請見諒……)
-
缺點:
-
讀寫速率低,傳輸速率慢:以太網,上傳下載速度較慢,另外全部讀寫都要1臺服務器裏面的硬盤來承擔,相比起磁盤陣列動不動就幾十上百塊硬盤同時讀寫,速率慢了許多。
-
-
一般,NAS產品都是文件級存儲。 NAS(Network Attached Storage):是一套網絡儲存設備,一般是直接連在網絡上並提供資料存取服務,一套 NAS 儲存設備就如同一個提供數據文件服務的系統,特色是性價比高。例如教育、政府、企業等數據存儲應用。
-
它採用NFS或CIFS命令集訪問數據,以文件爲傳輸協議,經過TCP/IP實現網絡化存儲,可擴展性好、價格便宜、用戶易管理,如目前在集羣計算中應用較多的NFS文件系統,但因爲NAS的協議開銷高、帶寬低、延遲大,不利於在高性能集羣中應用。
-
-
【對象存儲】
-
典型設備:內置大容量硬盤的分佈式服務器
-
對象存儲: 也就是一般意義的鍵值存儲,其接口就是簡單的GET、PUT、DEL和其餘擴展,如七牛、又拍、Swift、S3
-
針對Linux集羣對存儲系統高性能和數據共享的需求,國際上已開始研究全新的存儲架構和新型文件系統,但願能有效結合SAN和NAS系統的優勢,支持直接訪問磁盤以提升性能,經過共享的文件和元數據以簡化管理,目前對象存儲系統已成爲Linux集羣系統高性能存儲系統的研究熱點,如Panasas公司的Object Base Storage Cluster System系統和Cluster File Systems公司的Lustre等。
-
整體上來說,對象存儲同兼具SAN高速直接訪問磁盤特色及NAS的分佈式共享特色。
-
核心是將數據通路(數據讀或寫)和控制通路(元數據)分離,而且基於對象存儲設備(Object-based Storage Device,OSD)構建存儲系統,每一個對象存儲設備具備必定的智能,可以自動管理其上的數據分佈。
-
對象存儲結構組成部分(對象、對象存儲設備、元數據服務器、對象存儲系統的客戶端):
-
一、對象
-
對象是系統中數據存儲的基本單位,一個對象實際上就是文件的數據和一組屬性信息(Meta Data)的組合,這些屬性信息能夠定義基於文件的RAID參數、數據分佈和服務質量等,而傳統的存儲系統中用文件或塊做爲基本的存儲單位,在塊存儲系統中還須要始終追蹤系統中每一個塊的屬性,對象經過與存儲系統通訊維護本身的屬性。在存儲設備中,全部對象都有一個對象標識,經過對象標識OSD命令訪問該對象。一般有多種類型的對象,存儲設備上的根對象標識存儲設備和該設備的各類屬性,組對象是存儲設備上共享資源管理策略的對象集合等。
-
二、對象存儲設備
-
對象存儲設備具備必定的智能,它有本身的CPU、內存、網絡和磁盤系統,OSD同塊設備的不一樣不在於存儲介質,而在於二者提供的訪問接口。OSD的主要功能包括數據存儲和安全訪問。目前國際上一般採用刀片式結構實現對象存儲設備。OSD提供三個主要功能:
-
(1) 數據存儲。OSD管理對象數據,並將它們放置在標準的磁盤系統上,OSD不提供塊接口訪問方式,Client請求數據時用對象ID、偏移進行數據讀寫。
-
(2) 智能分佈。OSD用其自身的CPU和內存優化數據分佈,並支持數據的預取。因爲OSD能夠智能地支持對象的預取,從而能夠優化磁盤的性能。
-
(3) 每一個對象元數據的管理。OSD管理存儲在其上對象的元數據,該元數據與傳統的inode元數據類似,一般包括對象的數據塊和對象的長度。而在傳統的NAS系統中,這些元數據是由文件服務器維護的,對象存儲架構將系統中主要的元數據管理工做由OSD來完成,下降了Client的開銷。
-
三、元數據服務器(Metadata Server,MDS)
-
MDS控制Client與OSD對象的交互,主要提供如下幾個功能:
-
(1) 對象存儲訪問。
-
MDS構造、管理描述每一個文件分佈的視圖,容許Client直接訪問對象。MDS爲Client提供訪問該文件所含對象的能力,OSD在接收到每一個請求時將先驗證該能力,而後才能夠訪問。
-
(2) 文件和目錄訪問管理。
-
MDS在存儲系統上構建一個文件結構,包括限額控制、目錄和文件的建立和刪除、訪問控制等。
-
(3) Client Cache一致性。
-
爲了提升Client性能,在對象存儲系統設計時一般支持Client方的Cache。因爲引入Client方的Cache,帶來了Cache一致性問題,MDS支持基於Client的文件Cache,當Cache的文件發生改變時,將通知Client刷新Cache,從而防止Cache不一致引起的問題。
-
四、對象存儲系統的客戶端Client
-
爲了有效支持Client支持訪問OSD上的對象,須要在計算節點實現對象存儲系統的Client,一般提供POSIX文件系統接口,容許應用程序像執行標準的文件系統操做同樣。
-
-
對象存儲最經常使用的方案,就是多臺服務器內置大容量硬盤,再裝上對象存儲軟件,而後再額外搞幾臺服務做爲管理節點,安裝上對象存儲管理軟件。管理節點能夠管理其餘服務器對外提供讀寫訪問功能。
-
之因此出現了對象存儲這種東西,是爲了克服塊存儲與文件存儲各自的缺點,發揚它倆各自的優勢。簡單來講塊存儲讀寫快,不利於共享,文件存儲讀寫慢,利於共享。可否弄一個讀寫快,利 於共享的出來呢。因而就有了對象存儲。
-
首先,一個文件包含了了屬性(術語叫metadata,元數據,例如該文件的大小、修改時間、存儲路徑等)以及內容(如下簡稱數據)。
-
以往像FAT32這種文件系統,是直接將一份文件的數據與metadata一塊兒存儲的,存儲過程先將文件按照文件系統的最小塊大小來打散(如4M的文件,假設文件系統要求一個塊4K,那麼就將文件打散成爲1000個小塊),再寫進硬盤裏面,過程當中沒有區分數據/metadata的。而每一個塊最後會告知你下一個要讀取的塊的地址,而後一直這樣順序地按圖索驥,最後完成整份文件的全部塊的讀取。
-
這種狀況下讀寫速率很慢,由於就算你有100個機械手臂在讀寫,可是因爲你只有讀取到第一個塊,才能知道下一個塊在哪裏,其實至關於只能有1個機械手臂在實際工做。
-
而對象存儲則將元數據獨立了出來,控制節點叫元數據服務器(服務器+對象存儲管理軟件),裏面主要負責存儲對象的屬性(主要是對象的數據被打散存放到了那幾臺分佈式服務器中的信息),而其餘負責存儲數據的分佈式服務器叫作OSD,主要負責存儲文件的數據部分。當用戶訪問對象,會先訪問元數據服務器,元數據服務器只負責反饋對象存儲在哪些OSD,假設反饋文件A存儲在B、C、D三臺OSD,那麼用戶就會再次直接訪問3臺OSD服務器去讀取數據。
-
這時候因爲是3臺OSD同時對外傳輸數據,因此傳輸的速度就加快了。當OSD服務器數量越多,這種讀寫速度的提高就越大,經過此種方式,實現了讀寫快的目的。
-
另外一方面,對象存儲軟件是有專門的文件系統的,因此OSD對外又至關於文件服務器,那麼就不存在文件共享方面的困難了,也解決了文件共享方面的問題。
-
因此對象存儲的出現,很好地結合了塊存儲與文件存儲的優勢。
-
-
最後爲何對象存儲兼具塊存儲與文件存儲的好處,還要使用塊存儲或文件存儲呢?
-
一、有一類應用是須要存儲直接裸盤映射的,例如數據庫。由於數據庫須要存儲裸盤映射給本身後,再根據本身的數據庫文件系統來對裸盤進行格式化的,因此是不可以採用其餘已經被格式化爲某種文件系統的存儲的。此類應用更適合使用塊存儲。
-
二、對象存儲的成本比起普通的文件存儲仍是較高,須要購買專門的對象存儲軟件以及大容量硬盤。若是對數據量要求不是海量,只是爲了作文件共享的時候,直接用文件存儲的形式好了,性價比高。
-
SAN和NAS技術已經出現了數十年,目前單臺SAN或NAS設備最大容量已經達到PB級別,但在應對EB級數據挑戰時,仍是顯得有些力不從心。這主要因爲其架構和服務接口決定的。
SAN使用SCSI協議做爲底層協議,SCSI協議管理的粒度很是小,一般以字節(byte)或千字節(KB)爲單位;同時SCSI協議沒有提供讀寫鎖機制以確保不一樣應用併發讀寫時的數據一致性,所以難以實現EB級存儲資源管理和多個服務器/服務器集羣之間數據共享。
NAS使用文件協議訪問數據,經過文件協議存儲設備可以準確識別數據內容,並提供了很是豐富的文件訪問接口,包括複雜的目錄/文件的讀寫鎖。文件和目錄採用樹形結構管理,每一個節點使用一種叫作inode的結構進行管理,每個目錄和文件都對應一個iNode。目錄深度或同一目錄下的子節點數隨着總體文件數量的增長而快速增長,一般文件數量超過億級時,文件系統複雜的鎖機制及頻繁的元數據訪問將極大下降系統的總體性能。
傳統的
RAID技術和Scale-up架構也阻止了傳統的SAN和NAS成爲EB級高可用,高性能的海量存儲單元。傳統的RAID基於硬盤,一般一個RAID組最多包含20+塊硬盤,即便PB級規模的SAN或NAS也將被分割成多個存儲孤島,增長了EB級規模應用場景下的管理複雜度;同時Scale-up架構決定了即便SAN和NAS存儲容量達到EB級,性能也將成爲木桶的短板。
那麼如何才能應對信息爆炸時代的數據洪流呢?咱們設想可否有一種「超級數據圖書館」,它提供海量的、可共享的存儲空間給不少用戶(服務器/服務器集羣)使用,提供超大的存儲容量,其存儲容量規模千倍於當前的高速存儲單元(SAN和NAS),用戶或應用訪問數據時無需知道圖書館對這些書如何擺放和管理(佈局管理),只須要提供惟一編號(ID)就能夠獲取到這本書的內容(數據)。若是某一本書變得老舊殘破,系統自動地將即將失效或已經失效的書頁(
存儲介質)上的數據抄寫(恢復/重構)到新的紙張(存儲介質)上,並從新裝訂這本書,數據使用者無需關注這一過程,只是根據須要去獲取數據資源。這種「超級數據圖書館」是否真的存在呢?
-
分佈式對象存儲的誕生
對象存儲技術的出現和大量
自動化管理技術的產生,使得「超級數據圖書館」再也不是人類高不可攀的夢想。對象存儲系統(Object-Based Storage System)改進了SAN和NAS存儲的劣勢,保留了NAS的數據共享等優點,經過高級的抽象接口替代了SCSI存儲塊和文件訪問接口(不一樣地區的用戶訪問不一樣的POSIX文件系統,不只浪費時間,並且讓運維管理變的更復雜。相對而言,分佈式存儲系統的優點明顯。在分佈式存儲系統上作應用開發更便利,易維護和擴容,自動負載平衡。以 RESTful HTTP接口代替了POSIX接口和QEMU Driver接口),屏蔽了存儲底層的實現細節,將NAS垂直的樹形結構改變成平等的扁平結構,從而提升了擴展性、加強了可靠性、具有了平臺無關性等重要存儲特性。(Erasure Code: 是將文件轉換成一個碎片集合,每個碎片很小,碎片被打散分佈到一組服務器資源池裏。只要存留的碎片數量足夠,就能夠合成爲本來的文件。這能夠在保持本來的數據健壯性的基礎上大大減小須要的存儲空間。 不過Erasure Code並不是適應全部的場景,尤爲不適合網絡延遲敏感的業務( 不過Erasure Code並不是適應全部的場景,尤爲不適合網絡延遲敏感的業務))
-
SNIA(網絡存儲工業協會)定義的對象存儲設備是這樣的:
Ø 對象是自完備的,包含元數據、數據和屬性
n 存儲設備能夠自行決定對象的具體存儲位置和數據的分佈
n 存儲設備能夠對不一樣的對象提供不一樣的QoS
Ø 對象存儲設備相對於塊設備有更高的「智能」,上層經過對象ID來訪問對象,而無需瞭解對象的具體空間分佈狀況
換句話說對象存儲是智能化、
封裝得更好的塊,是「文件」或其餘應用級邏輯結構的組成部分,文件與對象的對應關係由上層直接控制,對象存儲設備自己也多是個分佈式的系統——這就是分佈式對象存儲系統了。
-
用對象替代傳統的塊的好處在於對象的內容自己來自應用,其具備內在的聯繫,具備「原子性」,所以能夠作到:
Ø 在存儲層進行更智能的空間管理
Ø 內容相關的數據預取和緩存
Ø 可靠的多用戶共享訪問
Ø 對象級別的安全性
同時,對象存儲架構還具備更好的可伸縮性。一個對象除了ID和用戶數據外,還包含了屬主、時間、大小、位置等源數據信息,權限等預約義屬性,乃至不少自定義屬性。
具有EB級規模擴展性的分佈式對象存儲,經過對應用提供統一的命名空間,構建EB級統1、可共享數據的存儲資源池,有效地填補上述通用計算模型中「
網絡計算」場景海量存儲單元空白,經過高層次的數據模型抽象,能夠簡化應用對數據訪問,同時使得海量存儲更加智能。
對象是數據和自描述信息的集合,是在
磁盤上存儲的基本單元。對象存儲經過簡化數據的組織形式(如將樹形的「目錄」和「文件」替換爲扁平化的「ID」與「對象」)、下降協議與接口的複雜度(如簡化複雜的鎖機制,確保最終一致性),從而提升系統的擴展性以應對信息爆炸時代海量數據的挑戰。同時對象的智能自管理功能也能有效下降系統維護複雜度,幫助用戶下降總體擁有成本(TCO)。
-
歸納一下,塊設備速度快,對存儲的數據沒有進行組織管理,但在大多數場景下,用戶數據讀寫不方便(以塊設備位置offset + 數據的length來記錄數據位置,讀寫數據)。而在塊設備上構建了文件系統後,文件系統幫助塊設備組織管理數據,數據存儲對用戶更加友好(以文件名來讀寫數據)。Ceph文件系統接口解決了「Ceph塊設備+本地文件系統」不支持多客戶端共享讀寫的問題,但因爲文件系統結構的複雜性致使了存儲性能較Ceph塊設備差。對象存儲接口是一種折中,保證必定的存儲性能,同時支持多客戶端共享讀寫。