问题描述
在 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)