概述
在Ceph的环境中,我们通常会使用SSD来作为OSD的Journal,而OSD的数据盘是普通的SATA盘,在实践中,经常会发现SATA盘的性能瓶颈影响了OSD的性能,那能不能继续压榨SSD的性能来提升OSD的性能呢?
答案是肯定的,可以使用SSD加速SATA盘的策略来加速作为OSD数据盘的SATA盘,通常的策略有:
- flashcache
- bcache
有文章对比测试过这两种cache策略的性能,bcache的性能会好很多,这里介绍如何使用bcache来给OSD加速。
测试环境
Ceph版本:Jewel 10.2.9
作为Ceph机器的物理机的磁盘配置如下:
- SSD - 745 G,三块
- SATA - 3.7 T,九块
对磁盘规划如下:
- 每个SSD分出3个10G分区,作为三个SATA盘OSD的journal
- 每个SSD剩余空间分为1个分区,使用bcache来加速三个SATA盘
磁盘分区前如下:
1 | root@ceph0:~/yangguanjun# lsblk |
磁盘分区后为:
1 | root@ceph0:~# lsblk |
设备性能
针对当前环境,先要了解下各个硬件的性能,通过fio测试结果如下:
磁盘类型 | read | write | randread | randwrite |
---|---|---|---|---|
SATA | 155MB/s | 158MB/s | 126 | 219 |
SSD | 508MB/s | 426MB/s | 69.2k | 45.5k |
参考文章配置SATA盘与SSD盘的bcache策略:http://www.yangguanjun.com/2018/03/26/lvm-sata-ssd-bcache/
配置bcache命令如下:
1 | # make-bcache -B /dev/sde -C /dev/sdc4 |
配置后的块设备信息如下:
1 | # lsblk |
之后测试bcache加速设备性能:
bcache的不同缓存策略 | randwrite |
---|---|
bcache [writethrough] | 218 |
bcache [writeback] | 38.8k |
上面结果看出 bcache
配置为writeback
模式后,加速设备性能很高,会比SSD盘的性能略差些。但之后数据会回刷到SATA上,通过iostat
可以看到SATA盘会繁忙好一阵子。
部署OSD
默认直接使用ceph-deploy
部署bcache
设备时会报错,如下:
1 | # ceph-deploy osd prepare ceph0:/dev/bcache0:/dev/sdd1 |
搜索有如下参考,ceph-deploy
还不支持bcache
设备,默认ceph-deploy
会尝试对bcache
设备进行分区,而bcache
设备是不支持分区后挂载的,所以会导致命令失败。
http://tracker.ceph.com/issues/13278
https://github.com/ceph/ceph/pull/16327
解决办法一
修改ceph-disk
的代码,把上述链接中的patch加上,可惜没搞成功,很奇怪修改后的代码貌似没跑到。。。因时间紧急就没再研究,但这个办法肯定是可行的!
解决办法二
手动格式化bcache
设备,mount上后,通过ceph-deploy
指定目录来部署了,步骤如下:
1 | # mkdir /var/lib/ceph/osd/ceph-0 |
然后再尝试部署,报错如下:
1 | # ceph-deploy --overwrite-conf osd prepare ceph0:/var/lib/ceph/osd/ceph-0:/dev/sdd1 |
从输出里看是权限的问题,执行如下两条命令后,部署成功:
1 | root@ceph0:/var/lib/ceph/osd# chown -R ceph:ceph /dev/sdd1 |
Ceph OSD开机自启动
bcache开机启动
添加bcache开机启动
1 | # cat /etc/sysconfig/modules/bcache.modules |
自动挂载OSD目录
添加磁盘自动挂载,保证重启后Ceph OSD能自动运行
1 | root@ceph0:~# blkid |