2.4. 设备类
Ceph 的 CRUSH map 在控制数据放置方面提供了非常规灵活性。这是 Ceph 的最大优势之一。早期 Ceph 部署使用硬盘几乎完全使用。现在,Ceph 集群经常会使用多种类型的存储设备构建: HDD、SSD、NVMe 甚至各种更旧的类型。例如,在 Ceph 对象网关部署中通常会有存储策略,以供客户端在较慢的 HDD 中保存数据和其他存储策略,用于将数据存储到快 SSD 上。Ceph 对象网关部署可能甚至可能有一个由 fast SSD 支持的池用于存储桶索引。此外,OSD 节点也经常使用 SSD 用于日志或直写日志,它们没有出现在 CRUSH 映射中。这些复杂的硬件场景过去需要手动编辑 CRUSH map,这可能非常耗时。对于不同的存储设备类别,并不需要不同的 CRUSH 层次结构。
CRUSH 规则在 CRUSH 层次结构中工作。但是,如果不同的存储设备类别驻留在相同的主机上,该过程会变得更加复杂 - 需要用户为每个设备类创建多个 CRUSH 层次结构,然后禁用 osd crush update on start 选项,以自动执行许多 CRUSH 层次结构管理。设备类别通过告知 CRUSH 规则应使用的设备类别,从而大大简化了 CRUSH 管理任务,从而消除了此繁琐的问题。
ceph osd tree 命令有一个列,它反映了一个设备类。
以下小节详细介绍了设备类使用。如需了解更多示例,请参阅 Using Different Device Classes 和 CRUSH Storage Strategy Examples。
2.4.1. 设置设备类 复制链接链接已复制到粘贴板!
要为 OSD 设置设备类,请执行以下操作:
ceph osd crush set-device-class <class> <osdId> [<osdId>...]
# ceph osd crush set-device-class <class> <osdId> [<osdId>...]
例如:
ceph osd crush set-device-class hdd osd.0 osd.1 ceph osd crush set-device-class ssd osd.2 osd.3 ceph osd crush set-device-class bucket-index osd.4
# ceph osd crush set-device-class hdd osd.0 osd.1
# ceph osd crush set-device-class ssd osd.2 osd.3
# 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> <osdId> [<osdId>...]
# ceph osd crush rm-device-class <class> <osdId> [<osdId>...]
例如:
ceph osd crush rm-device-class hdd osd.0 osd.1 ceph osd crush rm-device-class ssd osd.2 osd.3 ceph osd crush rm-device-class bucket-index osd.4
# ceph osd crush rm-device-class hdd osd.0 osd.1
# ceph osd crush rm-device-class ssd osd.2 osd.3
# ceph osd crush rm-device-class bucket-index osd.4
2.4.3. 重命名设备类 复制链接链接已复制到粘贴板!
要为使用该类的所有 OSD 重命名设备类,请执行以下操作:
ceph osd crush class rename <oldName> <newName>
# ceph osd crush class rename <oldName> <newName>
例如:
ceph osd crush class rename hdd sas15k
# ceph osd crush class rename hdd sas15k
2.4.4. 列出设备类 复制链接链接已复制到粘贴板!
要列出 CRUSH 映射中的设备类,请执行以下操作:
ceph osd crush class ls
# ceph osd crush class ls
输出将类似如下:
[
"hdd",
"ssd",
"bucket-index"
]
[
"hdd",
"ssd",
"bucket-index"
]
2.4.5. 列出设备类的 OSD 复制链接链接已复制到粘贴板!
要列出属于特定类的所有 OSD,请执行以下操作:
ceph osd crush class ls-osd <class>
# ceph osd crush class ls-osd <class>
例如:
ceph osd crush class ls-osd hdd
# ceph osd crush class ls-osd hdd
输出是一个 OSD 号列表。例如:
2.4.6. 按类列出 CRUSH 规则 复制链接链接已复制到粘贴板!
要列出引用同一类的所有 crush 规则,请执行以下操作:
ceph osd crush rule ls-by-class <class>
# ceph osd crush rule ls-by-class <class>
例如:
ceph osd crush rule ls-by-class hdd
# ceph osd crush rule ls-by-class hdd