从 GitHub 上 Clone Ceph 项目,我是基于 (ceph version 12.2.11 luminous 版本) 的代码来分析的

一、前言:

上一篇Ceph 进阶系列(二):如何让某个 pool 使用特定的 OSD 设备 (1 of 2,手动版)讲了复杂的手动版,如何让某个 pool 使用特定的 OSD 设备。而 luminous 版本的新特性因为有磁盘智能分组功能,用户只需要用命令创建一个新的 rule 就可以了,而不必手动编辑 crush map 文件。

二、如何让某个 pool 使用特定的 OSD 设备(luminous 新特性):

luminous 版本的 ceph 新增了一个功能 crush class,这个功能又可以称为磁盘智能分组。 默认情况下,在创建 osd 的时候会自动识别设备类型,然后设置该设备为相应的类。通常有三种 class 类型:hdd,ssd,nvme,crush map 文件的内容如下:

# devices
device 0 osd.0 class ssd
device 1 osd.1 class ssd
device 2 osd.2 class hdd
device 3 osd.3 class hdd

而查看 OSD 设备的 class 类型命令如下:

$  ceph osd crush class ls
[
    "ssd",
    "hdd"
]

默认情况下,在创建 OSD 的时候也会添加自动识别设备类型到相应的 bucket(例如,host,root 等),如下:

host ubuntu-sebre {
        id -5           # do not change unnecessarily
        id -6 class ssd         # do not change unnecessarily
        id -7 class hdd         # do not change unnecessarily
        # weight 0.039
        alg straw2
        hash 0  # rjenkins1
        item osd.2 weight 0.019
        item osd.3 weight 0.019
}
 
root default {
        id -1           # do not change unnecessarily
        id -2 class ssd         # do not change unnecessarily
        id -8 class hdd         # do not change unnecessarily
        # weight 0.068
        alg straw2
        hash 0  # rjenkins1
        item ubuntu weight 0.029
        item ubuntu-sebre weight 0.039
}

所以对于 luminous 版本来说,想要某个 pool 使用 ssd,某个 pool 使用 hdd, 某个 pool 使用 nvme,用户只需要用命令创建一个新的 rule 就可以了。如下命令,创建一个使用 ssd 的 rule 给某个 pool 用:

//下面的命令创建一个rule,它的名字为rule-pool-ssd,容错性为replicated,take使用bucket名为default的root且只使用它的class ssd,select使用osd类型
$ceph osd crush rule create-replicated rule-pool-ssd default osd ssd 
 
//上面命令生成对应的rule如下:
rule rule-pool-ssd{
        id 1
        type replicated
        min_size 1
        max_size 10
        step take default class ssd
        step chooseleaf firstn 0 type host
        step emit
}

三、使用新创建的 rule

# luminus 版本设置 pool 规则的语法:ceph osd pool set crush_rule

参考:

luminous 的新特性参考了 ceph - 用命令创建一个使用 rule-ssd 规则的存储池

转自:https://blog.csdn.net/don_chiang709/article/details/100134531

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐