记得在很久很久以前,ceph当时的版本是有提供使用内存做journal的配置的,当时是使用的tmpfs,但是现在的版本在搜资料的时候,发现关于这个的没怎么找到资料,邮件列表里面有人有提到怎么做,看了下大致的原理,然后还是自己来实践一次
预备知识: 首先需要知道的是什么是内存盘,内存盘就是划分了一个内存空间来当磁盘使用来进行加速的,这个在某些操作系统里面会把/tmp/分区挂载到tmpfs下,来达到加速的目的,这样就是重启后,会清空/tmp的内容,centos7 默认的分区方式也使用了tmpfs来加速,df -h可以看下那个tmpfs就是内存盘了
本文使用的不是tmpfs,这个是因为tmpfs不是我们常见意义上的那种文件系统,它不能格式化,ceph 在进行日志创建的时候会去检查journal 所在分区的 uuid, 而tmpfs在检测的时候 会返回一个全0的字符串,这个在校验的时候显示的无效的,所以也就部署起来有问题,下面开始介绍我的做法,这个里面做法很多,步骤也可以自己去变化,这里只是提供了我的一种思路
我使用的是ramdisk,关于怎么做ramdisk这个也研究了一下,因为篇幅有点长并且属于预备步骤,请参考我的另外一篇文章:
centos7下做内存盘的方法
测试环境: 单机,四块SAS的OSD,日志为5G(内存盘大小为6G),副本 2, osd分组
说明:因为这里只去研究这个内存盘journal的实现,以及性能的差别,其他的组合方案需要自己去配置,所以单机的环境已经可以完成这个
1、准备journal的内存盘 检查内存盘大小 1 2 3 4 5 6 [root@lab8106 ceph] Disk /dev/ram0: 6797 MB, 6797721600 bytes, 13276800 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes
我的大小为6G
格式化内存盘,并且挂载 创建挂载目录(有多少osd建几个)
格式化memdisk(需要几个格式化几个)
挂载内存盘
挂载完了后的效果如下: 1 2 3 4 5 6 7 8 9 10 11 12 [root@lab8106 ceph] Filesystem Size Used Avail Use% Mounted on /dev/sda2 50G 9.7G 41G 20% / devtmpfs 24G 0 24G 0% /dev tmpfs 24G 0 24G 0% /dev/shm tmpfs 24G 17M 24G 1% /run tmpfs 24G 0 24G 0% /sys/fs/cgroup /dev/sda1 283M 94M 190M 33% /boot /dev/ram0 6.4G 33M 6.3G 1% /var/lib/ceph/mem/ceph-0 /dev/ram1 6.4G 33M 6.3G 1% /var/lib/ceph/mem/ceph-1 /dev/ram2 6.4G 33M 6.3G 1% /var/lib/ceph/mem/ceph-2 /dev/ram3 6.4G 33M 6.3G 1% /var/lib/ceph/mem/ceph-3
2、准备ceph的环境 修改deploy的ceph.conf文件,在部署前修改好 单机环境添加下面的三个
1 2 3 osd_crush_chooseleaf_type = 0 osd_pool_default_size = 2 osd_journal = /var/lib/ceph/mem/$cluster -$id /journal
意思就不在这里介绍了
创建mon 1 2 [root@lab8106 ceph] [root@lab8106 ceph]
创建osd 1 2 [root@lab8106 ceph] [root@lab8106 ceph]
部署完这个检查下
1 2 3 4 5 6 7 8 [root@lab8106 ceph] Filesystem Size Used Avail Use% Mounted on …… /dev/ram0 6.4G 5.1G 1.3G 80% /var/lib/ceph/mem/ceph-0 /dev/ram1 6.4G 33M 6.3G 1% /var/lib/ceph/mem/ceph-1 /dev/ram2 6.4G 33M 6.3G 1% /var/lib/ceph/mem/ceph-2 /dev/ram3 6.4G 33M 6.3G 1% /var/lib/ceph/mem/ceph-3 /dev/sdb1 280G 34M 280G 1% /var/lib/ceph/osd/ceph-0
可以看到内存盘分区内已经生成可一个5G的journal文件
1 2 3 4 [root@lab8106 ceph] total 40 …… lrwxrwxrwx 1 root root 32 Jan 14 10:28 journal -> /var/lib/ceph/mem/ceph-0/journal
可以看到osd分区的也是链接到了内存盘,环境没问题
继续部署生效的三个osd 部署完再次检查环境
1 2 3 4 5 6 7 8 9 [root@lab8106 ceph] /dev/ram0 6.4G 5.1G 1.3G 80% /var/lib/ceph/mem/ceph-0 /dev/ram1 6.4G 5.1G 1.3G 80% /var/lib/ceph/mem/ceph-1 /dev/ram2 6.4G 5.1G 1.3G 80% /var/lib/ceph/mem/ceph-2 /dev/ram3 6.4G 5.1G 1.3G 80% /var/lib/ceph/mem/ceph-3 /dev/sdb1 280G 34M 280G 1% /var/lib/ceph/osd/ceph-0 /dev/sdc1 280G 34M 280G 1% /var/lib/ceph/osd/ceph-1 /dev/sdd1 280G 34M 280G 1% /var/lib/ceph/osd/ceph-2 /dev/sde1 280G 33M 280G 1% /var/lib/ceph/osd/ceph-3
都挂载正确 检查集群的状态
1 2 3 4 5 6 7 8 9 [root@lab8106 ceph] cluster 68735617-2d30-4a81-9865-aeab3ea85e6e health HEALTH_OK monmap e1: 1 mons at {lab8106=192.168.8.106:6789/0} election epoch 2, quorum 0 lab8106 osdmap e21: 4 osds: 4 up, 4 in pgmap v35: 192 pgs, 1 pools, 0 bytes data, 0 objects 136 MB used, 1116 GB / 1117 GB avail 192 active+clean
环境部署完毕
开始测试 测试一:采用内存盘journal的方式 使用radosbench进行测试(采取默认的写,并且不删除的测试,尽量把内存写满,未进行任何调优)
1 2 3 4 5 6 7 8 9 10 11 12 13 [root@lab8106 ceph] Total time run: 120.568031 Total writes made: 5857 Write size: 4194304 Bandwidth (MB/sec): 194.314 Stddev Bandwidth: 144.18 Max bandwidth (MB/sec): 504 Min bandwidth (MB/sec): 0 Average Latency: 0.329322 Stddev Latency: 0.48777 Max latency: 3.01612 Min latency: 0.0377235
测试二:采用默认的磁盘journal的方式,环境恢复要原始的情况
1 2 3 4 5 6 7 8 9 10 11 12 13 [root@lab8106 ceph] Total time run: 120.613851 Total writes made: 3404 Write size: 4194304 Bandwidth (MB/sec): 112.889 Stddev Bandwidth: 26.3641 Max bandwidth (MB/sec): 160 Min bandwidth (MB/sec): 0 Average Latency: 0.566656 Stddev Latency: 0.305038 Max latency: 2.00623 Min latency: 0.105026
测试的结果如上,上表格也许看的更直观,正好之前在找一个表格插件,现在用用
内存盘journal与磁盘journal性能对比
内存盘journal
磁盘journal
测试时间(s)
120.568031
120.613851
写数据块数
5857
3404
总共写入数据(MB)
23428
13616
数据块大小
4194304
4194304
写带宽(MB/sec)
194.314
112.889
带宽标准偏差
144.18
26.3641
最大带宽(MB/sec)
504
160
平均延时
0.32932
0.566656
延时偏差
0.48777
0.305038
最大延时
3.01612
2.00623
最小延时
0.0377235
0.105026
可以看到相关数据,光写带宽就提升了接近一倍,这个是因为,在磁盘journal情况下,写入journal的同时还有filestore的数据写入,相当于同时有两个写入在磁盘上,磁盘的性能自然只有一半了
以上就是关于journal的内存盘实现,这里面还会面临着其他的问题
机器内存的占用问题
断电后的处理
同时断电是否会搞坏pg状态
搞坏的情况是否能恢复
如果解决了这些问题,这个不失为一种性能提升的方案,毕竟内存的成本和速度是ssd的磁盘和单独磁盘journal不能比的,journal本身也是一种循环的写入的空间
增加知识(/dev/shm模式) 上面的通过memdisk的方式是可以,还有更方便的方式就是直接用内存路径,需要处理几个地方,我们来看下怎么处理
首先修改配置文件
1 2 3 osd_journal =/dev/shm/$cluster -$id /journal journal dio = false journal aio = false
增加这三个选项,否则会失败,这个是因为在内存这个路径下用文件的时候是无法满足默认的dio,和aio选项的,会造成无法生成journal文件,生成的journal的文件的大小为0,无法成功
假如我们给osd.5替换journal,我们看下操作步骤
1 2 [root@lab8106 ceph-5] [root@lab8106 ceph-5]
创建目录并且修改权限 修改fsid
1 2 [root@lab8106 ceph-5] f66832a7-6bd0-4eef-a538-15ba2404243f
这个fsid是用来校验journal的 而内存的uuid为
1 2 [root@lab8106 ceph-5] 00000000-0000-0000-0000-000000000000
所以修改这个文件
1 echo 00000000-0000-0000-0000-000000000000 > fsid
创建journal
1 2 3 4 [root@lab8106 ceph-5] 2017-01-20 10:58:22.297737 7f0f1a75a800 -1 created new journal /dev/shm/ceph-5/journal for object store /var/lib/ceph/osd/ceph-5 [root@lab8106 ceph-5] -rw-r--r-- 1 ceph ceph 1073741824 Jan 20 10:58 /dev/shm/ceph-5/journal
启动osd就可以了
##变更记录
Why
Who
When
创建
武汉-运维-磨渣
2016-01-14
增加/dev/shm/路径模式
武汉-运维-磨渣
2017-01-20