1. 程式人生 > >ceph簡介

ceph簡介

分布式存儲ceph

1、初認ceph
剛到公司後,開始接觸軟件存儲產品,發現都是基於一個叫ceph的開源解決方案來做的。後來慢慢開始關於ceph的一些基礎知識和相關操作。接觸的產品囊括了ceph所支持的塊存儲,對象存儲和文件存儲。

2、ceph來源
ceph產生於Sage Weil大神大學時期的相關研究課題的論文,之後逐漸為大眾所熟知,Sage Weil後來開辦公司主導ceph的開發與社區維護。

3、ceph的特性
(1) 高可靠性:所謂“高可靠”,首先是針對存儲在系統中的數據而言,也即,盡可能保證數據不會丟失。其次,也包括數據寫入過程中的可靠性,也即,在用戶將數據寫入Ceph存儲系統的過程中,不會因為意外情況的出現造成數據丟失。

(2)高度自動化:具體包括了數據的自動replication,自動re-balancing,自動failure detection和自動failure recovery。總體而言,這些自動化特性一方面保證了系統的高度可靠,一方面也保障了在系統規模擴大之後,其運維難度仍能保持在一個相對較低的水平。
(3)高可擴展性:這裏的“可擴展”概念比較廣義,既包括了系統規模和存儲容量的可擴展,也包括了隨著系統節點數增加的聚合數據訪問帶寬的線性擴展,還包括了基於功能豐富強大的底層API提供多種功能、支持多種應用的功能性可擴展。

4、ceph的特色
作為一個提供分布式存儲解決方案,那麽它就要涉及到數據應該寫到哪裏,該去×××到數據這兩個基本問題。

ceph獨特之處就在於此,借用ceph淺析文章中的一句話就是“無需查表,算算就好”。
針對上述兩個問題,傳統方案是引入專用的服務器節點,在其中存儲用於維護數據存儲空間映射關系的數據結構。在用戶寫入/訪問數據時,首先連接這一服務器進行查找操作,待決定/查到數據實際存儲位置後,再連接對應節點進行後續操作。而Ceph徹底放棄了基於查表的數據尋址方式,而改用基於計算的方式。簡言之,任何一個Ceph存儲系統的客戶端程序,僅僅使用不定期更新的少量本地元數據,加以簡單計算,就可以根據一個數據的ID決定其存儲位置。

5、ceph架構和rados邏輯結構
技術分享圖片
rados:基礎存儲系統RADOS(Reliable, Autonomic, Distributed Object Store,即可靠的、自動化的、分布式的對象存儲)。所有存儲在Ceph系統中的用戶數據事實上最終都是由這一層來存儲的。而Ceph的高可靠、高可擴展、高性能、高自動化等等特性本質上也是由這一層所提供的。

librados:這一層的功能是對RADOS進行抽象和封裝,並向上層提供API,以便直接基於RADOS(而不是整個Ceph)進行應用開發。特別要註意的是,RADOS是一個對象存儲系統,因此,librados實現的API也只是針對對象存儲功能的。
radosgw,rbd,ceph fs:這三個是高層應用接口,分別對應對象存儲,塊存儲和文件存儲業務。其作用是在librados庫的基礎上提供抽象層次更高、更便於應用或客戶端使用的上層接口。

ps:librados和radosgw都可以提供關於對象存儲的接口,但兩者還是有不同的,radosgw抽象層次更高提供兼容Amazon S3和swift的restful api,I所操作的“對象”只有三個:用戶賬戶、用戶存儲數據對象的容器、數據對象,並且所有的操作均不涉及存儲系統的底層硬件或系統信息。而librados則提供的是本地api。librados API向開發者開放了大量的RADOS狀態信息與配置參數,允許開發者對RADOS系統以及其中存儲的對象的狀態進行觀察,並強有力地對系統存儲策略進行控制。

技術分享圖片

rados的邏輯結構由osd和mon這兩個角色組成,在文件系統場景下有mds的角色出現,這裏不討論這個東西。
osd:為數眾多的、負責完成數據存儲和維護功能的節點
mon:若幹個負責完成系統狀態檢測和維護
在使用RADOS系統時,大量的客戶端程序通過與OSD或者monitor的交互獲取cluster map,然後直接在本地進行計算,得出對象的存儲位置後,便直接與對應的OSD通信,完成數據的各種操作。可見,在此過程中,只要保證cluster map不頻繁更新,則客戶端顯然可以不依賴於任何元數據服務器,不進行任何查表操作,便完成數據訪問流程。在RADOS的運行過程中,cluster map的更新完全取決於系統的狀態變化,而導致這一變化的常見事件只有兩種:OSD出現故障,或者RADOS規模擴大。而正常應用場景下,這兩種事件發生的頻率顯然遠遠低於客戶端對數據進行訪問的頻率。

後面再會講講ceph數據讀寫流程和crush算法的一些內容。

ceph簡介