从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 <pool name> crush_rule <rule name>
参考:
luminous的新特性参考了 ceph-用命令创建一个使用rule-ssd规则的存储池