Ceph:如何在特定的OSD上放置一个池?

时间:2019-09-23 10:24:36

标签: ceph

我有一个由66个OSD组成的Ceph群集,其中包含一个data_pool和一个metadata_pool

我想将metadata_pool放在3个具有SSD的特定OSD上,因为所有其他63个OSD具有较旧的磁盘。

如何强制Ceph将metadata_pool放在特定的OSD上?

多谢。

1 个答案:

答案 0 :(得分:1)

您需要为池使用特殊的粉碎规则,该规则将定义要使用的存储类型。有一个nice answer in the proxmox forum

归结为:

Ceph知道哪个驱动器是HDD或SDD。反过来,这些信息可用于创建一个压缩规则,该规则将仅将PG放置在该类型的设备上。

ceph附带的默认规则是plicated_rule:

# rules
rule replicated_rule {
    id 0
    type replicated
    min_size 1
    max_size 10
    step take default
    step chooseleaf firstn 0 type host
    step emit
}

因此,如果您的ceph群集同时包含两种类型的存储设备,则可以使用以下命令创建新的粉碎规则:

$ ceph osd crush rule create-replicated replicated_hdd default host hdd
$ ceph osd crush rule create-replicated replicated_ssd default host ssd

新创建的规则看起来几乎相同。这是硬盘规则:

rule replicated_hdd {
    id 1
    type replicated
    min_size 1
    max_size 10
    step take default class hdd
    step chooseleaf firstn 0 type host
    step emit
}

如果您的群集不包含硬盘或ssd设备,则规则创建将失败。

此后,您将能够为现有池设置新规则:

$ ceph osd pool set YOUR_POOL crush_rule replicated_ssd

集群将进入HEALTH_WARN并将对象移动到SSD上的正确位置,直到集群再次恢复健康。

此功能was added with ceph 10.x aka Luminous