前言
ceph 是什么楷兽?
ceph 是一種開源存儲軟件。底層實(shí)現(xiàn)了對象存儲瑰艘,并以此為基礎(chǔ)對外提供對象存儲接口、塊存儲接口肤舞、文件級存儲接口紫新。
ceph 結(jié)構(gòu)包含兩個部分:
- ceph client:訪問 ceph 底層服務(wù)或組件,對外提供各種接口李剖。比如:對象存儲接口芒率、塊存儲接口、文件級存儲接口篙顺。
- ceph node:ceph 底層服務(wù)提供端偶芍,也就是 ceph 存儲集群充择。
環(huán)境
ceph 版本:Nautilus
正文
架構(gòu)圖
官網(wǎng)的一張架構(gòu)圖:
對于這張圖,一開始沒有看懂它想表達(dá)什么腋寨,后來明白了聪铺。如下圖:
相關(guān)名詞解釋:
- RADOS:Reliable Autonomic Distributed Object Store(可靠的,自主的萄窜,分布式的對象存儲)铃剔。在 ceph 中這個名詞經(jīng)常出現(xiàn),有時會以 R 表示 RADOS查刻。實(shí)際上這個詞僅僅是對 ceph 的一個修飾詞键兜,并不代表 ceph 的組件什么的。粗暴的認(rèn)為穗泵, RADOS = ceph 對象存儲集群 即可普气。
-
RGW、RBD佃延、CEPH FS: 這三個就是 ceph clients现诀。
RGW:對象存儲網(wǎng)關(guān),也就是對象存儲接口履肃。
RBD:塊設(shè)備仔沿,也就是塊存儲接口。
CEPH FS:ceph 文件系統(tǒng)尺棋,也就是文件級存儲接口封锉。
ceph 基礎(chǔ)架構(gòu)
ceph 組件分為兩部分:
- ceph node:構(gòu)成 ceph 集群的基礎(chǔ)組件。
- ceph client:對外提供多種方式使用 ceph 存儲的組件膘螟。
ceph 基礎(chǔ)組件
此部分介紹構(gòu)成 ceph 集群的基礎(chǔ)組件成福。
其中包含 OSD、Manager荆残、MDS奴艾、Monitor。
OSD(ceph-osd):object storage daemon内斯,對象存儲進(jìn)程蕴潦。ceph 管理物理硬盤時,引入了OSD概念嘿期,每一塊盤都會針對的運(yùn)行一個OSD進(jìn)程品擎。換句話說,ceph 集群通過管理 OSD 來管理物理硬盤备徐。OSD 一般功能為:存儲數(shù)據(jù)萄传、維護(hù)數(shù)據(jù)副本、數(shù)據(jù)恢復(fù)、數(shù)據(jù)再平衡以及對ceph monitor組件提供相關(guān)監(jiān)控信息秀菱。
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個辫呻。
MDS(ceph-mds):Metadata server,元數(shù)據(jù)服務(wù)琼锋。為ceph 文件系統(tǒng)提供元數(shù)據(jù)服務(wù)(ceph 對象存儲和塊存儲不需要MDS)放闺。為 posix 文件系統(tǒng)用戶提供性能良好的基礎(chǔ)命令(ls,find等)缕坎。
Monitor(ceph-mon):維護(hù)集群的狀態(tài)怖侦,包含monitor組件信息,manger 組件信息谜叹,osd組件信息匾寝,mds組件信息,crush 算法信息荷腊。還負(fù)責(zé)ceph集群的身份驗(yàn)證功能艳悔,client在連接ceph集群時通過此組件進(jìn)行驗(yàn)證。Monitor組件開啟高可用時停局,至少3個很钓。
ceph clients
此部分介紹 ceph 對外提供各種功能的組件香府。
其中包含:Block Device董栽、Object Storage、Filesystem企孩。
- Block Device:塊存儲設(shè)備锭碳,RBD。
- Object Storage: 對象存儲勿璃,RGW擒抛。對外可提供 swift 、s3 接口類型的restful api补疑。
- Filesystem:文件系統(tǒng)歧沪,CephFS。提供一個兼容POSIX的文件系統(tǒng)莲组。
ceph 存儲過程
前面兩個部分主要介紹了 ceph 的一些組件及對外提供的功能诊胞。
這部分主要介紹 ceph 的存儲邏輯。
首先锹杈,在對象存儲中撵孤,一切都是扁平化的迈着,并且存儲的最小單元為對象(obj)。存儲 obj 如下圖:
ceph 在對象存儲的基礎(chǔ)上提供了更加高級的思想邪码。
當(dāng)對象數(shù)量達(dá)到了百萬級以上裕菠,原生的對象存儲在索引對象時消耗的性能非常大。ceph 因此引入了 placement group (pg)的概念闭专。一個 pg 就是一組對象的集合奴潘。如下圖:
obj 和 pg 之間的映射由 ceph client 計算得出。
討論 pg 時影钉,不得不提的另外一個名詞:pgp萤彩。
pgp 決定了 pg 和 osd 之間的映射關(guān)系。一般將 pgp_num 設(shè)置成和 pg_num 一樣大小斧拍。
這里還有一個名詞需要提一下雀扶,在 ceph 中會經(jīng)常見到 crush 算法。簡單來說肆汹,crush 算法就是指 ceph 中數(shù)據(jù)如何存儲愚墓、讀取的過程。
由于 ceph 集群面對許多的獨(dú)立項目昂勉,因此 ceph 還引入了 ceph pool 的概念用于劃分不同的項目浪册。
ceph pool 是對 ceph 對象的邏輯劃分,并不是物理劃分岗照。
pg 和 ceph pool 的區(qū)別:
- pg 對于用戶來說是透明的村象,只是底層的一種優(yōu)化方案。
- ceph pool 對于用戶來說攒至,就像 mysql 中的 database厚者。
像大多數(shù)集群軟件一樣,ceph 也提供了緩存的概念迫吐。稱之為 Cache Tier(緩存層库菲,在具體使用時有時會稱之為緩存池)。
緩存池對用戶來說是透明的志膀,因此不會改變用戶的原有使用邏輯熙宇。以下緩存池的介紹,均為底層邏輯溉浙。
在沒有緩存池時烫止,ceph client 直接指向存儲池。
在添加緩存池后戳稽,ceph client 指向緩存池馆蠕,緩存池再指向存儲池。
擴(kuò)展
1. 關(guān)于 osd、pg荆几、pgp 的猜想
官方原話:
When pg_num is increased for any pool, every PG of this pool splits into half, but they all remain mapped to their parent OSD.
Until this time, Ceph does not start rebalancing. Now, when you increase the pgp_num value for the same pool, PGs start to migrate from the parent to some other OSD, and cluster rebalancing starts. This is how PGP plays an important role.
By Karan Singh
個人翻譯:
當(dāng)一個池增加 pg 數(shù)量時吓妆,這個池中的所有 pg 都會變化。但是原 pg 的實(shí)際物理存儲位置不會改變吨铸。
當(dāng)一個池增加 pgp 的數(shù)量時行拢,pg 的實(shí)際物理存儲位置會發(fā)生改變。
首先诞吱,截至目前舟奠,沒有具體查到資料證明以下觀點(diǎn)。(基于一致性hash的猜想)
宏觀上房维,大量的 obj 存儲過程如下:
由上圖沼瘫,引發(fā)幾個問題:
- obj 如何存儲到 pg 上?
- pg 如何存儲到 osd 上咙俩?
- 那 pgp 又是什么耿戚?
- 為什么要有 pg 這個東西?
一幅猜想圖:
圖中出現(xiàn)了一個新詞: vosd 阿趁,這個是指虛擬 osd膜蛔。它的數(shù)量等于 pgp 的數(shù)量,而 pgp 一般又等于 pg脖阵。
猜想:
- obj 在存儲時皂股,首先經(jīng)過 hash 算法決定存儲在哪個 pg 上。
- 再次經(jīng)過 hash 算法命黔,計算出 pg 位于哪個 vosd 上呜呐。
- vosd 中存儲了與物理 osd 之間的映射。
pgp 的數(shù)量就是 vosd 的數(shù)量悍募。
引入 pg 可以實(shí)現(xiàn) pool 概念蘑辑,以及優(yōu)化碎片管理(這一點(diǎn)十分不確定)。
引入 pgp(vosd)搜立,是為了在增加 osd 時可以讓數(shù)據(jù)更加均衡的分布以躯。
如猜想圖:
當(dāng)我們增加池的 pg 數(shù)量時槐秧,不會改變 vosd啄踊,因此原 pg 與 vosd 之間的映射未變,原 pg 的實(shí)際物理位置也不會發(fā)生變化刁标。只是會影響同一個池中 obj 的分布颠通。
當(dāng)我們增加池的 pgp 數(shù)量時,相當(dāng)于改變了 vosd膀懈,通過 hash 計算出的部分 pg 與 vosd 之間的映射就要發(fā)生改變顿锰,從而導(dǎo)致 pg 的實(shí)際物理位置發(fā)生改變。
與一致性hash不同的地方:
一般情況下,一致性hash只有一層虛擬化層硼控,并且虛擬化層是根據(jù)物理硬件而變化的刘陶。但是ceph卻是一種反著來的意思。
當(dāng) ceph 增加一個 osd 時牢撼,pg 的物理位置也會發(fā)生改變匙隔。
在該猜想下:
當(dāng)增加 osd 時,并不會增加 vosd 的數(shù)量熏版,原部分 vosd 會映射到新的 osd 上纷责,因此產(chǎn)生一種部分 pg 的實(shí)際物理位置發(fā)生變化的情況。
2. 關(guān)于 pg pgp 數(shù)量設(shè)定
創(chuàng)建池時撼短,會分配固定的 pg再膳,以及設(shè)置與 pg 一樣大小的 pgp。
注意曲横,一般 pg 數(shù)量都設(shè)置為 2 的次方喂柒。
嚴(yán)格意義上,我們無論為池分配多少個 pg 都沒有問題禾嫉。但有時候 pg num 配置小了會報錯胳喷,配置大了也會報錯。這不是因?yàn)檫@么配置不對夭织,是因?yàn)橛衅渌膮?shù)在限制我們隨意配置 pg num吭露。
比如:
osd 有兩個配置,當(dāng)每個 osd 的 pg num 過少(默認(rèn)30)時會告警尊惰,當(dāng)每個 osd 的 pg num 過多(默認(rèn)300)也會告警讲竿。
所以,想要入門使用 ceph弄屡,還是需要了解許多基礎(chǔ)知識才可以题禀。否則,各種意外膀捷。