開箱即用分布式存儲(chǔ)的情況簡(jiǎn)直不要太理想牌废。比如ceph為大規(guī)模集群設(shè)計(jì)蜂挪,一些參數(shù)的配置等也是考慮到大規(guī)模設(shè)備的使用寝蹈,部署在小的集群性能效果就不甚理想慧域。
均衡
使用小集群榆骚,對(duì)于ceph性能非常重要的一個(gè)環(huán)節(jié)是均衡片拍。理由有二:
- 分布式系統(tǒng)在一些場(chǎng)景下存在短板效應(yīng)(weakest-link-in-the-chain phenomena),系統(tǒng)的性能往往會(huì)受到短板的限制妓肢。
- 單一組件的任務(wù)過載也會(huì)造成性能短板捌省,從而造成全局性能限制
ceph的均衡可以理解為PG的均衡(PG,OSD上實(shí)際的資源消耗者碉钠,其將邏輯池劃分纲缓。寫向池里的數(shù)據(jù)首先映射到的是按照2的冪次方劃分的眾多PG中的一個(gè)卷拘,然后PG會(huì)根據(jù)crush算法對(duì)應(yīng)到OSD上)。平衡PG的規(guī)則可以劃分為三種:
- 每個(gè)OSD上相同數(shù)目的PG
- 存儲(chǔ)設(shè)備按照相同的利用率平衡祝高,但面對(duì)異構(gòu)的設(shè)備則并不理想
- 每個(gè)OSD上擁有相同數(shù)目的primary pg(ceph的復(fù)制方式采用主從復(fù)制栗弟,相對(duì)于primary的是secondary,讀寫的都是由primary為處理)工闺,但目前尚未實(shí)現(xiàn)
均衡手段
目前ceph處理平衡的手段有4種乍赫,大多數(shù)都是基于第一種平衡規(guī)則(每個(gè)OSD上相同數(shù)目的PG):
- Balancer。N版本新增加的功能陆蟆,可以優(yōu)化全局PG分布的情況雷厂,達(dá)到OSD之上PG相差1左右的效果。使用“ceph mgr module enable balancer”開啟組件叠殷,然后使用“ceph balancer on”開啟功能改鲫,最后設(shè)置工作模式“ceph balancer <mode>”,crush-compat兼容老的客戶端林束,unmap針對(duì)新的客戶端像棘。
除此之外balancer還可評(píng)估目前的分布狀態(tài),特定池的分布狀態(tài)诊县、創(chuàng)建一個(gè)分布計(jì)劃讲弄、評(píng)估該計(jì)劃、執(zhí)行該計(jì)劃依痊。
- OSD Crush reweight避除。該命令接口提供調(diào)整CRUSH規(guī)則默認(rèn)的權(quán)重能力⌒剜遥可以對(duì)單獨(dú)的OSD重新設(shè)置權(quán)重瓶摆,也可以對(duì)所有OSD設(shè)置。但是不適合給大規(guī)模集群使用性宏,將要被balancer代替群井。reweight也可以根據(jù)設(shè)備利用率來調(diào)整。
- PG autoscaler毫胜。一個(gè)自動(dòng)為每個(gè)池設(shè)定PG數(shù)的工具书斜,可以根據(jù)池中數(shù)據(jù)情況進(jìn)行改變。pg數(shù)目在之前版本不可以減少酵使,N版本之后PG數(shù)目可以增加和減少荐吉。autoscaler提供自動(dòng)擴(kuò)展(on)和告警(warn)模式。
autoscaler按照默認(rèn)pg和osd的比例調(diào)整口渔,但是該比例也可以修改“ceph config set global mon_target_pg_per_osd 100”样屠,當(dāng)然PG的增多對(duì)于OSD和MON機(jī)器的處理能力(內(nèi)存、網(wǎng)絡(luò)、CPU)有更高的要求痪欲。
除此之外悦穿,用戶可以設(shè)置池的限制,來引導(dǎo)或限制pg的調(diào)整业踢。比如設(shè)置池的目標(biāo)容量或占用存儲(chǔ)比例栗柒、最小的pg數(shù)目來為autoscaler提供參考,這樣可以避免pg調(diào)整造成數(shù)據(jù)遷移帶來的開銷知举。
autoscaler的開啟方式:ceph mgr module enable pg_autoscaler傍衡。在需要高性能的情況下要小心使用。
- 修改pool的PG的數(shù)量负蠕。增加或者減少(在N版本中支持)PG的數(shù)量蛙埂,同時(shí)修改pg和pgp的量。具體使用“ceph osd pool set xxx pg_num yyy”命令遮糖。提高PG數(shù)量可以分散的更加均衡绣的。一些測(cè)試結(jié)果表明pg數(shù)目越大標(biāo)準(zhǔn)差約小,對(duì)于帶寬有相應(yīng)的提升欲账。
PG的均衡往往伴隨著數(shù)據(jù)的遷移和響應(yīng)對(duì)性能的影響屡江,需要謹(jǐn)慎評(píng)估再實(shí)施。
均衡效果確認(rèn)
以下途徑確認(rèn)調(diào)整之后均衡的效果:1赛不、使用ceph -s查看集群整體情況惩嘉,以及pg的大致狀態(tài);2踢故、ceph osd df可以查看目前平衡情況的標(biāo)準(zhǔn)差文黎;3、自實(shí)現(xiàn)統(tǒng)計(jì)primary pg的腳本殿较,簡(jiǎn)單的shell腳本即可(讀寫負(fù)載較重的場(chǎng)景耸峭,primary pg分散的不夠開,造成某些節(jié)點(diǎn)負(fù)載過大淋纲。)劳闹。
總之,為了達(dá)到較好的效果一定要讓集群平衡平衡再平衡洽瞬。另外本涕,除了PG之外其他一些限制也會(huì)對(duì)性能產(chǎn)生影響,比如objecter組件由于限流的設(shè)計(jì)對(duì)ops和雙向傳輸?shù)臄?shù)據(jù)量存在限制(文件存儲(chǔ)伙窃、對(duì)象存儲(chǔ)都已經(jīng)體驗(yàn)過)菩颖。性能限制還要根據(jù)IO路徑具體分析。
參考資料
主要參考:https://static.sched.com/hosted_files/cephalocon2019/10/Optimizing%20Small%20Ceph%20Clusters.pdf
pg數(shù)目的計(jì)算工具:https://ceph.com/pgcalc/
pg的官方運(yùn)維參考:https://docs.ceph.com/docs/master/rados/operations/placement-groups/