我們一起在 Ceph 指定OSD 創(chuàng)建 pool
背景
在我們的ceph集群中,可能不只有sata盤或者ssd盤,有些時(shí)候服務(wù)器上同時(shí)插了ssd和sata盤用作osd,那如果我們按照默認(rèn)的crush分布規(guī)則,那會(huì)使所有pg均分在ssd和sata盤上,造成sata盤的存儲(chǔ)空間浪費(fèi)和整個(gè)ceph集群的性能浪費(fèi),其實(shí)我們可以改變ceph的默認(rèn)存儲(chǔ)規(guī)則,來使那些io要求較高的數(shù)據(jù)存儲(chǔ)在由ssd的osd組成的存儲(chǔ)池上,將備份數(shù)據(jù)或者時(shí)效性要求不高的數(shù)據(jù)存儲(chǔ)在由sata的osd組成的存儲(chǔ)池上,既提高了性能,又可以減少較大數(shù)據(jù)量存儲(chǔ)的成本。
下面我們就來演示如何利用crush來對不同數(shù)據(jù)指定不同設(shè)備的osd存儲(chǔ),這邊我是用虛擬機(jī)演示,所以都是hdd,這邊假設(shè)osd0,2,4為ssd設(shè)備,osd 1,3,5為sata設(shè)備。
獲取當(dāng)前crushmap并反編譯他
ceph osd getcrushmap -o crushmapdump
crushtool -d crushmapdump -o crushmapdump-decompiled
編輯crushmapdump文件,并在root default配置之后添加以下部分,分別創(chuàng)建ssd和sata兩個(gè)bucket,將osd [0,2,4]作為ssd bucket,osd[1,3,5]作為sata bucket。
root ssd {
id -5
alg straw
hash 0
item osd.0 weight 0.010
item osd.2 weight 0.010
item osd.4 weight 0.010
}
root sata {
id -6
alg straw
hash 0
item osd.1 weight 0.010
item osd.3 weight 0.010
item osd.5 weight 0.010
}
創(chuàng)建crush rule
crush map包含crush rule的概念。每個(gè)池都有自己的crush ruleset和rule。
rule ssd-pool {
ruleset 1
type replicated
min_size 1
max_size 10
step take ssd
step chooseleaf firstn 0 type osd
step emit
}
rule sata-pool {
ruleset 2
type replicated
min_size 1
max_size 10
step take sata
step chooseleaf firstn 0 type osd
step emit
}
在ceph急群眾編譯并注入新的crush map。
crushtool -c crushmapdump-decompiled -o crushmapdump-compiled
ceph osd setcrushmap -i crushmapdump-compiled
添加下列參數(shù)到ceph.conf配置文件中,防止下次重啟時(shí)crush恢復(fù)回默認(rèn)配置。
osd_crush_update_on_start=false
將crushmap映射到ceph集群后,查看osd tree分布,這里由于我是虛擬機(jī),所以所有的磁盤都是別hdd,這點(diǎn)請忽略。
創(chuàng)建并驗(yàn)證ssd-pool。
ceph osd pool create ssd-pool 8 8
查看crush_rule為0。
修改規(guī)則集為1,把ssd-pool放到ssd磁盤下。
ceph osd pool set ssd-pool crush_rule ssd-pool
可以看到ssd-pool的池已經(jīng)使用crush_rule 1了 我們再創(chuàng)建sata-pool池,并做上面操作測試,可以看到sata-pool的池已經(jīng)使用crush_rule 2了。
分別往兩個(gè)池里寫入數(shù)據(jù)測試
rados -p <pool_name> put <object_name> <file_name>
現(xiàn)在驗(yàn)證對象是否存儲(chǔ)在正確的osd上,ssd的osd集合為[0 2 4],sata的osd集合為[1,3,5],下圖與我們定義的配置完全相同。