分散式存儲架構

分散式存儲架構

分散式存儲架構由三個部分組成:客戶端、元數據伺服器和數據伺服器。客戶端負責傳送讀寫請求,快取檔案元數據和檔案數據。元數據伺服器負責管理元數據和處理客戶端的請求,是整個系統的核心組件。數據伺服器負責存放檔案數據,保證數據的可用性和完整性。該架構的好處是性能和容量能夠同時拓展,系統規模具有很強的伸縮性。

分散式存儲架構的組成

分散式存儲分為檔案存儲、對象存儲和塊存儲,但它們三種存儲方式的基本架構都是大同小異的。即客戶端或套用端、元數據(MDS)伺服器和數據節點伺服器。客戶端和元數據伺服器之間互動是“信令互動”,而客戶端到數據節點是“媒體互動”。元數據伺服器或通過數據節點伺服器獲取各節點伺服器的基本配置情況和狀態信息。

比如,客戶端需要讀取某一個檔案的信息,客戶端會將相應的要求發給元數據伺服器:“喂!我需要XXX,存在哪裡了”,元數據伺服器查詢後回答“你到xxx伺服器的xxx地址+xxx伺服器的xxx地址取”。

客戶端拿到這個指示後,向這2台伺服器發出指令,數據節點獲得指令後,將相應的數據返回給客戶端。

塊存儲

典型設備:磁碟陣列,硬碟

塊存儲主要是將裸磁碟空間整個映射給主機使用的,就是說例如磁碟陣列裡面有5塊硬碟(為方便說明,假設每個硬碟1G),然後可以通過劃邏輯盤、做Raid、或者LVM(邏輯卷)等種種方式邏輯劃分出N個邏輯的硬碟。(假設劃分完的邏輯盤也是5個,每個也是1G,但是這5個1G的邏輯盤已經於原來的5個物理硬碟意義完全不同了。例如第一個邏輯硬碟A裡面,可能第一個200M是來自物理硬碟1,第二個200M是來自物理硬碟2,所以邏輯硬碟A是由多個物理硬碟邏輯虛構出來的硬碟。)

接著塊存儲會採用映射的方式將這幾個邏輯盤映射給主機,主機上面的作業系統會識別到有5塊硬碟,但是作業系統是區分不出到底是邏輯還是物理的,它一概就認為只是5塊裸的物理硬碟而已,跟直接拿一塊物理硬碟掛載到作業系統沒有區別的,至少作業系統感知上沒有區別。

此種方式下,作業系統還需要對掛載的裸硬碟進行分區、格式化後,才能使用,與平常主機內置硬碟的方式完全無異。

優點

1、 這種方式的好處當然是因為通過了Raid與LVM等手段,對數據提供了保護。

2、 另外也可以將多塊廉價的硬碟組合起來,成為一個大容量的邏輯盤對外提供服務,提高了容量。

3、 寫入數據的時候,由於是多塊磁碟組合出來的邏輯盤,所以幾塊磁碟可以並行寫入的,提升了讀寫效率。

4、 很多時候塊存儲採用SAN架構組網,傳輸速率以及封裝協定的原因,使得傳輸速度與讀寫速率得到提升。

缺點:

1、採用SAN架構組網時,需要額外為主機購買光纖通道卡,還要買光纖交換機,造價成本高。

2、主機之間的數據無法共享,在伺服器不做集群的情況下,塊存儲裸盤映射給主機,再格式化使用後,對於主機來說相當於本地盤,那么主機A的本地盤根本不能給主機B去使用,無法共享數據。

3、不利於不同作業系統主機間的數據共享:另外一個原因是因為作業系統使用不同的檔案系統,格式化完之後,不同檔案系統間的數據是共享不了的。例如一台裝了WIN7/XP,檔案系統是FAT32/NTFS,而Linux是EXT4,EXT4是無法識別NTFS的檔案系統的。就像一隻NTFS格式的隨身碟,插進Linux的筆記本,根本無法識別出來。所以不利於檔案共享。

檔案存儲

典型設備:FTP、NFS伺服器

為了克服上述檔案無法共享的問題,所以有了檔案存儲。

檔案存儲也有軟硬一體化的設備,但是其實普通拿一台伺服器/筆記本,只要裝上合適的作業系統與軟體,就可以架設FTP與NFS服務了,架上該類服務之後的伺服器,就是檔案存儲的一種了。

主機A可以直接對檔案存儲進行檔案的上傳下載,與塊存儲不同,主機A是不需要再對檔案存儲進行格式化的,因為檔案管理功能已經由檔案存儲自己搞定了。

優點:

1、造價交低:隨便一台機器就可以了,另外普通乙太網就可以,根本不需要專用的SAN網路,所以造價低。

2、方便檔案共享:例如主機A(WIN7,NTFS檔案系統),主機B(Linux,EXT4檔案系統),想互拷一部電影,本來不行。加了個主機C(NFS伺服器),然後可以先A拷到C,再C拷到B就OK了。(例子比較膚淺,請見諒……)

缺點:

讀寫速率低,傳輸速率慢:乙太網,上傳下載速度較慢,另外所有讀寫都要1台伺服器裡面的硬碟來承擔,相比起磁碟陣列動不動就幾十上百塊硬碟同時讀寫,速率慢了許多。

對象存儲

典型設備:內置大容量硬碟的分散式伺服器

對象存儲最常用的方案,就是多台伺服器內置大容量硬碟,再裝上對象存儲軟體,然後再額外搞幾台服務作為管理節點,安裝上對象存儲管理軟體。管理節點可以管理其他伺服器對外提供讀寫訪問功能。

之所以出現了對象存儲這種東西,是為了克服塊存儲與檔案存儲各自的缺點,發揚它倆各自的優點。簡單來說塊存儲讀寫快,不利於共享,檔案存儲讀寫慢,利於共享。能否弄一個讀寫快,利 於共享的出來呢。於是就有了對象存儲。

首先,一個檔案包含了了屬性(術語叫metadata,元數據,例如該檔案的大小、修改時間、存儲路徑等)以及內容(以下簡稱數據)。

以往像FAT32這種檔案系統,是直接將一份檔案的數據與metadata一起存儲的,存儲過程先將檔案按照檔案系統的最小塊大小來打散(如4M的檔案,假設檔案系統要求一個塊4K,那么就將檔案打散成為1000個小塊),再寫進硬碟裡面,過程中沒有區分數據/metadata的。而每個塊最後會告知你下一個要讀取的塊的地址,然後一直這樣順序地按圖索驥,最後完成整份檔案的所有塊的讀取。

這種情況下讀寫速率很慢,因為就算你有100個機械手臂在讀寫,但是由於你只有讀取到第一個塊,才能知道下一個塊在哪裡,其實相當於只能有1個機械手臂在實際工作。

而對象存儲則將元數據獨立了出來,控制節點叫元數據伺服器(伺服器+對象存儲管理軟體),裡面主要負責存儲對象的屬性(主要是對象的數據被打散存放到了那幾台分散式伺服器中的信息),而其他負責存儲數據的分散式伺服器叫做OSD,主要負責存儲檔案的數據部分。當用戶訪問對象,會先訪問元數據伺服器,元數據伺服器只負責反饋對象存儲在哪些OSD,假設反饋檔案A存儲在B、C、D三台OSD,那么用戶就會再次直接訪問3台OSD伺服器去讀取數據。

這時候由於是3台OSD同時對外傳輸數據,所以傳輸的速度就加快了。當OSD伺服器數量越多,這種讀寫速度的提升就越大,通過此種方式,實現了讀寫快的目的。

另一方面,對象存儲軟體是有專門的檔案系統的,所以OSD對外又相當於檔案伺服器,那么就不存在檔案共享方面的困難了,也解決了檔案共享方面的問題。

所以對象存儲的出現,很好地結合了塊存儲與檔案存儲的優點。

塊存儲、對象和檔案存儲架構區別

塊存儲

塊存儲是一種裸設備,它是將存儲設備以“塊”的方式直接提供給客戶,由客戶自己的作業系統里的檔案系統進行管理。

華為的FusionStorage是一個典型的“塊”存儲。FusionStorage分成了MDC、OSD和Client三部分。和其他分散式存儲重大的差別是:MDC是記錄、更新OSD伺服器、磁碟等的狀態,並把這些狀態數據實時同步給Vbs,由Vbs計算出來數據所落的位置。MDC可以單獨部署,也可以集中部署,也可以分布部署。

一般分散式存儲的MDC採用的是資料庫或記憶體儲資料庫來記錄數據塊和物理位置關係。客戶端向MDC發出詢問位置的請求,MDC查詢資料庫後返回請求數據的存儲位置。

這種方法存儲訪問的速度較慢,而且MDC作為交通的“樞紐”,絕對是整個存儲的核心,當MDC發生故障,會導致整個存儲都不能使用。但是採取這個方式,也有好處,比如可以根據不同需求設定不同的副本策略等。

對象存儲

對象存儲是在同樣容量下提供的存儲性能比檔案存儲更好,又能像檔案存儲一樣有很好的共享性。實際使用中,性能不是對象存儲最關注的問題,需要高性能可以用塊存儲,容量才是對象存儲最關注的問題。

所以對象存儲的持久化層的硬碟數量更多,單盤的容量也更大。對象存儲的數據的安全性保障也各式各樣,可以是單機raid或網路raid,也可以副本。

Ceph和google基於GFS的存儲就是典型的對象存儲。

區別

分散式塊存儲里是沒有檔案系統的,是通過客戶端直接將最簡單明了的命令傳遞給存儲的“塊”來執行。

對象存儲和檔案存儲雖然結構類似,但並不將存儲底層的“塊”直接提供出來,而是通過隱藏著一個檔案系統,包裝成為“檔案”或“對象”提供出來。

這些存儲“不挑”作業系統或終端,最終執行命令的是存儲裡面的檔案系統操控存儲執行的,所以共享性很好。

檔案存儲通過“目錄+檔案名稱+偏移量”來檢索,檔案間有目錄層次的;

而對象存儲採用“唯一對象ID+偏移量”來檢索,對象扁平存儲的,是沒有層次的。而且塊、對象、檔案存儲是可以相互轉換的。

相關詞條

熱門詞條

聯絡我們