1. 块存储是什么

块存储简称RBD(RADOS Block Device),是一种有序的字节序块,也是在Ceph三大存储类型中最为常用的存储方式 ,Ceph的块存储是基于RADOS的,因此它也借助RADOS的快照、复制和一致性等特性提供了快照、克隆和备份等操作。Ceph的块设备是一种精简置备模式,可以拓展块存储的大小且存储的数据以条带化的方式存储到Ceph集群中的多个OSD中。

2. 访问块存储的方式

访问块存储的方式有两种,分别是KRBD的方式和librbd的方式。

2.1 KRBD方式

KRBD是Kernel RADOS Block Device的简称,它是通过Kernel模块中的RBD模块来实现访问后端存储的,在使用前需要先使用modprobe命令将内核中RBD模块进行加载,同时对内核版本也是有要求的,需要内核的版本不低于3.10,因为比这个版本低的内核还没将RBD模块集成到内核中,因此如果是CentOS6.x的一般需要先升下内核版本。

KRBD访问后端存储的方式一般适用于为物理主机提供的块设备,这种方式是基于内核模块驱动的,可以使用Linux自带的页缓存来提高性能。

以下是通过KRBD模块访问Ceph后端块设备的一些命令操作。

modprobe rbd     # 加载RBD内核模块

modinfo rbd        # 查看rbd模块信息

rbd create image_name --size 10240   # 创建一个10G大小的名为image_name的块设备

rbd list   # 列出存储池中的所有块设备,没有指定存储池,默认使用rbd存储池,可以使用-p选项来指定存储池

rbd info image_name  # 显示出image_name块设备的信息

rbd map image_name  # 将image_name块设备映射到系统中

rbd showmapped   # 查看系统中已经映射的块设备

rbd unmap /dev/xxx   # 取消掉块设备的映射

2.2 librbd方式

librbd是一个访问rbd块存储的库,它是基于librados库进行的更高一层的封装,所以librbd是通过librados库来与块存储的数据进行交互的。

使用librbd访问块存储的方式适用于为虚拟机提供块设备的方式,可以使用RBD缓存来提高性能,比如在qemu+kvm虚拟框架中提供的虚拟机,qemu可以通过librbd来访问后端存储,以下是访问的模型图:

要通过qemu来将块设备提供给客户机,也就是我们说的虚拟机,需要指定存储池名和映像名

命令格式类似如下:

qemu-img {command} [options] rbd:{pool-name}/{image-name}[@snapshot-name][:option1=value1][:option2=value2...]

举例:

qemu-img {command} [options] rbd:glance-pool/maipo:id=glance:conf=/etc/ceph/ceph.conf

举例:

qemu -m 1024 -drive format=raw,file=rbd:data/squeeze:rbd_cache=true,cache=writeback

3. RBD的一些常用操作和命令

有关存储池的操作:

部署好Ceph集群后,默认都会生成一个名为rbd的存储池

ceph osd lspools     # 来查看当前存储的存储池

ceph osd pool create {pool-name} {pg-num} {pgp-num}     # 创建存储池

ceph df     # 查看存储池统计信息

ceph osd pool set {pool-name} {key} {value}     # 调整存储池的选项值

有关image创建和查看的操作:

rbd create pool/image1 --size 1024 --image-format 2     # 在pool存储池中创建1GB大小的image

rbd ls pool-name     # 查看pool-name存储池中的image

rbd info pool-name/image1     # 查看image1的详细信息

rbd rm pool-name/image1     # 删除image1

有关快照的操作:

rbd snap create pool-name/image1@image1_snap     # 创建image1的快照

rbd snap list pool-name/image1     # 列出image1的所有快照

rbd info pool-name/image1@image1_snap     # 查看快照的详细信息

有关克隆的操作:

在克隆前,快照必须处于被保护的状态才能够被克隆。

rbd snap protect pool-name/image1@image1_snap     # 将快照置于保护状态

rbd clone pool-name/image1@image1_snap pool-name/image2     # 将快照克隆成一个image2

image2是依赖于image1的快照的,可以称image2是image1_snap的children
rbd children pool-name/image1@image1_snap     # 查看该快照的children

要是想要让image2不再依赖于image1_snap,则需要使用如下命令将分层的image2变为扁平的没有层级的image

rbd flatten pool-name/image2

有关备份和恢复的操作:

rbd export pool-name/image1 image1_export     # 导出image1

rbd import image1_export pool-name/image3 --image-format  2   # 导入备份的文件保存为image3

4. qemu-kvm如何访问块存储

这里介绍的是通过LIBRBD的方式访问RBD块存储。

(1)检测操作系统的KVM虚拟化是否支持RBD块存储

使用命令:

qemu-img --help |grep rbd

如果输出的内容中出现了rbd关键词,则说明当前qemu-kvm或者qemu-system-x86_64支持RBD块存储。

(2)使用块存储

把/etc/ceph/ceph.conf文件拷贝到目的节点相同的路径位置,这样该节点的qemu-img工具就会使用该文件作为默认配置文件。

如果ceph集群开启了cephx认证,则需要创建客户端访问权限,在我的ceph配置为openstack的后端存储中有说明如何创建这个权限,还有生成秘钥并导入libvirt也有说明:配置Ceph集群为OpenStack后端存储

最后会生成一个xml格式的文件,里面定义了需要访问块存储的各种信息,由libvirt来将其转换为对应的命令行以使得qemu-kvm进程可以访问块存储,从而虚拟机可以访问块存储。

Ceph块存储介绍的更多相关文章

  1. 二十八. Ceph概述 部署Ceph集群 Ceph块存储

    client   :192.168.4.10 node1 :192.168.4.11 ndoe2 :192.168.4.12 node3 :192.168.4.13   1.实验环境 准备四台KVM虚 ...

  2. Ceph 块存储

    任何普通的linux主机都可以充当ceph客户机,客户机通过网络与ceph存储集群交互以存储或检索用户数据.Ceph RBD支持已经添加到linux主线内核中,从2.6.34以及以后版本开始. === ...

  3. ceph块存储场景

    1.创建rbd使用的存储池. admin节点需要安装ceph才能使用该命令,如果没有,也可以切换到ceph-node1节点去操作. [cephfsd@ceph-admin ceph]$ ceph os ...

  4. Ceph 块存储 创建的image 映射成块设备

    将创建的volume1映射成块设备 [root@mysql-server ceph]# rbd map rbd_pool/volume1 rbd: sysfs write failed RBD ima ...

  5. Ceph基本情况介绍

    Ceph基本情况的介绍 Ceph是一个分布式存储软件. 它支持用3种方式存储数据,分别是:对象存储.块设备存储.分布式文件系统存储. Ceph最初的目标是做一个分布式文件系统,直到现在这个目标也不能算 ...

  6. ceph rbd块存储挂载及文件存储建立

    一.rbd块存储挂载 1 创建一个OSD pool # ceph osd pool create rbd1 128 查询存储空间使用 # ceph df GLOBAL: SIZE AVAIL RAW ...

  7. Ceph14.2.5 RBD块存储的实战配置和详细介绍,不看后悔! -- <3>

    Ceph RBD介绍与使用 RBD介绍 RBD即RADOS Block Device的简称,RBD块存储是最稳定且最常用的存储类型.RBD块设备类似磁盘可以被挂载. RBD块设备具有快照.多副本.克隆 ...

  8. [ ceph ] BlueStore 存储引擎介绍

    为什么需要 BlueStore 首先,Ceph原本的FileStore需要兼容Linux下的各种文件系统,如EXT4.BtrFS.XFS.理论上每种文件系统都实现了POSIX协议,但事实上,每个文件系 ...

  9. 我们为什么选择Ceph来建立块存储

    我们为什么选择Ceph来建立块存储?国内知名黑客组织东方联盟是这样回答的,卷管理器的大小和增长受到管理程序的驱动器补充的限制,与其他Droplet共享.一旦Droplet被摧毁,储存就会被释放.术语“ ...

随机推荐

  1. Java多态-如何理解父类引用指向子类对象

    java多态,如何理解父类引用指向子类对象 要理解多态性,首先要知道什么是“向上转型”. 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类.我可以通过   Cat c = new ...

  2. SpringMVC的controller层接收来自jsp页面通过<a href="/user/userUpdateInfo/>的中文乱码问题

    这种情况是,jsp页面的中文正常显示,数据的中文也是正常显示,但是在Controller层接收到的中文是乱码,如下图所示: 解决方法:在Controller层对前台传递的中文乱码进行处理,将它转换成u ...

  3. Freemarker详解一

    1 截取字符串有的时候我们在页面中不需要显示那么长的字符串,比如新闻标题,这样用下面的例子就可以自定义显示的长度<#if title.content?length lt 8>        ...

  4. 【基于初学者的SSH】struts02 数据封装的三种方式详解

    struts的数据封装共有3中方式,属性封装,模型驱动封装和表达式封装,其中表达式封装为常用 一:属性封装: 属性封装其实就是自己定义变量,注意变量名要和表单的name属性名一致,然后生成get和se ...

  5. springboot +element-axios跨域请求

    1.初始化element项目 1.1:vue init webpage '项目名称' 1.2:npm i element-ui -S 1.3:在main.js添加 import ElementUI f ...

  6. SQLite的Integer类型

    SQLite 中的 INTEGER:带符号的整型,具体取决有存入数字的范围大小,根据大小可以使用1,2,3,4,6,8字节来存储. 在SQLite中,存储分类和数据类型也有一定的差别,如INTEGER ...

  7. hdu 2612

    Find a way Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  8. 悟空模式-java-普通工厂模式

    [大圣看玩多时,问土地道:“此树有多少株数?”土地道:“有三千六百株.前面一千二百株,花微果小,三千年一熟,人吃了成仙了道,体健身轻.中间一千二百株,层花甘实,六千年一熟,人吃了霞举飞升,长生不老.后 ...

  9. Mac Supervisor 管理进程

    无论是在日常工作中还是平时玩代码中,我总是离不开 Supervisor,其实很久之前我就写过一篇文章:supervisord 部署 Flask,在里面,我仔细讲解了如何在 Linux 环境下安装并且配 ...

  10. 基于express+mongodb+pug的博客系统——后台篇

    上一篇介绍了模板引擎pug.js的用法,这一篇就主要写后台逻辑了. 后台的大部分的功能都有了,只是在已经登录的状态下,前台和后台的逻辑处理还不是很完善. 先上几张图吧,仿旧版的简书,改了下UI,因为没 ...