文档章节

ceph块存储rbd介绍

linuxhunter
 linuxhunter
发布于 2015/12/10 13:54
字数 947
阅读 4710
收藏 3

ceph集群搭建起来后,可以在ceph集群上进行块存储、对象存储以及文件系统存储。从架构上来看,在ceph集群的上面是rados协议,该协议为使用ceph集群的用户提供必要的支持(ceph用户通过调用rados协议来使用ceph集群)。对于块存储来说,可以通过内核模块的方式使用ceph集群也可以通过用户态调用librbd库来使用ceph集群。通过内核模块方式可以充分的利用内核的page cache机制,而通过用户态调用librbd也可以使用librbd在用户态提供的cache方式提高性能。下图是ceph rbd的整体框架图。

1、快照相关。

1)创建快照。

#rbd snap create {pool-name}/{image-name}@{snap-name}

一般来说都是基于一个已有的image来创建快照,创建出来的快照是只读的;

2)查看已有的快照。

#rbd snap ls {pool-name}/{image-name}

查看在已有的image上存在的快照情况;

3)快照roolback。

#rbd snap roolback {pool-name}/{image-name}@{snap-name}

将快照里的内容回写到image中去;

4)删除快照。

#rbd snap rm {pool-name}/{image-name}@{snap-name}

删除指定image上的指定名称的快照;

5)删除image上所有的快照。

#rbd snap purge {pool-name}/{image-name}

2、分层相关。

ceph中的分层技术指的是在一个只读且受保护的快照上clone出一个新的image且该image是写时复制的。clone出一个新的image后,该image与那个只读snap之间是child-parent关系。

1)保护一个快照。

#rbd snap protect {pool-name}/{image-name}@{snap-name}

2)clone一个受保护的快照。

#rbd clone {pool-name}/{image-name}@{snap-name} {newpool-name}/{newimage-name}

clone出一个受保护的image后,就可以按照普通的image来使用这个clone后的image

3)解除一个受保护的快照。

#rbd snap unprotect {pool-name}/{image-name}@{snap-name}

只有解除了快照的保护才能真正的删除该快照,否则快照无法被删除

4)查看快照被clone的情况。

#rbd children {pool-name}/{image-name}@{snap-name}

此命令可以看到基于该snap-name clone出来的image信息

5)去分层技术。

基于某个快照clone出来的image与那个快照之间是一种child-parent关系(可以认为是一种分层关系)。而去分层技术指的是将parent中的内容完全的复制到child中去,从而使得child和parent在去分层后变得没有任何关系。

#rbd flatten {pool-name}/{image-name}

3、rbd cache相关。

rbd cache指的是在用户态环境下通过使用librbd库来访问ceph集群时在client端使用cache技术来提高client端访问ceph集群的性能。对于以内核模块的方式访问ceph集群时使用的是linux内核中的page cache技术进行缓存而不是rbd cache技术。

rbd cache需要在ceph client端的ceph配置文件中配置相应的属性来启用rbd cache。ceph client端的ceph配置文件位于/etc/ceph/ceph.conf,在该文件中需要添加client节点且在client节点出添加具体的配置项。rbd cache配置项具体内容如下:

rbd cache = true|false 是否启用rbd cache

rbd cache size = rbd cache大小

rbd cache max dirty = 在writeback模式下cache的最大bytes数,默认是24MB。当该值为0时,表示使用writethrough模式

rbd cache target dirty = 在writeback模式下cache向ceph集群写入的bytes阀值,默认16MB。注意该值一定要小于rbd cache max dirty值

rbd cache max dirty age = cache中脏数据存在的最大秒数

rbd cache writethrough until flush = true|false 在内核触发flush cache到ceph集群前rbd cache一直是writethrough模式,直到flush后rbd cache变成writeback模式


© 著作权归作者所有

共有 人打赏支持
linuxhunter
粉丝 67
博文 143
码字总数 92826
作品 0
沈阳
高级程序员
私信 提问
加载中

评论(2)

linuxhunter
linuxhunter

引用来自“yiqingyi”的评论

你好,博主,对rbd 有些几个疑问,还请指导:
1、博文中提到:client节点想要使用rbd cache就需要在ceph配置文件配置,我想问的是在代码中已经设置有默认项,rbd cache 不是默认开启的吗?
config_opts.h
OPTION(rbd_cache, OPT_BOOL, true) // whether to enable caching (writeback unless rbd_cache_max_dirty is 0)
……
OPTION(rbd_cache_size, OPT_LONGLONG, 32<<20) // cache size in bytes
OPTION(rbd_cache_max_dirty, OPT_LONGLONG, 24<<20) // dirty limit in bytes - set to 0 for write-through caching

2、在client节点 创建池->创建块镜像->映射(map)到client ,对client映射块设备(裸设备,未进行格式化挂载操作) 进行fio测试,参数 -direct=1。对 client端fio 测试结果延迟 lat (从fio将请求提交给内核,再到内核完成这个I/O为止所需要的时间)有些疑问:看文档ceph block device没有用到page cache,那么-direct=1 也就没有必要了;再一个内核完成这个I/O为止,这里fio的一个IO怎样算完成了呢即lat时间包括哪些?
另外麦子迈的博客里不建议kernel module,走kernel的路径,我这种测试是否属于这一类?
谢谢
关于问题1:您说的没错。在hammer及其以后的版本中默认是开启rbd cache的,但是在hammer版本以前rbd cache默认是关闭的,因此在使用hammer以前的版本时若开启rbd cache则需要在配置文件中配置一下。 关于问题2:我个人对fio这个工具了解的还不是特别的深入,因此暂时无法回答您的这个问题。您要是有结论希望您能告诉我一下结论。就我个人理解来说,rbd的使用主要还是通过librbd来访问rbd设备并且在用户态实现cache。走kernel的好处是能够充分利用kernel的page cache,但是走kernel的路径相对于librbd来说要长一些,因此通常都是推荐使用librbd来访问rbd设备。
y
yiqingyi
你好,博主,对rbd 有些几个疑问,还请指导:
1、博文中提到:client节点想要使用rbd cache就需要在ceph配置文件配置,我想问的是在代码中已经设置有默认项,rbd cache 不是默认开启的吗?
config_opts.h
OPTION(rbd_cache, OPT_BOOL, true) // whether to enable caching (writeback unless rbd_cache_max_dirty is 0)
……
OPTION(rbd_cache_size, OPT_LONGLONG, 32<<20) // cache size in bytes
OPTION(rbd_cache_max_dirty, OPT_LONGLONG, 24<<20) // dirty limit in bytes - set to 0 for write-through caching

2、在client节点 创建池->创建块镜像->映射(map)到client ,对client映射块设备(裸设备,未进行格式化挂载操作) 进行fio测试,参数 -direct=1。对 client端fio 测试结果延迟 lat (从fio将请求提交给内核,再到内核完成这个I/O为止所需要的时间)有些疑问:看文档ceph block device没有用到page cache,那么-direct=1 也就没有必要了;再一个内核完成这个I/O为止,这里fio的一个IO怎样算完成了呢即lat时间包括哪些?
另外麦子迈的博客里不建议kernel module,走kernel的路径,我这种测试是否属于这一类?
谢谢
Ceph块设备管理与Openstack配置(上)

Oepnstack之CEPH系列是根据Ceph Cookbook整理的笔记,分为以下几个部分: 《Ceph简介》 《Ceph集群操作》 《Ceph块设备管理与Openstack配置》 《深入Ceph》 《ceph优化与性能测试》 注意:此...

hiubuntu
2016/12/02
0
0
Ceph分布式存储学习笔记之jewel

本文介绍在Oracle Linux上创建配置ceph集群。Ceph软件代号为jewel。 一、操作系统设置 以下操作在每个ceph集群节点都要操作。 1、OS内核设置 2、软件仓库 3、禁用防火墙和Selinux 4、设置免密...

candon123
06/26
0
0
ceph的数据存储之路(1) ---rbd设备介绍

由这几个问题开始思考。。。 问题0,数据的存储设备? 数据的存储有3种形式,1种是直接以二进制数据的形式存储在裸设备(包括块设备)上,另外一种是以文件的形式经过文件系统管理进行存储。...

一只小江
2015/11/17
0
1
《大话 Ceph》 之 RBD 那点事儿

在这篇文章中: 引言 RBD是什么 《大话 Ceph 》系列文章通过通俗易懂的语言并结合基础实验,用最简单的描述来讲解 Ceph 中的重要概念。让读者对分布式存储系统有一个清晰的理解。 引言 这篇文...

Tstack
2017/11/06
0
0
QEMU3 - 使用ceph来存储QEMU镜像

ceph简介 Ceph是一个PB级别的分布式软件定义存储系统,为用户提供了块存储、对象存储以及符合POSIX标准的文件系统接口。目前,Ceph已经成为Openstack最受欢迎的后端存储系统。下图为ceph的架...

宅蓝三木
2016/09/30
472
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 懒床是对冬天最起码的尊重

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @瘟神灬念 :分享daniwellP/桃音モモ的单曲《Nyan Cat》 《Nyan Cat》- daniwellP/桃音モモ 手机党少年们想听歌,请使劲儿戳(这里) @巴拉迪...

小小编辑
25分钟前
2
0
码云项目100,水一发

简单回顾一下: 早期构想最多的,是希望能将PHP一些类和编码分区做得更细,所以很多尝试。但不得不说,PHP的功能过于单一,是的,也许写C/C++扩展,可以解决问题,那我为什么不用C#或者Golan...

曾建凯
今天
3
0
Spring应用学习——AOP

1. AOP 1. AOP:即面向切面编程,采用横向抽取机制,取代了传统的继承体系的重复代码问题,如下图所示,性能监控、日志记录等代码围绕业务逻辑代码,而这部分代码是一个高度重复的代码,也就...

江左煤郎
今天
4
0
eclipse的版本

Eclipse各版本代号一览表 Eclipse的设计思想是:一切皆插件。Eclipse核心很小,其它所有功能都以插件的形式附加于Eclipse核心之上。 Eclipse基本内核包括:图形API(SWT/Jface),Java开发环...

mdoo
今天
3
0
SpringBoot源码:启动过程分析(一)

本文主要分析 SpringBoot 的启动过程。 SpringBoot的版本为:2.1.0 release,最新版本。 一.时序图 还是老套路,先把分析过程的时序图摆出来:时序图-SpringBoot2.10启动分析 二.源码分析 首...

Jacktanger
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部