Ceph块存储介绍

1. 块存储是什么

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

 

2. 访问块存储的方式

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

2.1 KRBD方式

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

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

如下是经过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块设备的信息orm

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进程能够访问块存储,从而虚拟机能够访问块存储。

相关文章
相关标签/搜索