1 方案介绍
存储节点上既有SATA盘也有SSD盘或者是PCIE,就是把每台服务器上的SSD,PCIE和SATA分别整合成独立的存储池,以提供不同性能的存储。把对实时数据IO要求高的放入SSD存储池中。而对于备份,快照等数据,对IO性能要求较低的可以放入SATA盘。
1 硬件环境
存储节点主机名 |
Osd编号 |
对应设备 |
存储类型 |
Ceph-osd1 |
O |
Sdb |
SSD |
Ceph-osd1 |
1 |
Sdc |
SATA |
Ceph-osd2 |
2 |
Sdb |
SSD |
Ceph-osd2 |
3 |
Sdc |
SATA |
和正常ceph安装没有区别,只是后期会修改CRUSH。
3 部署环境
假设你已经部署好ceph了,ceph默认的CRUSH故障域是host级别
3.1 查看当前CRUSH
[root@ceph-osd1 ~]# ceph osd tree ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY -2 0.49988 root host -4 0.1006 host ceph-osd1 0 0.04999 osd.0 up 1.00000 1.00000 1 0.04999 osd.1 up 1.00000 1.00000 -5 0.1006 host ceph-osd2 3 0.04999 osd.3 up 1.00000 1.00000 4 0.04999 osd.4 up 1.00000 1.00000
3.2 获取当前Crush Map
[root@ceph-osd1 ~]# ceph osd getcrushmap -o /tmp/cephcrushmap got crush map from osdmap epoch 766
3.3 反编译Crush Map
因为/tmp/cephcrushmap是一个二进制文件,需要通过crushtool反编译为文本文件。
[root@ceph-osd1 ~]# crushtool -d /tmp/cephcrushmap > /tmp/cephcrushmap.txt
3.4 编辑Crush Map文件
3.4.1 设置SSD pool的Buchet入口
新建一个root层级,命名为ssd,并且把SSD设备的OSD移到里面(保留OSD所属的HOST层级)
[root@ceph-osd1 ~]# cat /tmp/cephcrushmap.txt host ceph-osd1 { id -4 # do not change unnecessarily # weight 0.150 --权重可以忽略,ceph会根据OSD自动计算权重 alg straw hash 0 # rjenkins1 item osd.0 weight 0.050 #SSD的OSD } host ceph-osd2 { id -5 # do not change unnecessarily # weight 0.150 alg straw hash 0 # rjenkins1 item osd.2 weight 0.050 #SSD的OSD } root ssd { #新建一个名为ssd的root bucket,最后SSD pool入口 id -2 # do not change unnecessarily # weight 0.500 alg straw hash 0 # rjenkins1 item ceph-osd1 weight 0.100 item ceph-osd2 weight 0.100 }
3.4.2 再把默认的root bucket 重命名为sata,并把SATA的OSD移到sata里面
[root@ceph-osd1 ~]# cat /tmp/cephcrushmap.txt host ceph-osd1 { id -4 # do not change unnecessarily # weight 0.150 --权重可以忽略,ceph会根据OSD自动计算权重 alg straw hash 0 # rjenkins1 item osd.1 weight 0.050 #SATA的OSD } host ceph-osd2 { id -5 # do not change unnecessarily # weight 0.150 alg straw hash 0 # rjenkins1 item osd.3 weight 0.050 #SATA的OSD } root sata { #新建一个名为ssd的root bucket,最后SSD pool入口 id -2 # do not change unnecessarily # weight 0.500 alg straw hash 0 # rjenkins1 item ceph-osd1 weight 0.100 item ceph-osd2 weight 0.100 }
3.5 设置rule规则
3.5.1 为SSD pool添加rule
# rules rule ssd { ruleset 0 type replicated min_size 1 max_size 10 step take ssd step chooseleaf firstn 0 type host step emit }
3.5.2 为SATA pool添加rule
# rules rule sata { ruleset 1 type replicated min_size 1 max_size 10 step take sata step chooseleaf firstn 0 type host step emit }
3.6 编译Crush Map文本文件为二进制文件
[root@ceph-osd1 ~]# crushtool -c /tmp/cephcrushmap.txt -o /tmp/cephcrushmap.new
3.7 把新的Crush Map应用于集群并生效
[root@ceph-osd1 ~]# ceph osd setcrushmap -i /tmp/cephcrushmap.new set crush map
3.8 查看CRUSH结构,确认新的Crush Map已经生效
[root@ceph-osd1 ~]# ceph osd tree ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY -2 0.49997 root ssd -4 0.10009 host ceph-osd1 0 0.04999 osd.0 up 1.00000 1.00000 -4 0.10009 host ceph-osd2 1 0.04999 osd.2 up 1.00000 1.00000 -2 0.49997 root sata -4 0.10009 host ceph-osd1 3 0.04999 osd.1 up 1.00000 1.00000 -4 0.10009 host ceph-osd2 4 0.04999 osd.3 up 1.00000 1.00000
3.9 创建SSD和SATA存储池
[root@ceph-osd1 ~]# ceph osd pool create SSD 128 128 pool 'SSD' created [root@ceph-osd1 ~]# ceph osd pool create SATA 128 128 pool 'SATA' created
3.10 为存储池指定合适的rule
[root@ceph-osd1 ~]# ceph osd pool set SSD crush_ruleset 0 [root@ceph-osd1 ~]# ceph osd pool set SATA crush_ruleset 1
3.11 查看rule是否生效
[root@ceph-osd1 ~]# ceph osd dump|grep -Ei "ssd|sata" pool 24 'SSD' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 128 pgp_num 128 last_change 768 flags hashpspool stripe_width 0 #SSD pool的rule id是0 pool 25 'SATA' replicated size 3 min_size 2 crush_ruleset 1 object_hash rjenkins pg_num 128 pgp_num 128 last_change 770 flags hashpspool stripe_width 0 #SATA pool的rule id是1
到这里就全部OK了。
版权声明:本文为博主原创文章,未经博主允许不得转载。
ceph CRUSH MAP
- 上一篇:一次OCR磁盘组掉磁盘恢复过程
- 下一篇:自定义CRUSH-主备存储方案