Ceph集群中指定OSD 创建 pool

本文介绍了如何通过编辑和应用Crushmap,将Ceph集群中的SSD和SATA设备分别用于不同类型的存储需求,以提高性能和降低成本。通过创建不同的bucket和crushrule,确保高I/O数据存储在SSD设备上,而低优先级数据存储在SATA设备上。详细步骤包括获取和编辑crushmap,创建crushrule,设置集群配置,以及验证数据分布。
导读如何利用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

编辑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,这点请忽略。

创建并验证ssd-pool。

ceph osd pool create ssd-pool 8 8

查看crush_rule为0。

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

ceph osd pool set ssd-pool crush_rule ssd-pool

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

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

rados -p  put  

现在验证对象是否存储在正确的osd上,ssd的osd集合为[0 2 4],sata的osd集合为[1,3,5],下图与我们定义的配置完全相同。https://www.linuxprobe.com/?p=254078

<think>好的,用户问的是在Ceph创建Pool时如何指定放置到的磁盘类型。我需要先回忆一下Ceph的相关知识。Ceph中存储数据是通过CRUSH算法来决定的,而CRUSH规则决定了数据在集群中的分布位置。所以,要指定Pool使用特定类型的磁盘,应该和CRUSH规则有关。 首先,用户可能需要的是将Pool的数据存储在特定类型的OSD上,比如SSD或者HDD。这时候需要确认集群中的OSD已经被正确分类,打上了相应的标签。例如,SSD磁盘的OSD可能有“ssd”的类,而HDD的则有“hdd”。 接下来,需要创建一个CRUSH规则,这个规则会定义数据如何分布到特定类型的设备上。比如,创建一个规则,选择故障域(比如host或rack),然后选择设备的类为ssd。这样,当Pool使用这个规则时,数据就会被存储在对应的磁盘类型上。 然后,创建Pool的时候,通过指定这个CRUSH规则来关联。使用ceph osd pool create命令时,加上--crush-rule参数,后面跟规则名称或ID。这样新创建Pool就会使用该规则,从而将数据写入指定类型的磁盘。 可能用户还不太清楚如何查看现有的OSD类别,所以需要说明如何检查OSD的类。使用ceph osd tree命令可以看到每个OSD的属性,包括class。另外,如果OSD没有被正确分类,可能需要手动设置,比如使用ceph osd crush set-device-class命令。 另外,还需要提醒用户,在修改CRUSH规则或设备类之后,可能需要调整现有的Pool,或者确保新的Pool正确应用了规则。同时,数据迁移可能需要时间,特别是当已有数据需要移动到新类型的磁盘时。 总结步骤的话,应该是:1. 确认OSD已分类;2. 创建对应的CRUSH规则;3. 创建Pool指定该规则。需要给出具体的命令示例,比如如何创建规则,如何创建Pool,这样用户可以直接参考操作。 可能还需要注意版本兼容性,不同Ceph版本可能在命令参数上有细微差别,但一般来说,这些步骤在较新版本中是通用的。另外,提醒用户权限问题,可能需要管理员权限才能执行这些命令。 用户可能的问题还包括如何验证Pool是否正确使用了指定的磁盘类型,这时候可以建议检查Pool的详细信息,比如ceph osd pool get <poolname> crush_rule,或者通过ceph osd dump查看Pool的配置。 最后,确保回答清晰,分步骤说明,并给出示例命令,这样用户能够一步步操作。</think>在Ceph创建Pool指定磁盘类型,需要通过**CRUSH规则**控制数据分布。以下是分步说明: --- ### 1. **标记OSD设备类型** 首先需要为不同磁盘类型的OSD打标签(例如 `ssd` 或 `hdd`): ```bash # 将OSD编号0、1、2标记为ssd类型 ceph osd crush set-device-class ssd osd.0 osd.1 osd.2 # 将OSD编号3、4、5标记为hdd类型 ceph osd crush set-device-class hdd osd.3 osd.4 osd.5 ``` --- ### 2. **创建CRUSH规则** 创建一条规则,仅选择特定类型的OSD: ```bash # 创建名为my_ssd_rule的规则,仅选择ssd类设备 ceph osd crush rule create-replicated my_ssd_rule default host ssd # 创建名为my_hdd_rule的规则,仅选择hdd类设备 ceph osd crush rule create-replicated my_hdd_rule default host hdd ``` - `default`:故障域层级(如host/rack)。 - `ssd`/`hdd`:目标设备类型。 --- ### 3. **创建Pool指定规则** 创建Pool时通过 `--crush-rule` 参数绑定规则: ```bash # 创建使用SSD磁盘的Pool ceph osd pool create my_ssd_pool 128 128 --crush-rule my_ssd_rule # 创建使用HDD磁盘的Pool ceph osd pool create my_hdd_pool 128 128 --crush-rule my_hdd_rule ``` - `128`:PG/PGP数量(根据集群规模调整)。 --- ### 4. **验证配置** - **检查Pool规则**: ```bash ceph osd pool get my_ssd_pool crush_rule ``` 输出应为 `crush_rule: my_ssd_rule`。 - **查看OSD类别**: ```bash ceph osd tree ``` 输出中每个OSD会显示 `class:ssd` 或 `class:hdd`。 --- ### 关键概念说明 1. **CRUSH规则**:决定数据在集群中的分布逻辑。 2. **设备类(Device Class)**:通过标记OSD类型(如ssd/hdd),实现物理磁盘分类。 3. **故障域**:指定数据副本分布的层级(如host/rack),保障高可用。 --- ### 注意事项 - 确保目标OSD已正确标记类别。 - 修改规则后,已有Pool需手动调整规则(如 `ceph osd pool set <pool> crush_rule <rule>`)。 - 数据迁移需时间,可通过 `ceph -w` 观察进度。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值