2.4. 设备类
Ceph 的 CRUSH map 在控制数据放置时提供了额外的灵活性。这是 Ceph 的最大优势之一。早期 Ceph 部署使用硬盘几乎独占。现在,Ceph 集群经常会使用多种类型的存储设备构建: HDD、SSD、NVMe 甚至各种更旧的类型。例如,在 Ceph 对象网关部署中通常会有存储策略,以供客户端在较慢的 HDD 中保存数据和其他存储策略,用于将数据存储到快 SSD 上。Ceph 对象网关部署可能甚至具有由快速 SSD 支持用于 bucket 索引的池。此外,OSD 节点通常具有专门用于日志或 write-ahead 日志的 SSD,它们没有出现在 CRUSH map 中。之前,这些复杂的硬件方案需要手动编辑 CRUSH map,这可能会非常耗时且非常繁琐。对于不同的存储设备类别,并不需要不同的 CRUSH 层次结构。
CRUSH 规则在 CRUSH 层次结构方面工作。但是,如果不同类别存储设备驻留在同一主机上,该过程会变得更为复杂 - 询问用户为每个类设备创建多个 CRUSH 层次结构,然后禁用 osd crush update on start
选项,以自动执行大部分 CRUSH 层次结构管理。设备类通过告诉 CRUSH 规则要使用的设备类,大大简化了 CRUSH 管理任务,从而消除了这种明显性。
ceph osd tree
命令具有反映设备类的列。
2.4.1. 设置设备类
要为 OSD 设置设备类,请执行以下操作:
语法
ceph osd crush set-device-class CLASS OSD_ID [OSD_ID..]
示例
[ceph: root@host01 /]# ceph osd crush set-device-class hdd osd.0 osd.1 [ceph: root@host01 /]# ceph osd crush set-device-class ssd osd.2 osd.3 [ceph: root@host01 /]# ceph osd crush set-device-class bucket-index osd.4
Ceph 可能会自动为设备分配类。但是,类名称只是任意字符串。不需要遵循 hdd
、ssd
或 nvme
。在示例中,名为 bucket-index
的设备类可能表示 Ceph 对象网关池使用独占 bucket 索引工作负载的 SSD 设备。要更改已经设置的设备类,请首先使用 ceph osd crush rm-device-class
。
2.4.2. 删除设备类
要为 OSD 删除设备类,请执行以下操作:
语法
ceph osd crush rm-device-class CLASS OSD_ID [OSD_ID..]
示例
[ceph: root@host01 /]# ceph osd crush rm-device-class hdd osd.0 osd.1 [ceph: root@host01 /]# ceph osd crush rm-device-class ssd osd.2 osd.3 [ceph: root@host01 /]# ceph osd crush rm-device-class bucket-index osd.4
2.4.3. 重命名设备类
要为使用该类的所有 OSD 重命名设备类,请执行以下操作:
语法
ceph osd crush class rename OLD_NAME NEW_NAME
示例
[ceph: root@host01 /]# ceph osd crush class rename hdd sas15k
2.4.4. 列出设备类
要列出 CRUSH 映射中的设备类,请执行以下操作:
语法
ceph osd crush class ls
输出将类似如下:
示例
[ "hdd", "ssd", "bucket-index" ]
2.4.5. 列出设备类的 OSD
要列出属于特定类的所有 OSD,请执行以下操作:
语法
ceph osd crush class ls-osd CLASS
示例
[ceph: root@host01 /]# ceph osd crush class ls-osd hdd
输出是一个 OSD 号列表。例如:
0 1 2 3 4 5 6
2.4.6. 按类列出 CRUSH 规则
要列出引用同一类的所有 CRUSH 规则,请执行以下操作:
语法
ceph osd crush rule ls-by-class CLASS
示例
[ceph: root@host01 /]# ceph osd crush rule ls-by-class hdd