一篇文章讓你理解Ceph的三種存儲接口(塊設備、文件系統、對象存儲)

「Ceph是一個開源的、統一的、分佈式的存儲系統」,這是咱們宣傳Ceph時常說的一句話,其中「統一」是說Ceph能夠一套存儲系統同時提供塊設備存儲、文件系統存儲和對象存儲三種存儲功能。一聽這句話,具備必定存儲基礎的用戶應該已經大體瞭解了Ceph的存儲接口,而沒有存儲基礎的小白用戶則 一臉懵逼。本文旨在讓小白用戶理解Ceph的塊存儲、文件系統存儲和對象存儲接口。web

 

一. Ceph的塊設備存儲接口

首先,什麼是塊設備?ruby

塊設備是i/o設備中的一類,是將信息存儲在固定大小的塊中,每一個塊都有本身的地址,還能夠在設備的任意位置讀取必定長度的數據。看不懂?那就暫且認爲塊設備就是硬盤或虛擬硬盤吧。網絡

查看下Linux環境中的設備:數據結構

root@nb:~$ ls /dev/ /dev/sda/ dev/sda1 /dev/sda2 /dev/sdb /dev/sdb1 /dev/hda /dev/rbd1 /dev/rbd2 … 

上面的/dev/sda、/dev/sdb和/dev/hda都是塊設備文件,這些文件是怎麼出現的呢?分佈式

當給計算機鏈接塊設備(硬盤)後,系統檢測的有新的塊設備,該類型塊設備的驅動程序就在/dev/下建立個對應的塊設備設備文件,用戶就能夠經過設備文件使用該塊設備了。性能

它們怎麼有的叫 sda?有的叫 sdb?有的叫 hda?學習

以sd開頭的塊設備文件對應的是SATA接口的硬盤,而以hd開頭的塊設備文件對應的是IDE接口的硬盤。那SATA接口的硬盤跟IDE接口的硬盤有啥區別?你只須要知道,IDE接口硬盤已經不多見到了,逐漸被淘汰中,而SATA接口的硬盤是目前的主流。而sda和sdb的區別呢?當系統檢測到多個SATA硬盤時,會根據檢測到的順序對硬盤設備進行字母順序的命名。PS:系統按檢測順序命名硬盤會致使了盤符漂移的問題。spa

怎麼還有的叫 rbd1 和 rbd2 呢?3d

被你發現了,rbd就是咱們壓軸主角了。rbd就是由Ceph集羣提供出來的塊設備。能夠這樣理解,sda和hda都是經過數據線鏈接到了真實的硬盤,而rbd是經過網絡鏈接到了Ceph集羣中的一塊存儲區域,往rbd設備文件寫入數據,最終會被存儲到Ceph集羣的這塊區域中。code

那麼塊設備怎麼用呢?這裏舉個例子:

打個比方,一個塊設備是一個糧倉,數據就是糧食。農民伯伯能夠存糧食(寫數據)了,須要存100斤玉米,糧倉(塊設備)這麼大放哪裏呢,就挨着放(順序寫)吧。又須要存1000斤花生,仍是挨着放吧。又須要存……

後來,農民伯伯來提糧食(讀數據)了,他當時存了1000斤小麥,哎呀媽呀,糧倉這麼大,小麥在哪裏啊?倉庫管理員找啊找,而後哭暈在了廁所……

新管理員到任後,想了個法子來解決這個問題,用油漆把倉庫劃分紅了方格狀,而且編了號,在倉庫門口的方格那掛了個黑板,當農民伯伯來存糧食時,管理員在黑板記錄,張三存了1000斤小麥在xx方格處。後來,農民伯伯張三來取糧食時,倉庫管理員根據小黑板的記錄很快提取了糧食。

故事到此爲止了,沒有方格和黑板的倉庫(塊設備)稱爲裸設備。由上例可見,裸設備對於用戶使用是很不友好的,直接致使了舊倉庫管理員的狗帶。例子中劃分方格和掛黑板的過程實際上是在塊設備上構建文件系統的過程,文件系統能夠幫助塊設備對存儲空間進行條理的組織和管理,因而新管理員經過文件系統(格子和黑板)迅速找到了用戶(農民伯伯張三)存儲的數據(1000斤小麥)。針對多種多樣的使用場景,衍生出了不少的文件系統。有的文件系統可以提供更好的讀性能,有的文件系統能提供更好的寫性能。咱們平時經常使用的文件系統如xfs、ext4是讀寫性能等各方面比較均衡的通用文件系統。

可否直接使用不含有文件系統塊設備呢?

能夠的,xfs和ext4等通用的文件系統旨在知足大多數用戶的存儲需求,因此在數據存儲的各方面的性能比較均衡。然而,不少應用每每並不須要這種均衡,而須要突出某一方面的性能,如小文件的存儲性能。此時,xfs、ext4等通用文件系統若是不能知足應用的需求,應用每每會在裸設備上實現本身的數據組織和管理方式。簡單的說,就是應用爲了強化某種存儲特性而實現本身定製的數據組織和管理方式,而不使用通用的文件系統。

Ceph塊設備接口怎麼使用?

在Ceph集羣中建立塊設備:

// 保證/etc/ceph目錄下有Ceph集羣的配置文件ceph.conf和ceph.client.admin.keyring rbd create -s 1G myrbd 在用戶機上掛載該Ceph塊設備,能夠理解爲往用戶機上插入硬盤: rbdmap myrbd // 輸出: /dev/rbd1 

將Ceph塊設備格式化成文件系統並掛載:

mkfs.xfs /dev/rbd1
mkdir -p /mnt/ceph_rbd
mount /dev/rbd1 /mnt/ceph_rbd

經過/mnt/ceph_rbd讀寫數據,都是在讀寫Ceph集羣中該塊設備對應的存儲區域

總結一下,塊設備可理解成一塊硬盤,用戶能夠直接使用不含文件系統的塊設備,也能夠將其格式化成特定的文件系統,由文件系統來組織管理存儲空間,從而爲用戶提供豐富而友好的數據操做支持。

二. Ceph的文件系統存儲接口

什麼是Ceph的文件系統接口?

還記得上面說的塊設備上的文件系統嗎,用戶能夠在塊設備上建立xfs文件系統,也能夠建立ext4等其餘文件系統。如圖1,Ceph集羣實現了本身的文件系統來組織管理集羣的存儲空間,用戶能夠直接將Ceph集羣的文件系統掛載到用戶機上使用。

 
圖1 Ceph的塊設備接口和文件系統接口對比

Ceph有了塊設備接口,在塊設備上徹底能夠構建一個文件系統,那麼Ceph爲何還須要文件系統接口呢?

主要是由於應用場景的不一樣,Ceph的塊設備具備優異的讀寫性能,但不能多處掛載同時讀寫,目前主要用在OpenStack上做爲虛擬磁盤,而Ceph的文件系統接口讀寫性能較塊設備接口差,但具備優異的共享性。PS:想了解更多?快去查查SAN和NAS。

爲何Ceph的塊設備接口不具備共享性,而Ceph的文件系統接口具備呢?

對於Ceph的塊設備接口,如圖2,文件系統的結構狀態是維護在各用戶機內存中的,假設Ceph塊設備同時掛載到了用戶機1和用戶機2,當在用戶機1上的文件系統中寫入數據後,更新了用戶機1的內存中文件系統狀態,最終數據存儲到了Ceph集羣中,可是此時用戶機2內存中的文件系統並不能得知底層Ceph集羣數據已經變化而維持數據結構不變,所以用戶沒法從用戶機2上讀取用戶機1上新寫入的數據。

對於Ceph的文件系統接口,如圖3,文件系統的結構狀態是維護在遠端Ceph集羣中的,Ceph文件系統同時掛載到了用戶機1和用戶機2,當往用戶機1的掛載點寫入數據後,遠端Ceph集羣中的文件系統狀態結構隨之更新,當從用戶機2的掛載點訪問數據時會去遠端Ceph集羣取數據,因爲遠端Ceph集羣已更新,全部用戶機2可以獲取最新的數據。


 
圖2 Ceph塊設備接口共享性
 
圖3 Ceph文件系統接口共享性

Ceph的文件系統接口使用方式?

將Ceph的文件系統掛載到用戶機目錄

/* 保證/etc/ceph目錄下有Ceph集羣的配置文件ceph.conf和ceph.client.admin.keyring */ mkdir -p /mnt/ceph_fuse ceph-fuse /mnt/ceph_fuse 

大功告成,在/mnt/ceph_fuse下讀寫數據,都是讀寫遠程Ceph集羣

總結一下,Ceph的文件系統接口彌補了Ceph的塊設備接口在共享性方面的不足,Ceph的文件系統接口符合POSIX標準,用戶能夠像使用本地存儲目錄同樣使用Ceph的文件系統的掛載目錄。仍是不懂?這樣理解吧,無需修改你的程序,就能夠將程序的底層存儲換成空間無限並可多處共享讀寫的Ceph集羣文件系統。

三. Ceph的對象存儲接口

首先,經過圖4來看下對象存儲接口是怎麼用的?

簡單了說,使用方式就是經過http協議上傳下載刪除對象(文件即對象)。


 
圖4 對象存儲接口的使用方式

老問題來了,有了塊設備接口存儲和文件系統接口存儲,爲何還整個對象存儲呢?

往簡單了說,Ceph的塊設備存儲具備優異的存儲性能但不具備共享性,而Ceph的文件系統具備共享性然而性能較塊設備存儲差,爲何不權衡一下存儲性能和共享性,整個具備共享性而存儲性能好於文件系統存儲的存儲呢,對象存儲就這樣出現了。

對象存儲爲何性能會比文件系統好?

緣由是多方面的,主要緣由是對象存儲組織數據的方式相對簡單,只有bucket和對象兩個層次(對象存儲在bucket中),對對象的操做也相對簡單。而文件系統存儲具備複雜的數據組織方式,目錄和文件層次可具備無限深度,對目錄和文件的操做也複雜的多,所以文件系統存儲在維護文件系統的結構數據時會更加繁雜,從而致使文件系統的存儲性能偏低。

Ceph的對象存儲接口怎麼用呢?

Ceph的對象接口符合亞馬遜S3接口標準和OpenStack的Swift接口標準,能夠自行學習這兩種接口。

總結一下,文件系統存儲具備複雜的數據組織結構,可以提供給用戶更加豐富的數據操做接口,而對象存儲精簡了數據組織結構,提供給用戶有限的數據操做接口,以換取更好的存儲性能。對象接口提供了REST API,很是適用於做爲web應用的存儲。

四. 總結

歸納一下,塊設備速度快,對存儲的數據沒有進行組織管理,但在大多數場景下,用戶數據讀寫不方便(以塊設備位置offset + 數據的length來記錄數據位置,讀寫數據)。而在塊設備上構建了文件系統後,文件系統幫助塊設備組織管理數據,數據存儲對用戶更加友好(以文件名來讀寫數據)。Ceph文件系統接口解決了「Ceph塊設備+本地文件系統」不支持多客戶端共享讀寫的問題,但因爲文件系統結構的複雜性致使了存儲性能較Ceph塊設備差。對象存儲接口是一種折中,保證必定的存儲性能,同時支持多客戶端共享讀寫。

五. 關注筆者

專一筆者公衆號,閱讀更多幹貨文章:)

相關文章
相關標籤/搜索