一 Ceph簡介
Red Hat Ceph是一個分佈式的數據對象存儲,系統設計旨在性能、可靠性和可擴展性上可以提供優秀的存儲服務。分佈式對象存儲是存儲的將來,由於它們適應非結構化數據,而且客戶端能夠同時使用當前及傳統的對象接口進行數據存取。例如:
- 本地語言綁定接口(C/C++, Java, Python)
- RESTful 接口(S3/Swift)
- 塊設備接口
- 文件系統接口
Red Hat Ceph具備很是好的可擴展性——數以千計的客戶端能夠訪問PB級到EB級甚至更多的數據。
二 Ceph優點及特色
2.1 Ceph優點
Ceph區別於其餘文件系統(如glusterfs、swift等)主要具備如下優點:
CRUSH算法運行在Ceph Clients和Ceph OSD上,用於計算對象的位置信息,它代替了傳統的查表的思想,把工做分攤到全部Ceph Clients和Ceph OSD上,加強了彈性擴展和高可用性,是ceph的兩大創新之一。ceph摒棄了傳統的集中式存儲元數據尋址的方案,而使用CRUSH算法完成數據的尋址操做。CRUSH在一致性哈希基礎上很好的考慮了容災域的隔離,可以實現各種負載的副本放置規則,例如跨機房、機架感知等。Crush算法有至關強大的擴展性,理論上支持數千個存儲節點。
Ceph中的數據副本數量能夠由管理員自行定義,並能夠經過CRUSH算法指定副本的物理存儲位置以分隔故障域,支持數據強一致性;ceph能夠忍受多種故障場景並自動嘗試並行修復。
Ceph不一樣於swift,客戶端全部的讀寫操做都要通過代理節點,一旦集羣併發量增大時,代理節點很容易成爲單點瓶頸。Ceph自己並無主控節點,擴展起來比較容易,而且理論上,它的性能會隨着磁盤數量的增長而線性增加。
Ceph支持三種調用接口:對象存儲,塊存儲,文件系統掛載。三種方式能夠一同使用。
2.2 Ceph特色
- 統一存儲
- 無任何單點故障
- 數據多份冗餘
- 存儲容量可擴展
- 自動容錯及故障自愈
三 體系架構
體系架構示意圖(來源於官方):
3.1 RADOS
Ceph的底層核心爲RADOS(Reliable, Autonomic Distributed Object Store),RADOS自己也是分佈式存儲系統,CEPH全部的存儲功能都是基於RADOS實現。Ceph的上層應用調用本機上的librados API,再由後者經過socket與RADOS集羣中的其餘節點通訊並完成各類操做。
Ceph的本質是一個對象存儲。RADOS由兩個組件組成:OSD和Monitor。
OSD主要提供存儲資源,每個disk、SSD、RAID group或者一個分區均可以成爲一個OSD,而每一個OSD還將負責向該對象的複雜節點分發和恢復;
Monitor維護Ceph集羣並監控Ceph集羣的全局狀態,提供一致性的決策。
RADOS分發策略依賴於CRUSH(Controlled Replication Under Scalable Hashing)算法(基於可擴展哈希算法的可控複製)。
3.2 RADOS GW和RBD
RADOS GateWay、RBD其做用是在librados庫的基礎上提供抽象層次更高、更便於應用或客戶端使用的上層接口。其中,RADOS GW是一個提供與Amazon S3和Swift兼容的RESTful API的gateway,以供相應的對象存儲應用開發使用。
RBD則提供了一個標準的塊設備接口,經常使用於在虛擬化的場景下爲虛擬機建立volume。目前,Red Hat已經將RBD驅動集成於KVM/QEMU中,以提升虛擬機訪問性能。這兩種方式目前在雲計算中應用的比較多。
3.3 CEPHFS
CEPHFS則提供了POSIX接口,用戶可直接經過客戶端掛載使用。它是內核態的程序,因此無需調用用戶空間的librados庫。它經過內核中的net模塊來與Rados進行交互。
四 Ceph角色及原理
4.1 角色及做用
全部Ceph存儲集羣的部署都始於部署一個個Ceph節點、網絡和Ceph存儲集羣。Ceph存儲集羣至少須要一個Ceph Monitor和兩個OSD守護進程。而運行Ceph文件系統客戶端時,則必需要有元數據服務器(Metadata Server)。
- Ceph OSDs:Ceph OSD守護進程( Ceph OSD )的功能是存儲數據,處理數據的複製、恢復、回填、再均衡,並經過檢查其餘OSD守護進程的心跳來向Ceph Monitors提供一些監控信息。當Ceph存儲集羣設定爲有2個副本時,至少須要2個OSD守護進程,集羣才能達到active+clean狀態(Ceph默認有3個副本)。
- Monitors:Ceph Monitor維護着展現集羣狀態的各類圖表,包括監視器圖、OSD圖、歸置組(PG)圖、和CRUSH 圖。Ceph 保存着發生在Monitors、OSD和PG上的每一次狀態變動的歷史信息(稱爲epoch)。
- MDSs: Ceph元數據服務器(MDS)爲Ceph文件系統存儲元數據(也就是說,Ceph塊設備和Ceph 對象存儲不使用MDS)。元數據服務器使得POSIX文件系統的客戶端,能夠在不對Ceph存儲集羣形成負擔的前提下,執行諸如ls、find等基本命令。
4.2 存儲通訊機制
當一個OSD須要存儲數據時(不論是來自Ceph塊設備、Ceph對象存儲、Ceph文件系統、仍是基於librados的自定義實現),Ceph OSD在扁平的命名空間內把全部數據都存儲爲對象。
提示:對象包含一個標識符、二進制數據、和由名字/值對組成的元數據,元數據語義徹底取決於Ceph客戶端。例如,CephFS用元數據存儲文件屬性,如文件全部者、建立日期、最後修改日期等等。一個對象ID不止在本地惟一 ,它在整個集羣內都是惟一的。
Ceph客戶端維護對象ID和存儲對象的存儲池名稱,但它們既不須要維護對象到OSD的索引,也不須要與一個集中的對象索引進行通訊來查找數據對象的位置。
爲了可以存儲並獲取數據,Ceph客戶端首先會訪問一臺Ceph mon並獲得最新的存儲集羣映射關係,而後Ceph客戶端能夠經過提供的對象名稱與存儲池名稱,使用集羣映射關係和CRUSH算法(可控的、可擴展的、分佈式的副本數據放置算法)來計算出提供對象所在的歸置組(PG)和主Ceph OSD。
最後,Ceph客戶端鏈接到可執行讀寫操做的主OSD上進而達到數據的存儲與獲取。客戶端和OSD之間沒有中間服務器,中間件或總線。
五 Ceph應用場景
Ceph的應用場景主要由它的架構肯定,Ceph提供對象存儲、塊存儲和文件存儲。
5.1 LIBRADOS應用
通俗理解,Librados提供了應用程序對RADOS的直接訪問,目前Librados已經提供了對C、C++、Java、Python、Ruby和PHP的支持。它支持單個單項的原子操做,如同時更新數據和屬性、CAS操做,同時有對象粒度的快照操做。它的實現是基於RADOS的插件API,也就是在RADOS上運行的封裝庫。
5.2 RADOSGW應用
此類場景基於Librados之上,增長了HTTP協議,提供RESTful接口而且兼容S三、Swfit接口。RADOSGW將Ceph集羣做爲分佈式對象存儲,對外提供服務。
5.3 RBD應用
此類場景也是基於Librados之上的,細分爲下面兩種應用場景。
第一種應用場景爲虛擬機提供塊設備。經過Librbd能夠建立一個塊設備(Container),而後經過QEMU/KVM附加到VM上。經過Container和VM的解耦,使得塊設備能夠被綁定到不一樣的VM上。
第二種應用場景爲主機提供塊設備。這種場景是傳統意義上的理解的塊存儲。
以上兩種方式都是將一個虛擬的塊設備分片存儲在RADOS中,都會利用數據條帶化提升數據並行傳輸,都支持塊設備的快照、COW(Copy-On-Write)克隆。最重要的是RBD還支持Live migration。
5.4 CephFS(Ceph文件系統)應用
此類場景是基於RADOS實現的PB級分佈式文件系統,其中引入MDS(Meta Date Server),它主要爲兼容POSIX文件系統提供元數據,好比文件目錄和文件元數據。同時MDS會將元數據存儲在RADOS中,這樣元數據自己也達到了並行化,能夠大大加快文件操做的速度。MDS自己不爲Client提供數據文件,只爲Client提供對元數據的操做。當Client打開一個文件時,會查詢並更新MDS相應的元數據(如文件包括的對象信息),而後再根據提供的對象信息直接從RADOS中獲得文件數據。
更多有趣知識可見:https://blog.csdn.net/sunhf_csdn/article/details/79797186
官方文檔:http://docs.ceph.org.cn
參考:http://ceph.org.cn/2018/06/29/red-hat-ceph%E5%AD%98%E5%82%A8-%E3%80%8A%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3ceph%E6%9E%B6%E6%9E%84%E3%80%8B/
https://www.jianshu.com/p/25163032f57f
http://www.51niux.com/?id=161