「Ceph」- 在特定的 OSD 上创建 Pool 实例

  CREATED BY JENKINSBOT

问题描述

在 Cpeh Cluster 中,即存在 SSD 磁盘,又存在 HDD 磁盘,能够同时作为 OSD 并为 Pool 提供存储。

我们并不希望两者混用,我们希望能够分开:部分 Pool 使用 SSD 存储,部分 Pool 使用 HDD 存储;

该笔记将记录:在 Ceph 中,如何为 Pool 使用 SSD 存储(或 HDD 存储);

解决方案

为解决该问题,需要修改 Ceph CRUSH map 内容

1)通过 CRUSH map 来创建不同的 Rule,
2)并为 Pool 指定其所使用的 Rule;

第一步、获取 CRUSH Map 内容

第二步、修改 CRUSH Map 内容

在 CRUSH Map 中,增加 Bucket 定义:

root ssd {
    id -1
    alg straw
    hash 0
    item osd.0 weight 0.010
    item osd.2 weight 0.010
    item osd.3 weight 0.010
}

root hdd {
    id -6
    alg straw
    hash 0
    item osd.0 weight 0.010
    item osd.2 weight 0.010
    item osd.3 weight 0.010
}

在 CRUSH Map 中,增加 Rule 定义:

rule ssd-pool {
    ruleset 1
    type replicated
    min_size 1
    max_size 10
    step take ssd
    step chooseleaf firstn 0 type osd
    step emit
}
rule hdd-pool {
    ruleset 6
    type replicated
    min_size 1
    max_size 10
    step take hdd
    step chooseleaf firstn 0 type osd
    step emit
}

第三步、更新 CRUSH Map 内容

第四步、验证配置是否生效

# ceph osd tree
... 能够看到新的 OSD Tree,分别是 ssd 与 hdd 两个结构;

// 创建 Pool 使用 SSD 并验证其所使用的 Rule;

# ceph pool create pool-in-ssd 8 8
# ceph osd pool set pool-in-ssd crush_ruleset 1

# ceph osd dump | grep -i ssd
pool 2 'pool-in-ssd' replicated size 2 min_size 1 crush_rule 1 object_hash ...

// 创建 Pool 使用 HDD 并验证其所使用的 Rule;

# ceph pool create pool-in-hdd 8 8
# ceph osd pool set pool-in-hdd crush_ruleset 6
# ceph osd dump | grep -i ssd
...

// 向 SSD Pool 添加文件,并查看文件所在的 OSD 实例

# rados -p pool-in-ssd put hosts /etc/hosts
# rados osd map pool-in-ssd hots
... up ([1,2,3],p1) acting up ([1,2,3],p1)