8.7 Ceph CRUSH和设备类别#
Ceph是以算法Controlled Replication Under Scalable Hashing(CRUSH[ CRUSH详见https://ceph.com/wp-content/uploads/2016/08/weil-crush-sc06.pdf])为基础创建的。
CRUSH算法用于计算数据存取的位置,且无需中心索引服务的支持。CRUSH基于构成存储池pool的OSD、buckets(设备位置)和rulesets(数据复制规则)来完成计算。
注意:
关于CRUSH map的进一步信息,可以查看Ceph官方文档中CRUSH map[ CRUSH map参见http://docs.ceph.com/docs/luminous/rados/operations/crush-map/]一节。
调整该图可以反映不同层次的复制关系。对象副本可以分布在不同地方(例如,各故障区域),并同时保持期望的分布。
常见用法是为不同的Ceph pool配置不同类别的磁盘。为此,Ceph luminous引入了设备类的概念,以简化ruleset的创建。
设备类信息可以用命令ceph osd tree查看。各个类代表了各自的根位置。命令如下。
ceph osd crush tree –show-shadow
以上命令的输出示例如下:
ID CLASS WEIGHT TYPE NAME
-16 nvme 2.18307 root default~nvme
-13 nvme 0.72769 host sumi1~nvme
12 nvme 0.72769 osd.12
-14 nvme 0.72769 host sumi2~nvme
13 nvme 0.72769 osd.13
-15 nvme 0.72769 host sumi3~nvme
14 nvme 0.72769 osd.14
-1 7.70544 root default
-3 2.56848 host sumi1
12 nvme 0.72769 osd.12
-5 2.56848 host sumi2
13 nvme 0.72769 osd.13
-7 2.56848 host sumi3
14 nvme 0.72769 osd.14
如果要让pool将对象保存在指定设备类上,需要用指定设备类创建ruleset。
ceph osd crush rule create-replicated <rule-name> <root> <failure-domain> <class>
rule-name
规则名称,用于和pool关联(见GUI和CLI)
root
规则所属的CRUSH根名称(默认ceph root为“default”)
failure-domain
对象所属的故障域(通常为host)
class
要使用的OSD存储类名称(例如nvme,ssd,hdd)
提示
如果pool中已有数据,则现有数据将根据规则移动位置。这有可能对集群性能产生重大影响。你也可以新建一个存储池,然后将磁盘逐个迁移过去。