- Ceph企業(yè)級分布式存儲:原理與工程實踐
- 景顯強 龔向宇 黃軍寶
- 1215字
- 2021-11-05 10:18:52
3.4.2 放置組的計算方法
CRUSH會為每個對象計算放置組,但實際上不知道該放置組所在的每個OSD中存儲了多少數(shù)據(jù),因此放置組數(shù)與OSD數(shù)之比可能會影響數(shù)據(jù)的分布。例如,如果3個副本存儲池中只有一個放置組,而Ceph集群有N個OSD,則Ceph只使用3個OSD來存儲數(shù)據(jù)。因為CRUSH別無選擇,只能使用唯一的放置組。當(dāng)有更多的放置組可用時,CRUSH有可能在OSD上均勻分布數(shù)據(jù)。
OSD與放置組數(shù)量的比例調(diào)整不能解決數(shù)據(jù)分布不均問題,因為CRUSH沒有考慮對象的大小。使用Librados接口存儲一些容量相對較小的對象和一些容量非常大的對象可能會導(dǎo)致數(shù)據(jù)分布不均。例如,在10個OSD上的1000個放置組中平均分配100萬個4KB對象,空間總計4GB,每個OSD上使用400MB的存儲空間。如果將這100萬個對象中的1個對象大小調(diào)整為400MB,則存放該對象的放置組對應(yīng)的3個OSD上的對象數(shù)據(jù)大小都是800MB,而其余7個OSD上的對象數(shù)據(jù)大小還是400MB,這就導(dǎo)致數(shù)據(jù)分布不均勻。Ceph使用RBD時,默認(rèn)對象的大小為固定值4MB,將一個塊設(shè)備以4MB為單位切割,最后寫入底層時都按照4MB的基本單位操作。按照放置組均勻分布,就能保證集群數(shù)據(jù)在集群內(nèi)均勻分布。Ceph文件存儲和對象存儲的對象沒有固定4MB的大小限制。
注意 推薦一個OSD中配置的放置組數(shù)量為100~200,否則影響計算性能。
以上講述了很多關(guān)于放置組數(shù)量的問題,那么在一個已知容量規(guī)模的Ceph集群中如何計算出合理的放置組數(shù)量呢?計算Ceph集群總放置組的公式如下:

舉兩個示例說明:
1)一個Ceph集群有100個OSD(可理解為100塊盤,通常一塊盤啟動1個OSD進(jìn)程),推薦每個OSD配置100~200個放置組。假設(shè)放置組數(shù)取值100,集群采用3副本進(jìn)行數(shù)據(jù)冗余,那么集群放置組需配置3333(100×100/3)個。注意,此值要取2的冪次方(要取大于3333的2的冪次方),距離3333最近的2的冪次方數(shù)為4096,因此集群最大的放置組數(shù)為4096。
2)一個Ceph集群有100個OSD(可理解為100塊盤,通常一塊盤啟動1個OSD進(jìn)程),推薦每個OSD配置100~200個放置組。假設(shè)放置組數(shù)取值100,采用4+2糾刪碼方式進(jìn)行數(shù)據(jù)冗余,那么集群放置組需配置1666(100×100/(4+2))個。注意,此值要取大于1666的2的冪次方數(shù),距離1666最近的2的冪次方數(shù)為2048,因此集群最大的放置組數(shù)為2048。
知道了集群中一共可以有多少個放置組,那么放置組如何分給存儲池呢?你可以按照集群中存儲池的數(shù)量進(jìn)行數(shù)據(jù)存儲百分比規(guī)劃,然后將放置組數(shù)量乘以此百分比算出每個存儲池中的放置組數(shù)量。
以上面的例子為例繼續(xù)分析,對于100個OSD、3副本集群,最多配置4096個放置組,假設(shè)你規(guī)劃了兩個存儲池,其中存儲池A預(yù)計存儲量占整個集群存儲量的75%,那么存儲池A的放置組數(shù)為3072。存儲池B預(yù)計存儲量占整個集群存儲量的25%,那么存儲池B的放置組數(shù)為1024。通常,存儲池的放置組數(shù)要設(shè)置為2的冪次方,如果存儲池A的放置組數(shù)向上調(diào)整,那么集群總的放置組數(shù)將大于之前計算的值。如果這樣強制設(shè)置放置組,集群會報告too many PGs per OSD,因此要向下調(diào)整存儲池A的放置組數(shù),即調(diào)整為2048。
Ceph也提供了參數(shù)mon_target_pg_per_osd對OSD上放置組數(shù)量進(jìn)行限制。target_size_bytes參數(shù)可以對存儲池的容量進(jìn)行硬限制,即限制存儲池最大使用容量。
- 新手易學(xué):系統(tǒng)安裝與重裝
- 嵌入式Linux驅(qū)動程序和系統(tǒng)開發(fā)實例精講
- Windows Phone 8 Application Development Essentials
- Linux自動化運維:Shell與Ansible(微課版)
- Microsoft Operations Management Suite Cookbook
- 巧學(xué)活用Windows 7
- Windows 7案例教程
- 細(xì)說Linux基礎(chǔ)知識
- CentOS 6 Linux Server Cookbook
- 分布式高可用架構(gòu)之道
- Linux網(wǎng)絡(luò)配置與安全管理
- Building Telephony Systems With Asterisk
- bash shell腳本編程經(jīng)典實例(第2版)
- 大學(xué)計算機應(yīng)用基礎(chǔ)實踐教程(Windows 7+MS Office 2010)
- Java EE 7 Developer Handbook