Ceph是壹個奇怪的文件系統名稱,打破了大多數人遵循的典型縮寫趨勢。這個名字與UCSC(CEPH的出生地)的吉祥物有關。這個吉祥物叫“薩米”,是壹種香蕉色的蛞蝓,是頭足類動物中無殼的軟體動物。這些多觸手的頭足類動物為分布式文件系統提供了最生動的比喻。
開發壹個分布式文件系統需要付出很多努力,但如果能準確解決問題,那就是無價之寶。Ceph的目標簡單地定義為:
不幸的是,這些目標會相互競爭(例如,可伸縮性會降低或抑制性能或影響可靠性)。Ceph開發了壹些非常有趣的概念(例如,動態元數據分區、數據分布和復制),本文僅對其進行簡要討論。Ceph的設計還包括了保護單點故障的容錯功能,該功能假設大規模(PB級存儲)存儲故障是普遍現象而非例外。最後,它的設計沒有假設特殊的工作負載,但包括適應不斷變化的工作負載並提供最佳性能的能力。它使用POSIX兼容性來完成所有這些任務,允許它透明地部署當前依賴於POSIX語義的應用程序(通過針對Ceph的改進)。最後,Ceph是壹個開源的分布式存儲,是主線Linux內核(2.6.34)的壹部分。
現在,我們來討論Ceph的結構和高端核心元素。然後,我將擴展到另壹個層次,解釋Ceph的壹些關鍵方面,並提供更詳細的討論。
Ceph生態系統大致可以分為四個部分(見圖1):客戶端(數據用戶)、元數據服務器(緩存和同步分布式元數據)、壹個對象存儲集群(將數據和元數據存儲為對象以執行其他關鍵功能),最後是集群監控器(執行監控功能)。
如圖1所示,客戶端使用元數據服務器執行元數據操作(確定數據位置)。元數據服務器管理數據的位置和存儲新數據的位置。值得註意的是,元數據存儲在存儲集群中(標記為“元數據I/O”)。實際的文件I/O發生在客戶端和對象存儲集群之間。這樣,更高級別的POSIX功能(比如打開、關閉和重命名)由元數據服務器管理,但是POSIX功能(比如讀寫)由對象存儲集群直接管理。
圖2提供了另壹個架構視圖。壹系列服務器通過客戶端接口訪問Ceph生態系統,該接口顯示了元數據服務器和對象級存儲之間的關系。分布式存儲系統可以分為幾個層次,包括存儲設備的格式(擴展和基於B樹的對象文件系統[EBOFS]或替代方案),以及旨在管理數據復制、故障檢測、恢復和後續數據遷移的覆蓋管理層,稱為可靠自治分布式對象存儲(RADOS)。最後,監視器用於識別組件故障,包括後續通知。
在理解了Ceph的概念架構之後,您可以深入到另壹個層次來理解Ceph中實現的主要組件。Ceph與傳統文件系統的壹個重要區別是,它使用了生態環境中的智能,而不是文件系統本身。
圖3顯示了壹個簡單的Ceph生態系統。Ceph客戶端是ceph文件系統的用戶。Ceph元數據守護進程提供元數據服務器,而Ceph對象存儲守護進程提供實際存儲(數據和元數據)。最後,Ceph Monitor提供集群管理。應該註意,可以有許多Ceph客戶機、對象存儲端點和元數據服務器(根據文件系統的容量),以及至少壹對冗余監視器。那麽,這個文件系統是如何分布的呢?
Ceph的早期版本使用用戶空間中的文件系統(FUSE),將文件系統推入用戶空間,大大簡化了開發。但是今天,Ceph已經被集成到主線內核中,以使它更快,因為文件系統I/O不再需要用戶空間上下文切換。
因為Linux顯示了文件系統的公共接口(通過虛擬文件系統開關([VFS])),所以Ceph的用戶視角是透明的。考慮到許多服務器將包含存儲系統這壹潛在因素,管理員的視角必須有所不同(有關創建Ceph集群的更多信息,請參見參考資料)。從用戶的角度來看,他們訪問的是壹個大容量的存儲系統,但他們不知道聚合成壹個大容量存儲池的元數據服務器、監視器和獨立的對象存儲設備。用戶只需看到壹個安裝點,就可以執行標準的文件I/O。
Ceph文件系統——或者至少是客戶機接口——是在Linux內核中實現的。值得註意的是,在大多數文件系統中,所有的控制和智能都是在內核文件系統源本身中執行的。但在Ceph中,文件系統的智能分布在節點上,簡化了客戶端接口,為Ceph提供了大規模(甚至動態)的擴展能力。
Ceph使用了壹個有趣的替代方法,而不是依賴分配列表(將磁盤上的塊映射到指定文件的元數據)。Linux透視圖中的文件將被分配壹個來自元數據服務器的索引節點號(INO ),這是文件的唯壹標識符。然後將文件推入壹些對象中(取決於文件的大小)。使用INO和對象編號(ONO),每個對象都被分配壹個對象ID(OID)。使用OID上的簡單散列,每個對象被分配到壹個放置組。放置組(標識為PGID)是對象的概念容器。最後,放置組到對象存儲設備的映射是偽隨機映射,並且使用了稱為可伸縮散列下的受控復制(Crush)的算法。這樣,放置組(和副本)到存儲設備的映射不依賴於任何元數據,而是依賴於偽隨機映射函數。這種操作非常理想,因為它最小化了存儲開銷,簡化了分配和數據查詢。
分配的最後壹個部分是集群映射。集群映射是設備的有效表示,顯示存儲集群。通過PGID和集群映射,您可以定位任何對象。
元數據服務器(cmds)的工作是管理文件系統的名稱空間。盡管元數據和數據都存儲在對象存儲集群中,但它們是分開管理的,以支持可伸縮性。事實上,元數據在壹個元數據服務器集群上被進壹步拆分,該集群可以自適應地復制和分配名稱空間以避免熱點。如圖4所示,元數據服務器管理可以重疊的名稱空間部分(為了冗余和性能)。元數據服務器到名稱空間的映射是在Ceph中使用動態子樹邏輯分區實現的,這允許Ceph調整不斷變化的工作負載(在元數據服務器之間遷移名稱空間),同時保持性能的位置。
但是,因為每個元數據服務器只是管理客戶機群體的名稱空間,所以它的主要應用程序是智能元數據緩存(因為實際的元數據最終存儲在對象存儲集群中)。寫操作的元數據被緩存在短期日誌中,最後被推入物理存儲。此操作允許元數據服務器向客戶反饋最新的元數據(這在元數據操作中很常見)。這個日誌對於故障恢復也非常有用:如果元數據服務器出現故障,它的日誌將被重放,以確保元數據安全地存儲在磁盤上。
元數據服務器管理inode空間,並將文件名轉換為元數據。元數據服務器將文件名轉換為Ceph客戶機用於文件I/O的索引節點、文件大小和分段數據(布局)..
Ceph包含實現集群映射管理的監視器,但是故障管理的壹些元素是在對象存儲本身中執行的。當對象存儲設備出現故障或添加新設備時,監視器會檢測並維護有效的集群映射。該功能以分布式方式執行,其中映射升級可以與當前流量通信。Ceph使用Paxos,這是壹系列分布式算法。
與傳統的對象存儲類似,Ceph存儲節點不僅包括存儲,還包括智能。傳統的驅動程序是簡單的目標,只響應來自啟動器的命令。但是,對象存儲設備是壹種智能設備,可以作為目標和發起方,支持與其他對象存儲設備的通信和協作。
從存儲的角度來看,Ceph對象存儲設備執行從對象到塊的映射(這是壹項經常在客戶機的文件系統層執行的任務)。該動作允許本地實體決定如何以最佳方式存儲對象。Ceph的早期版本在名為EBOFS的本地存儲上實現了壹個定制的低級文件系統。該系統實現了對底層存儲的非標準接口,該接口已經針對對象語義和其他特性進行了調整,比如對磁盤提交的異步通知。今天,B樹文件系統(BTRFS)可以用於存儲節點,並且它已經實現了壹些必要的功能(如嵌入式完整性)。
因為Ceph客戶實現CRUSH,對磁盤上的文件映射塊壹無所知,所以下面的存儲設備可以安全地管理對象到塊的映射。這允許存儲節點拷貝數據(當發現設備出現故障時)。分布式故障恢復還允許存儲系統擴展,因為故障檢測和恢復是跨生態系統分布的。Ceph稱之為RADOS(見圖3)。
如果文件系統的動態和自適應特性還不夠,Ceph還執行壹些用戶可以看到的有趣功能。例如,用戶可以在Ceph的任何子目錄中創建快照(包括所有內容)。可以在子目錄級別執行文件和容量計算,這將報告給定子目錄(及其內容)的存儲大小和文件編號。
盡管Ceph現在已經集成到主線Linux內核中,但它只是被標記為實驗性的。處於這種狀態的文件系統對於測試很有用,但是它還不能用於生產環境。不過考慮到Ceph已經加入了Linux內核的行列,以及其創始人繼續研發的動力,在不久的將來應該會用來解決妳的海量存儲需求。
Ceph在分布式文件系統空間中並不獨特,但在管理海量存儲生態環境的方法上是獨特的。分布式文件系統的其他示例包括Google文件系統(GFS)、通用並行文件系統(GPFS)和Lustre,僅舉幾例。Ceph背後的想法為分布式文件系統提供了壹個有趣的未來,因為海量存儲帶來了海量存儲的唯壹挑戰。