Ceph簡介
Ceph使用C++語言開發(fā),遵循LGPL協(xié)議開源。Sage Weil(Ceph論文發(fā)表者)于2011年創(chuàng)立了以Inktank公司主導(dǎo)Ceph的開發(fā)和社區(qū)維護(hù)。2014年Redhat收購inktank公司,并發(fā)布Inktank Ceph企業(yè)版(ICE)軟件,業(yè)務(wù)場景聚焦云、備份和歸檔,支持對象存儲和塊存儲以及文件系統(tǒng)存儲應(yīng)用。出現(xiàn)Ceph開源社區(qū)版本和Redhat企業(yè)版。
Cphe主要設(shè)計(jì)的初衷是變成一個可避免單節(jié)點(diǎn)故障的分布式文件系統(tǒng),PB級別的擴(kuò)展能力,而且是一種開源自由軟件,許多超融合的分布式文件系統(tǒng)都是基于Ceph開發(fā)的。
Ceph是一個統(tǒng)一的分布式存儲系統(tǒng),設(shè)計(jì)初衷是提供較好的性能、可靠性和可擴(kuò)展性。
ceph的優(yōu)勢
高擴(kuò)展性:使用普通x86服務(wù)器,支持10~1000臺服務(wù)器,支持TB到EB級的擴(kuò)展。
高可靠性:沒有單點(diǎn)故障,多數(shù)據(jù)副本,自動管理,自動修復(fù)。
高性能:數(shù)據(jù)分布均衡。
可用于對象存儲,塊設(shè)備存儲和文件系統(tǒng)存儲
ceph架構(gòu)
基礎(chǔ)存儲系統(tǒng)
rados:基礎(chǔ)存儲系統(tǒng)RADOS(Reliable, Autonomic, Distributed Object Store,即可靠的、自動化的、分布式的對象存儲)。所有存儲在Ceph系統(tǒng)中的用戶數(shù)據(jù)事實(shí)上最終都是由這一層來存儲的。Ceph的高可靠、高可擴(kuò)展、高性能、高自動化等等特性本質(zhì)上也是由這一層所提供的。
基礎(chǔ)庫librados:
librados:這一層的功能是對RADOS進(jìn)行抽象和封裝,并向上層提供API,以便直接基于RADOS(而不是整個Ceph)進(jìn)行應(yīng)用開發(fā)。特別要注意的是,RADOS是一個對象存儲系統(tǒng),因此,librados實(shí)現(xiàn)的API也只是針對對象存儲功能的。
高層應(yīng)用接口
radosgw:對象網(wǎng)關(guān)接口(對象存儲)
rbd:塊存儲
cephfs:文件系統(tǒng)存儲
其作用是在librados庫的基礎(chǔ)上提供抽象層次更高、更便于應(yīng)用或客戶端使用的上層接口。
Ceph的基本組件
Ceph主要有三個基本進(jìn)程
Osd
用于集群中所有數(shù)據(jù)與對象的存儲。處理集群數(shù)據(jù)的復(fù)制、恢復(fù)、回填、再均衡。并向其他osd守護(hù)進(jìn)程發(fā)送心跳,然后向Mon提供一些監(jiān)控信息。
當(dāng)Ceph存儲集群設(shè)定數(shù)據(jù)有兩個副本時(一共存兩份),則至少需要兩個OSD守護(hù)進(jìn)程即兩個OSD節(jié)點(diǎn),集群才能達(dá)到active+clean狀態(tài)。
MDS(可選)
為Ceph文件系統(tǒng)提供元數(shù)據(jù)計(jì)算、緩存與同步(也就是說,Ceph 塊設(shè)備和 Ceph 對象存儲不使用MDS )。在ceph中,元數(shù)據(jù)也是存儲在osd節(jié)點(diǎn)中的,mds類似于元數(shù)據(jù)的代理緩存服務(wù)器。MDS進(jìn)程并不是必須的進(jìn)程,只有需要使用CEPHFS時,才需要配置MDS節(jié)點(diǎn)。
Monitor
監(jiān)控整個集群的狀態(tài),維護(hù)集群的cluster MAP二進(jìn)制表,保證集群數(shù)據(jù)的一致性。ClusterMAP描述了對象塊存儲的物理位置,以及一個將設(shè)備聚合到物理位置的桶列表。
Manager(ceph-mgr)
用于收集ceph集群狀態(tài)、運(yùn)行指標(biāo),比如存儲利用率、當(dāng)前性能指標(biāo)和系統(tǒng)負(fù)載。對外提供 ceph dashboard(ceph ui)和 resetful api。Manager組件開啟高可用時,至少2個
ceph 結(jié)構(gòu)包含兩個部分
ceph client:訪問 ceph 底層服務(wù)或組件,對外提供各種接口。比如:對象存儲接口、塊存儲接口、文件級存儲接口。
ceph node:ceph 底層服務(wù)提供端,也就是 ceph 存儲集群。
Ceph存儲種類及其應(yīng)用場景
塊存儲
典型設(shè)備: 磁盤陣列,硬盤
主要是將裸磁盤空間映射給主機(jī)使用的。
優(yōu)點(diǎn):
通過Raid與LVM等手段,對數(shù)據(jù)提供了保護(hù)。
多塊廉價的硬盤組合起來,提高容量。
多塊磁盤組合出來的邏輯盤,提升讀寫效率。
缺點(diǎn):
采用SAN架構(gòu)組網(wǎng)時,光纖交換機(jī),造價成本高。
主機(jī)之間無法共享數(shù)據(jù)。
使用場景:
Docker容器、虛擬機(jī)磁盤存儲分配。
日志存儲。
文件存儲。
文件存儲
典型設(shè)備:FTP、NFS服務(wù)器
為了克服塊存儲文件無法共享的問題,所以有了文件存儲。
在服務(wù)器上架設(shè)FTP與NFS服務(wù),就是文件存儲。
優(yōu)點(diǎn):
造價低,隨便一臺機(jī)器就可以了。
方便文件共享。
缺點(diǎn):
讀寫速率低。
傳輸速率慢。
使用場景:
日志存儲。
有目錄結(jié)構(gòu)的文件存儲。
對象存儲
為什么需要對象存儲?
首先,一個文件包含了屬性(術(shù)語叫metadata,元數(shù)據(jù),例如該文件的大小、修改時間、存儲路徑等)以及內(nèi)容(以下簡稱數(shù)據(jù))。
例如FAT32這種文件系統(tǒng),存儲過程是鏈表的形式。
而對象存儲則將元數(shù)據(jù)獨(dú)立了出來,控制節(jié)點(diǎn)叫元數(shù)據(jù)服務(wù)器(服務(wù)器+對象存儲管理軟件),里面主要負(fù)責(zé)存儲對象的屬性(主要是對象的數(shù)據(jù)被打散存放到了那幾臺分布式服務(wù)器中的信息),而其他負(fù)責(zé)存儲數(shù)據(jù)的分布式服務(wù)器叫做OSD,主要負(fù)責(zé)存儲文件的數(shù)據(jù)部分。當(dāng)用戶訪問對象,會先訪問元數(shù)據(jù)服務(wù)器,元數(shù)據(jù)服務(wù)器只負(fù)責(zé)反饋對象存儲在哪些OSD,假設(shè)反饋文件A存儲在B、C、D三臺OSD,那么用戶就會再次直接訪問3臺OSD服務(wù)器去讀取數(shù)據(jù)。
這時候由于是3臺OSD同時對外傳輸數(shù)據(jù),所以傳輸?shù)乃俣染图涌炝?。?dāng)OSD服務(wù)器數(shù)量越多,這種讀寫速度的提升就越大,通過此種方式,實(shí)現(xiàn)了讀寫快的目的。
另一方面,對象存儲軟件是有專門的文件系統(tǒng)的,所以O(shè)SD對外又相當(dāng)于文件服務(wù)器,那么就不存在文件共享方面的困難了,也解決了文件共享方面的問題。
所以對象存儲的出現(xiàn),很好地結(jié)合了塊存儲與文件存儲的優(yōu)點(diǎn)。
優(yōu)點(diǎn):
具備塊存儲的讀寫高速。
具備文件存儲的共享等特性。
使用場景: (適合更新變動較少的數(shù)據(jù))
圖片存儲。
視頻存儲。
Ceph同時提供對象存儲、塊存儲和文件系統(tǒng)存儲三種功能,滿足不同應(yīng)用需求。
擴(kuò)展什么是OSD
對象存儲(Object-based Storage)是一種新的網(wǎng)絡(luò)存儲架構(gòu),基于對象存儲技術(shù)的設(shè)備就是對象存儲設(shè)備(Object-based Storage Device)簡稱OSD??傮w上來講,對象存儲綜合了NAS和SAN的優(yōu)點(diǎn),同時具有SAN的高速直接訪問和NAS的分布式數(shù)據(jù)共享等優(yōu)勢,提供了具有高性能、高可靠性、跨平臺以及安全的數(shù)據(jù)共享的存儲體系結(jié)構(gòu)。
Ceph 工作原理
ceph數(shù)據(jù)的存儲過程
無論使用哪種存儲方式(對象、塊、掛載),存儲的數(shù)據(jù)都會被切分成對象(Objects)。Objects size大小可以由管理員調(diào)整,通常為2M或4M。每個對象都會有一個唯一的OID,由ino與ono生成,雖然這些名詞看上去很復(fù)雜,其實(shí)相當(dāng)簡單。ino即是文件的File ID,用于在全局唯一標(biāo)示每一個文件,而ono則是分片的編號。比如:一個文件FileID為A,它被切成了兩個對象,一個對象編號0,另一個編號1,那么這兩個文件的oid則為A0與A1。Oid的好處是可以唯一標(biāo)示每個不同的對象,并且存儲了對象與文件的從屬關(guān)系。由于ceph的所有數(shù)據(jù)都虛擬成了整齊劃一的對象,所以在讀寫時效率都會比較高。
但是對象并不會直接存儲進(jìn)OSD中,因?yàn)閷ο蟮膕ize很小,在一個大規(guī)模的集群中可能有幾百到幾千萬個對象。這么多對象光是遍歷尋址,速度都是很緩慢的;并且如果將對象直接通過某種固定映射的哈希算法映射到osd上,當(dāng)這個osd損壞時,對象無法自動遷移至其他osd上面(因?yàn)橛成浜瘮?shù)不允許)。為了解決這些問題,ceph引入了歸置組的概念,即PG。
PG是一個邏輯概念,我們linux系統(tǒng)中可以直接看到對象,但是無法直接看到PG。它在數(shù)據(jù)尋址時類似于數(shù)據(jù)庫中的索引:每個對象都會固定映射進(jìn)一個PG中,所以當(dāng)我們要尋找一個對象時,只需要先找到對象所屬的PG,然后遍歷這個PG就可以了,無需遍歷所有對象。而且在數(shù)據(jù)遷移時,也是以PG作為基本單位進(jìn)行遷移,ceph不會直接操作對象。
對象時如何映射進(jìn)PG的?還記得OID么?首先使用靜態(tài)hash函數(shù)對OID做hash取出特征碼,用特征碼與PG的數(shù)量去模,得到的序號則是PGID。由于這種設(shè)計(jì)方式,PG的數(shù)量多寡直接決定了數(shù)據(jù)分布的均勻性,所以合理設(shè)置的PG數(shù)量可以很好的提升CEPH集群的性能并使數(shù)據(jù)均勻分布。
最后PG會根據(jù)管理員設(shè)置的副本數(shù)量進(jìn)行復(fù)制,然后通過crush算法存儲到不同的OSD節(jié)點(diǎn)上(其實(shí)是把PG中的所有對象存儲到節(jié)點(diǎn)上),第一個osd節(jié)點(diǎn)即為主節(jié)點(diǎn),其余均為從節(jié)點(diǎn)。
Ceph名詞介紹
Ceph核心組件及概念介紹
Monitor
監(jiān)控整個集群的狀態(tài),維護(hù)集群的cluster MAP二進(jìn)制表,保證集群數(shù)據(jù)的一致性
OSD --
OSD全稱Object Storage Device,也就是負(fù)責(zé)響應(yīng)客戶端請求返回具體數(shù)據(jù)的進(jìn)程。一個Ceph集群一般都有很多個OSD。
MDS
MDS全稱Ceph Metadata Server,是CephFS服務(wù)依賴的元數(shù)據(jù)服務(wù)。
Object --
Ceph最底層的存儲單元是Object對象,每個Object包含元數(shù)據(jù)和原始數(shù)據(jù)。
PG --
PG全稱Placement Grouops,是一個邏輯的概念,一個PG包含多個OSD。引入PG這一層其實(shí)是為了更好的分配數(shù)據(jù)和定位數(shù)據(jù)。
RADOS
RADOS全稱Reliable Autonomic Distributed Object Store,是Ceph集群的精華,用戶實(shí)現(xiàn)數(shù)據(jù)分配、Failover等集群操作。
Libradio
Librados是Rados提供庫,因?yàn)镽ADOS是協(xié)議很難直接訪問,因此上層的RBD、RGW和CephFS都是通過librados訪問的,目前提供PHP、Ruby、Java、Python、C和C++支持。
CRUSH --
CRUSH是Ceph使用的數(shù)據(jù)分布算法,類似一致性哈希,讓數(shù)據(jù)分配到預(yù)期的地方。
RBD --
RBD全稱RADOS block device,是Ceph對外提供的塊設(shè)備服務(wù)。
RGW
RGW全稱RADOS gateway,是Ceph對外提供的對象存儲服務(wù),接口與S3和Swift兼容。
CephFS --
CephFS全稱Ceph File System,是Ceph對外提供的文件系統(tǒng)服務(wù)。