首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ceph 指定OSD创建pool

ceph 指定OSD创建pool

作者头像
没有故事的陈师傅
发布2022-12-06 20:15:02
发布2022-12-06 20:15:02
90200
代码可运行
举报
文章被收录于专栏:运维开发故事运维开发故事
运行总次数:0
代码可运行

背景

在我们的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并反编译他
代码语言:javascript
代码运行次数:0
运行
复制
ceph osd getcrushmap -o crushmapdump
crushtool -d crushmapdump -o crushmapdump-decompiled

编辑crushmapdump文件,并在root default配置之后添加以下部分,分别创建ssd和sata两个bucket,将osd [0,2,4]作为ssd bucket,osd[1,3,5]作为sata bucket。

代码语言:javascript
代码运行次数:0
运行
复制
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

代码语言:javascript
代码运行次数:0
运行
复制
rule ssd-pool {
        ruleset 1
        type replicated
        min_size 1
        max_size 10
        step take ssd  #使用ssd bucket
        step chooseleaf firstn 0 type osd
        step emit
}
rule sata-pool {
        ruleset 2
        type replicated
        min_size 1
        max_size 10
        step take sata  #使用sata bucket
        step chooseleaf firstn 0 type osd
        step emit
}

在ceph集群中编译并注入新的crush map。

代码语言:javascript
代码运行次数:0
运行
复制
crushtool -c crushmapdump-decompiled -o crushmapdump-compiled 
ceph osd setcrushmap -i crushmapdump-compiled

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

代码语言:javascript
代码运行次数:0
运行
复制
osd_crush_update_on_start=false

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

创建并验证ssd-pool
代码语言:javascript
代码运行次数:0
运行
复制
ceph osd pool create ssd-pool 8 8

查看crush_rule为0

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

代码语言:javascript
代码运行次数:0
运行
复制
ceph osd pool set ssd-pool crush_rule ssd-pool

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

分别往两个池里写入数据测试
代码语言:javascript
代码运行次数:0
运行
复制
rados -p <pool_name> put <object_name> <file_name>

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维开发故事 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 获取当前crushmap并反编译他
  • 创建crush rule
  • 创建并验证ssd-pool
  • 分别往两个池里写入数据测试
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档