生产环境中有很多场景,是需要在指定的 OSD 设备上创建 Ceph Pool,或者说需要把pool限制在指定的OSD上。因为Ceph集群中允许使用混合类型的磁盘,比如一部分磁盘是SSD,一部分是HDD。如果针对某些业务需要高速磁盘SSD,而某些业务 HDD 就可以满足部署,在创建资源池 Pool 的时候可以指定它创建在某些OSD 设备上。或者为了不影响性能,通常一套ceph集群中需要RBD块存储和jcephFS文件系统同时使用,这样可以把RBD的pool指定到相应的OSD上,cephFS所使用的pool指定到另外的OSD上。
方法概述
- 修改Ceph集群的 crush map (可以导出crush map文件修改,然后导入生效)里的 rule section,该rule 选择哪个bucket路径 (实际上就是最终选择哪个osd device)
- 通过设定Pool的crush_ruleset 来指定该 Pool 使用crush map里的哪个rule(命令:ceph osd pool set crush_ruleset 4)
场景描述
现有环境:
主机 磁盘
test-ceph01 /dev/sdb,/dev/sdc
test-ceph02 /dev/sdb,/dev/sdc
test-ceph03 /dev/sdb,/dev/sdc
# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.29214 root default
-7 0.09738 host test-ceph01
0 hdd 0.04869 osd.0 up 1.00000 1.00000
4 hdd 0.04869 osd.4 up 1.00000 1.00000
-5 0.09738 host test-ceph02
2 hdd 0.04869 osd.2 up 1.00000 1.00000
5 hdd 0.04869 osd.5 up 1.00000 1.00000
-3 0.09738 host test-ceph03
1 hdd 0.04869 osd.1 up 1.00000 1.00000
3 hdd 0.04869 osd.3 up 1.00000 1.00000
我们需要把RBD存储在/dev/sdb上,cephfs存储在/dev/sdc上
先查看下默认规则:
ceph osd crush rule dump
重新配置Crush map
1.获取Crush map
ceph osd getcrushmap -o ./crushmap
2.反编译C