记得在很久很久以前,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的内存盘

检查内存盘大小

[root@lab8106 ceph]# fdisk -l /dev/ram0

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建几个)
[root@lab8106 ceph]# mkdir -p /var/lib/ceph/mem/ceph-0
格式化memdisk(需要几个格式化几个)
[root@lab8106 ceph]# mkfs.xfs /dev/ram0  -f
挂载内存盘
[root@lab8106 ceph]# mount /dev/ram0 /var/lib/ceph/mem/ceph-0/
挂载完了后的效果如下:
[root@lab8106 ceph]# df -h
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文件,在部署前修改好

单机环境添加下面的三个

osd_crush_chooseleaf_type = 0
osd_pool_default_size = 2
osd_journal = /var/lib/ceph/mem/$cluster-$id/journal

意思就不在这里介绍了

创建mon

[root@lab8106 ceph]# ceph-deploy mon create lab8106
[root@lab8106 ceph]# ceph-deploy gatherkeys lab8106

创建osd

[root@lab8106 ceph]# ceph-deploy osd prepare lab8106:/dev/sdb1:/var/lib/ceph/mem/ceph-0/journal
[root@lab8106 ceph]# ceph-deploy osd activate lab8106:/dev/sdb1

部署完这个检查下

[root@lab8106 ceph]# df -h
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文件

[root@lab8106 ceph]# ll /var/lib/ceph/osd/ceph-0
total 40
……
lrwxrwxrwx 1 root root 32 Jan 14 10:28 journal -> /var/lib/ceph/mem/ceph-0/journal

可以看到osd分区的也是链接到了内存盘,环境没问题

继续部署生效的三个osd

部署完再次检查环境

[root@lab8106 ceph]# df -h|grep 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

都挂载正确

检查集群的状态

[root@lab8106 ceph]# ceph -s
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进行测试(采取默认的写,并且不删除的测试,尽量把内存写满,未进行任何调优)

[root@lab8106 ceph]# rados bench -p rbd 120 write --no-cleanup --run-name testmemdisk
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的方式,环境恢复要原始的情况

[root@lab8106 ceph]# rados bench -p rbd 120 write --no-cleanup --run-name testmemdisk
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的方式是可以,还有更方便的方式就是直接用内存路径,需要处理几个地方,我们来看下怎么处理

首先修改配置文件

osd_journal =/dev/shm/$cluster-$id/journal
journal dio = false
journal aio = false

增加这三个选项,否则会失败,这个是因为在内存这个路径下用文件的时候是无法满足默认的dio,和aio选项的,会造成无法生成journal文件,生成的journal的文件的大小为0,无法成功

假如我们给osd.5替换journal,我们看下操作步骤

[root@lab8106 ceph-5]# mkdir /dev/shm/ceph-5
[root@lab8106 ceph-5]# chown ceph:ceph /dev/shm/ceph-5

创建目录并且修改权限

修改fsid

[root@lab8106 ceph-5]# cat fsid
f66832a7-6bd0-4eef-a538-15ba2404243f

这个fsid是用来校验journal的

而内存的uuid为

[root@lab8106 ceph-5]#ceph-osd -i 7 --get-journal-uuid --osd-journal /dev/shm/ceph-7/journal
00000000-0000-0000-0000-000000000000

所以修改这个文件

echo 00000000-0000-0000-0000-000000000000 > fsid

创建journal

[root@lab8106 ceph-5]# ceph-osd -i 5 --mkjournal --setuser ceph --setgroup ceph --debug_ms 20 --debug_osd 20
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]# ll /dev/shm/ceph-5/journal
-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

ceph使用memdisk做journal的更多相关文章

  1. 处理Ceph osd的journal的uuid问题

    前言 之前有一篇文章介绍的是,在centos7的jewel下面如果自己做的分区如何处理自动挂载的问题,当时的环境对journal的地方采取的是文件的形式处理的,这样就没有了重启后journal的磁盘偏 ...

  2. openstack的glance、nova、cinder使用ceph做后端存储

    块设备与 OPENSTACK 通过 libvirt 你可以把 Ceph 块设备用于 OpenStack ,它配置了 QEMU 到 librbd 的接口. Ceph 把块设备映像条带化为对象并分布到集群 ...

  3. 几个 Ceph 性能优化的新方法和思路(2015 SH Ceph Day 参后感)

    一周前,由 Intel 与 Redhat 在10月18日联合举办了 Shanghai Ceph Day.在这次会议上,多位专家做了十几场非常精彩的演讲.本文就这些演讲中提到的 Ceph性能优化方面的知 ...

  4. 理解 OpenStack + Ceph (2):Ceph 的物理和逻辑结构 [Ceph Architecture]

    本系列文章会深入研究 Ceph 以及 Ceph 和 OpenStack 的集成: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 ...

  5. 理解 OpenStack + Ceph (1):Ceph + OpenStack 集群部署和配置

    本系列文章会深入研究 Ceph 以及 Ceph 和 OpenStack 的集成: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 ...

  6. Ceph性能优化总结(v0.94)

    优化方法论 做任何事情还是要有个方法论的,“授人以鱼不如授人以渔”的道理吧,方法通了,所有的问题就有了解决的途径.通过对公开资料的分析进行总结,对分布式存储系统的优化离不开以下几点: 1. 硬件层面 ...

  7. Ubuntu 14.04 单机安装 CEPH

    0.如果先前安装过ceph,则先卸载 sudo stop ceph-all //停止所有CEPH进程 ceph-deploy uninstall [{ceph-node}] //卸载所有ceph程序 ...

  8. ceph在品高云中的实践

    ceph简介 ceph是业界目前人气最高的开源存储项目之一,关于其定义在官网是这样的:"Ceph is a unified, distributed storage system desig ...

  9. Ceph性能优化

    几个 Ceph 性能优化的新方法和思路(2015 SH Ceph Day 参后感) 一周前,由 Intel 与 Redhat 在10月18日联合举办了 Shanghai Ceph Day.在这次会议上 ...

随机推荐

  1. 【水】怎么在 HZOI 上水到更高的分

    前言 这些东西在联赛并用不了 预编译优化 40行优化 #define _CRT_SECURE_NO_WARNINGS #pragma GCC optimize(2) #pragma GCC optim ...

  2. Linux发行版教你如何选 给入门者的选择通法

    Linux的发行版何止琳琅满目,简直是乱入你眼. 本篇将介绍选择发行版的经验和通用法则,主要会从PC角度去谈. 更新于2020年,初次发布于2017年 选择发行版需考虑哪些因素 选择发行版时需要考虑的 ...

  3. HEAP CORRUPTION DETECTED:after Normal block错误方法解决

    一:问题描述: 出现的问题如下: 二:问题产生的原因说明 该问题发生于操作堆内存的时候.产生该问题的原因是:你实际使用的内存大小超出了你实际申请的内存大小,在释放内存的时候就会发生该问题. 举个例子: ...

  4. [阿里DIN]从论文源码学习 之 embedding_lookup

    [阿里DIN]从论文源码学习 之 embedding_lookup 目录 [阿里DIN]从论文源码学习 之 embedding_lookup 0x00 摘要 0x01 DIN代码 1.1 Embedd ...

  5. Spark如何删除无效rdd checkpoint

    spark可以使用checkpoint来作为检查点,将rdd的数据写入hdfs文件,也可以利用本地缓存子系统. 当我们使用checkpoint将rdd保存到hdfs文件时,如果任务的临时文件长时间不删 ...

  6. R语言学习网站(分享)

    1. https://www.r-bloggers.com/ 2. https://www.kaggle.com/datasets 3. RStudio download: https://www.r ...

  7. IntelliJ IDEA 使用指南:集成GIT客户端

    一.安装GIT客户端 首先需要在本地安装好GIT的客户端. GIT客户端官网下载地址:https://www.git-scm.com/download/ 安装说明 Linux系统安装 使用yum指令 ...

  8. 扩展中国剩余定理(EXCRT)快速入门

    问题 传送门 看到这个问题感觉很难??? 不用怕,往下看就好啦 假如你不会CRT也没关系 EXCRT大致思路 先考虑将方程组两两联立解开,如先解第一个与第二个,再用第一个与第二个的通解来解第三个... ...

  9. js-循环遍历

    for循环 (最传统的方法) let arr=[a,b,c,d] for (var i = 0; i < arr.length; i++) { console.log(arr[i]); } fo ...

  10. Linux系统目录简介

    Linux系统目录简介 boot 系统启动 grub(内核加载程序,内核≈操作硬件) 界面 自检程序 bin 系统可执行文件 bash=终端程序 sbin 超级用户的可执行文件 root root家目 ...