ceph集群分别创建ssd和hdd池 作者: sysit 分类: d 发表于 2020-05-29 166人围观 ## 1. 使用场景 存储节点上既有SATA盘也有SSD盘,把各节点的SSD和SATA分别整合成独立的存储池,为不同的应用供给不同性能的存储。 比如常见的云环境中的虚拟机实例,对于实时数据IO性能要求高,并且都是热数据,可以把这部分的存储需求放入SSD的存储池里;而对于备份、快照等冷数据应用,相对IO性能需求比较低,因此将其可以放在普通的由SATA盘组成的存储池里。  ## 2. 方法 Luminous版本的ceph新增了一个crush class的功能,可以为新增的设备指定为类,创建rule的时候直接指定class即可。 创建一个磁盘类型的class,给磁盘标记class的统一标签,自动会根据class的类型创建一个树,根据树创建rule,根据rule创建存储池,整个操作没有动crushmap的操作 增加或修改盘的时候,设置下属性即可。 该方案的优点: 该方案的优点为充分利用SSD设备高性能的优势,将关键性业务或者IO敏感型业务全部放入高性能存储池,为客户提供性能优越的存储服务。 该方案的缺点: 该方案的缺点为受到成本限制,高性能存储池存储容量规模会比较小,只能针对性地对少数关键性业务或者IO敏感型业务进行服务质量保障,且业务一经规划部署至某个存储池后,不能在两个存储池之间进行自动转换,后期进行调整开销较大。 ## 3. 操作手册 ### 3.1 查看osd ``` [root@node3 ~]# ceph osd tree ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 40.72424 root default -3 7.51027 host node3 0 hdd 3.63869 osd.0 up 1.00000 1.00000 4 hdd 3.63869 osd.4 up 1.00000 1.00000 8 ssd 0.23289 osd.8 up 1.00000 1.00000 -5 10.91606 host node4 1 hdd 3.63869 osd.1 up 1.00000 1.00000 5 hdd 3.63869 osd.5 up 1.00000 1.00000 9 hdd 3.63869 osd.9 up 1.00000 1.00000 -7 11.14896 host node6 2 hdd 3.63869 osd.2 up 1.00000 1.00000 6 hdd 3.63869 osd.6 up 1.00000 1.00000 10 hdd 3.63869 osd.10 up 1.00000 1.00000 12 ssd 0.23289 osd.12 up 1.00000 1.00000 -9 11.14896 host node7 3 hdd 3.63869 osd.3 up 1.00000 1.00000 7 hdd 3.63869 osd.7 up 1.00000 1.00000 11 hdd 3.63869 osd.11 up 1.00000 1.00000 13 ssd 0.23289 osd.13 up 1.00000 1.00000 ``` ### 3.2 查看class类型 ``` [root@node3 ~]# ceph osd crush class ls [ "hdd", "ssd" ] ``` ### 3.3 对osd的class的一些操作 * 删除osd的默认class ``` ceph osd crush rm-device-class osd.1 ``` * 标记osd的class ``` ceph osd crush set-device-class hdd osd.1 ceph osd crush set-device-class ssd osd.2 ``` ### 3.4 rule规则 * 默认规则 ``` [root@node3 ~]# ceph osd crush rule list replicated_rule ``` * 创建规则 ``` # 格式ceph osd crush rule create-replicated<rule-name> <root> <failure-domain> <class> # ssd规则 ceph osd crush rule create-replicated rule-ssd default host ssd # hdd规则 ceph osd crush rule create-replicated rule-hdd default host hdd ``` * 再次查看 ``` [root@node3 ~]# ceph osd crush rule ls replicated_rule rule-ssd rule-hdd ``` ### 3.5 存储池规则 * 查看存储池的规则 ``` [root@node3 ~]# ceph osd pool ls detail pool 1 'vms' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 64 pgp_num 64 last_change 75 flags hashpspool,selfmanaged_snaps stripe_width 0 application rbd removed_snaps [1~3] ``` * 创建一个使用rule-ssd规则的存储池 ``` ceph osd pool create ssdpool 64 64 rule-ssd ``` * 创建一个使用rule-hdd规则的存储池 ``` ceph osd pool create hddpool 32 32 rule-hdd ``` * 修改一个存储池的规则 ``` #修改vms存储池的规则为rule-hdd ceph osd pool set vms crush_rule rule-hdd ``` * 查看 查看ssdpool的信息可以看到使用的crush_rule 为2,也就是rule-ssd ``` [root@node3 ~]# ceph osd pool ls detail | grep ssdpool pool 2 'ssdpool' replicated size 3 min_size 2 crush_rule 1 object_hash rjenkins pg_num 64 pgp_num 64 last_change 79 flags hashpspool stripe_width 0 ``` ## 4. 测试 * 创建磁盘 ``` rbd create disk0 --size 40960 --pool hddpool rbd create disk1 --size 40960 --pool ssdpool ``` * map磁盘 ``` rbd -p ssdpool map disk1 rbd -p hddpool map disk0 ``` * 格式化并挂载 ``` mkfs.xfs /dev/rbd0 mkfs.xfs /dev/rbd1 mount /dev/rbd0 /data1 mount /dev/rbd1 /data2 ``` * 测试 ``` fio -ioengine=libaio -bs=4k -direct=1 -thread -rw=randwrite -size=8G -filename=/data1/8g -name="EBS 4KB randwrite test" -iodepth=32 -runtime=60 ``` 如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作! 赞赏支持