前面兩篇Ceph系列介紹了Ceph集羣的搭建以及通過3種不同的接口(快存儲、文件存儲、對象存儲)去調用Ceph的存儲空間。
本篇介紹一下Ceph的原理,各部分的組件與架構,不能知其然不知其所以然。
1、Ceph簡介
傳統的集中式存儲(磁盤陣列),每套存儲,需要有一個大腦(控制櫃),通常大腦的組件都是冗餘配置的(雙電源、雙控制器、硬盤等),而大腦後面可以接入很多硬盤(硬盤擴展櫃,沒有控制器,整個機框都插滿硬盤)。由於磁盤陣列會有一定的冗餘保護機制(如會預留熱備盤,磁盤做raid5、raid6、raid10,劃邏輯卷等),並且可以通過擴容硬盤擴展櫃,來做到容量的增加,並且由於存儲數據集中存放,有效給多臺服務器進行數據共享。
因此,很長一段時間以來,集中式存儲都是存儲最優的解決方案。
但是,隨着互聯網與移動互聯網的爆發式增長,傳統集中式存儲的弊端開始展露。因爲每套存儲雖然可以擴容硬盤擴展櫃,但是控制器無法擴容。而控制器則限制了整套存儲能夠使用的IO性能,因此可以說,從一開始選定了控制器的型號,基本上這套存儲的性能上限就已經決定了。
當然,控制器理論上也是可以擴容的,但是需要再買一套,將2套打通,而打通的要求,則要求同品牌,甚至同型號甚至有的需要同版本號的才能夠進行打通。因此使用人就會被一家廠商綁死,而如果買了不同品牌的存儲,又面臨無法打通的問題。所以可以說存儲擴容上面(主要是擴性能,不是容量)是非常麻煩的。
而隨着x86服務器越來越便宜,性能與穩定性越來越高,所有的東西都有趨向依靠大量x86服務器集羣+軟件去實現。分佈式存儲就是爲了解決上述可擴展性的問題而推出的。
Ceph正是其中的一種可以是用x86服務器搭建分佈式存儲的開源軟件。
2、Ceph架構
Ceph本身有叫RADOS的對象存儲系統,負責最終的數據存儲。
而其上又提供塊存儲、文件存儲與對象存儲接口,供client進行調用,因此使用Ceph,最終可以提供分佈式的塊存儲、文件存儲、對象存儲服務。
3、Ceph核心組件
Monitor
一個Ceph集羣需要多個Monitor組成的小集羣,它們通過Paxos同步數據,用來保存OSD的元數據。
OSD
OSD全稱Object Storage Device,也就是負責響應客戶端請求返回具體數據的進程。一個Ceph集羣一般都有很多個OSD。
上述兩者,是實際需要節點進行承載服務的。
Monitor類似大腦(也可以集羣部署,才能高可用),用戶訪問,需要先向Monitor去詢問數據在哪裏,需要找哪個OSD去找數據。然後Monitor會根據元數據找到哪些OSD節點上面有用戶需要的數據,並且根據OSD的負載情況,指導用戶現在應該去找哪個OSD去讀寫數據。
基本上你會發現所有分佈式系統,都會有以上兩層的分法,只是叫法可能不一樣。
例如超融合服務器,存儲層面就會出現什麼NameNode與DataNode,其實就是類似一個負責存儲數據到底擺放在哪裏的目錄索引,一個負責實際擺放數據進磁盤。
Object
Ceph最底層的存儲單元是Object對象,每個Object包含元數據和原始數據,其實是個邏輯概念,就是需要存的對象就叫object。data內容本身是數據,關於這個對象本身的描述叫做元數據。
MDS
MDS全稱Ceph Metadata Server,是CephFS服務依賴的元數據服務,只有文件服務才用MDS。
CephFS
CephFS全稱Ceph File System,是Ceph對外提供的文件系統服務。
RBD
RBD全稱RADOS block device,是Ceph對外提供的塊設備服務。
RGW
RGW全稱RADOS gateway,是Ceph對外提供的對象存儲服務,接口與S3和Swift兼容。
PG
PG全稱Placement Grouops,是一個邏輯的概念,一個PG包含多個OSD。引入PG這一層其實是爲了更好的分配數據和定位數據。
RADOS
RADOS全稱Reliable Autonomic Distributed Object Store,是Ceph集羣的精華,用戶實現數據分配、Failover等集羣操作。
Libradio
Librados是Rados提供庫,因爲RADOS是協議很難直接訪問,因此上層的RBD、RGW和CephFS都是通過librados訪問的,目前提供PHP、Ruby、Java、Python、C和C++支持。
CRUSH
CRUSH是Ceph使用的數據分佈算法,類似一致性哈希,讓數據分配到預期的地方。