良许Linux教程网 干货合集 Ceph集群中指定OSD 创建 pool

Ceph集群中指定OSD 创建 pool

如何利用crush来对不同数据指定不同设备的osd存储,这边我是用虚拟机演示,所以都是hdd,这边假设osd0,2,4为ssd设备,osd 1,3,5为sata设备。

背景

在我们的ceph集群中,可能不只有sata盘或者ssd盘,有些时候服务器上同时插了ssd和sata盘用作osd,那如果我们按照默认的crush分布规则,那会使所有pg均分在ssd和sata盘上,造成sata盘的存储空间浪费和整个ceph集群的性能浪费,其实我们可以改变ceph的默认存储规则,来使那些io要求较高的数据存储在由ssd的osd组成的存储池上,将备份数据或者时效性要求不高的数据存储在由sata的osd组成的存储池上,既提高了性能,又可以减少较大数据量存储的成本。

下面我们就来演示如何利用crush来对不同数据指定不同设备的osd存储,这边我是用虚拟机演示,所以都是hdd,这边假设osd0,2,4为ssd设备,osd 1,3,5为sata设备。

获取当前crushmap并反编译他

ceph osd getcrushmap -o crushmapdump
crushtool -d crushmapdump -o crushmapdump-decompiled
Ceph集群中指定OSD 创建 poolCeph集群中指定OSD 创建 pool

编辑crushmapdump文件,并在root default配置之后添加以下部分,分别创建ssd和sata两个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
}

创建crush rule

crush map包含crush rule的概念。每个池都有自己的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

添加下列参数到ceph.conf配置文件中,防止下次重启时crush恢复回默认配置。

osd_crush_update_on_start=false

将crushmap映射到ceph集群后,查看osd tree分布,这里由于我是虚拟机,所以所有的磁盘都是别hdd,这点请忽略。

Ceph集群中指定OSD 创建 poolCeph集群中指定OSD 创建 pool

创建并验证ssd-pool。

ceph osd pool create ssd-pool 8 8

查看crush_rule为0。

Ceph集群中指定OSD 创建 poolCeph集群中指定OSD 创建 pool

修改规则集为1,把ssd-pool放到ssd磁盘下。

ceph osd pool set ssd-pool crush_rule ssd-pool
Ceph集群中指定OSD 创建 poolCeph集群中指定OSD 创建 pool

可以看到ssd-pool的池已经使用crush_rule 1了 我们再创建sata-pool池,并做上面操作测试,可以看到sata-pool的池已经使用crush_rule 2了。

Ceph集群中指定OSD 创建 poolCeph集群中指定OSD 创建 pool

分别往两个池里写入数据测试

rados -p  put
Ceph集群中指定OSD 创建 poolCeph集群中指定OSD 创建 pool

现在验证对象是否存储在正确的osd上,ssd的osd集合为[0 2 4],sata的osd集合为[1,3,5],下图与我们定义的配置完全相同。

Ceph集群中指定OSD 创建 poolCeph集群中指定OSD 创建 pool

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部