Ceph:如何在特定 OSD 上放置池?
Ceph: How to place a pool on specific OSD?
我有一个 66 OSD 的 Ceph 集群,其中有一个 data_pool
和一个 metadata_pool
。
我想将 metadata_pool
放在 3 个具有 SSD 的特定 OSD 上,因为所有其他 63 个 OSD 都具有较旧的磁盘。
如何强制 Ceph 将 metadata_pool
放置在特定的 OSD 上?
提前致谢。
您的池需要一个特殊的 crush 规则来定义要使用的存储类型。有个nice answer in the proxmox forum.
归结为:
Ceph 知道哪个驱动器是 HDD 或 SDD。此信息反过来可用于创建 crush 规则,该规则将仅在该类型的设备上放置 PG。
ceph 自带的默认规则是 replicated_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 集群包含两种类型的存储设备,您可以创建新的 crush 规则:
$ 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
}
如果您的集群不包含 hdd 或 ssd 设备,规则创建将失败。
在此之后,您将能够为现有池设置新规则:
$ ceph osd pool set YOUR_POOL crush_rule replicated_ssd
集群将进入 HEALTH_WARN 并将对象移动到 SSD 上的正确位置,直到集群再次恢复正常。
我有一个 66 OSD 的 Ceph 集群,其中有一个 data_pool
和一个 metadata_pool
。
我想将 metadata_pool
放在 3 个具有 SSD 的特定 OSD 上,因为所有其他 63 个 OSD 都具有较旧的磁盘。
如何强制 Ceph 将 metadata_pool
放置在特定的 OSD 上?
提前致谢。
您的池需要一个特殊的 crush 规则来定义要使用的存储类型。有个nice answer in the proxmox forum.
归结为:
Ceph 知道哪个驱动器是 HDD 或 SDD。此信息反过来可用于创建 crush 规则,该规则将仅在该类型的设备上放置 PG。
ceph 自带的默认规则是 replicated_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 集群包含两种类型的存储设备,您可以创建新的 crush 规则:
$ 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
}
如果您的集群不包含 hdd 或 ssd 设备,规则创建将失败。
在此之后,您将能够为现有池设置新规则:
$ ceph osd pool set YOUR_POOL crush_rule replicated_ssd
集群将进入 HEALTH_WARN 并将对象移动到 SSD 上的正确位置,直到集群再次恢复正常。