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

一. Ceph的塊設備存儲介面

首先,什麼是塊設備?塊設備是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:系統按檢測順序命名硬碟會導致了盤符漂移的問題。怎麼還有的叫 rbd1 和 rbd2 呢?

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

那麼塊設備怎麼用呢?這裡舉個例子:打個比方,一個塊設備是一個糧倉,數據就是糧食。農民伯伯可以存糧食(寫數據)了,需要存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:想了解更多?快去查查SANNAS為什麼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塊設備差。對象存儲介面是一種折中,保證一定的存儲性能,同時支持多客戶端共享讀寫。五. 關注筆者專註筆者公眾號,閱讀更多乾貨文章:)

如果覺得文章有幫助,佛系打賞哈~

推薦閱讀:

相關文章