RBD块存储
RBD介绍
1、RBD是Ceph分布式集群中最常用的存储类型
2、块是一个有序字节,普通的一个块大小为512字节,基于块的存储是最常见的存储方式,比如常见的硬盘、软盘和CD光盘等,都是存储数据最简单快捷的设备
3、Ceph块设备是一种精简置备模式,可以扩展大小且数据是以条带化的方式存储在一个集群中的多个OSD中RBD具有快照、多副本、克隆和一致性功能
4、Ceph块设备通过Linux内核模块或者librbd库与OSD之间交互通信的模式
librbd介绍
librbd是一个访问rbd块存储的库,librados提供了RBD、Ceph FS和Radosgw三种存储接口,其中librbd就是利用librados与RBD进行交互的,librbd主要用于为虚拟机提供块设备
RBD的应用场景
大多数使用场景中是基于QEMU/KVM通过librbd的方式,提到虚拟化就自然想到热度狠高的云计算,需拟化是云计算的核心,云计算的IaaS层一般对外提供虚拟机资源服务,比如火热的OpenStack等提供基础设施堆栈的开源软件框架,RBD块设备用于虚拟机的系统卷、数据卷,根据Ceph RBD的分层功能,还可以方便实现基于COW的克隆技术,还有基于RBD的快照、导入、导出和扩容等功能
RDB块存储的使用
#创建存储池
[cephadm@xiaomao ceph-cluster]$ ceph osd pool create kube 64 64
pool 'kube' created
#在kube存储池上启用rbd功能
[cephadm@xiaomao ceph-cluster]$ ceph osd pool application enable kube rbd
enabled application 'rbd' on pool 'kube'
#初始化rbd
[cephadm@xiaomao ceph-cluster]$ rbd pool init kube
#创建rbd镜像
#第一种创建方法
[cephadm@xiaomao ceph-cluster]$ rbd create --pool kube --image vol01 --size 2G
#查看镜像是否创建成功
[cephadm@xiaomao ceph-cluster]$ rbd ls --pool kube
vol01
#第二种创建方法
[cephadm@xiaomao ceph-cluster]$ rbd create --size 2G kube/vol02
[cephadm@xiaomao ceph-cluster]$ rbd ls --pool kube
vol01
vol02
#查看镜像文件的详细信息
[cephadm@xiaomao ceph-cluster]$ rbd ls --pool kube -l
NAME SIZE PARENT FMT PROT LOCK
vol01 2 GiB 2
vol02 2 GiB 2
#第二种方法
[cephadm@xiaomao ceph-cluster]$ rbd info --pool kube vol01
rbd image 'vol01':
size 2 GiB in 512 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: acd0fc78a781
block_name_prefix: rbd_data.acd0fc78a781
format: 2
features: layering, exclusive-lock, object-map, fast-diff,deep-flatten
op_features:
flags:
create_timestamp: Thu Jul 9 22:41:28 2020
access_timestamp: Thu Jul 9 22:41:28 2020
modify_timestamp: Thu Jul 9 22:41:28 2020
通过上面的 info 输出信息我们可以看到,当前2G的镜像,包含有512个object,每个object是4M,order类型是22,即2的2次方,块存储的前缀是 rbd_data.acd0fc78a781 开头,features提供了5个特性:layering, exclusive-lock, object-map, fast-diff, deep-flatten,由于CentOS 7.x有些特性还不支持,因此需要将其先禁用
#禁用rbd块的特性
[cephadm@xiaomao ceph-cluster]$ rbd feature disable kube/vol01 object-map fast-diff deep-flatten
#禁用后再次查看
[cephadm@xiaomao ceph-cluster]$ rbd info --pool kube vol01
rbd image 'vol01':
size 2 GiB in 512 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: acd0fc78a781
block_name_prefix: rbd_data.acd0fc78a781
format: 2
features: layering, exclusive-lock
客户端挂载使用rbd
#xiaomao5充当客户端
[root@xiaomao5 ~]# yum -y install ceph-common
#创建认证账号
#client.kube 账号名(kube) pool存储池 -o ceph.client.kube.keyring:保存的文件名
[cephadm@xiaomao ceph-cluster]$ ceph auth get-or-create client.kube mon 'allow r' mds 'allow rw' osd 'allow rwx pool=kube' -o ceph.client.kube.keyring
#查看账号信息
[cephadm@xiaomao ceph-cluster]$ ceph auth get client.kube
exported keyring for client.kube
[client.kube]
key = AQDjOAdfFB5MNRAAnIkXJr3Bo5G4UWEb3gfOcA==
caps mds = "allow rw"
caps mon = "allow r"
caps osd = "allow rwx pool=kube"
#客户端挂载RBD的两个条件
#复制账号信息到客户端
[cephadm@xiaomao ceph-cluster]$ scp ceph.client.kube.keyring root@xiaomao5:/etc/ceph/
#复制ceph.conf配置文件到客户端
[cephadm@xiaomao ceph-cluster]$ scp ceph.conf root@xiaomao5:/etc/ceph/
#使用客户端连接ceph集群
# --user 普通用户
[root@xiaomao5 ~]# ceph --user kube -s
cluster:
id: eff8141a-a26b-498f-9608-879c2565496d
health: HEALTH_OK
services:
mon: 3 daemons, quorum xiaomao4,xiaomao5,xiaomao (age 100m)
mgr: xiaomao4(active, since 2h), standbys: xiaomao, xiaomao5
osd: 6 osds: 6 up (since 84m), 6 in (since 84m)
data:
pools: 1 pools, 64 pgs
objects: 7 objects, 213 B
usage: 6.0 GiB used, 354 GiB / 360 GiB avail
pgs: 64 active+clean
#RBD块映射
[root@xiaomao5 ~]# rbd --user kube map kube/vol01
/dev/rbd0
#开始挂载
[root@xiaomao5 ~]# mkfs.xfs /dev/rbd0
[root@xiaomao5 ~]# mount /dev/rbd0 /mnt/
[root@xiaomao5 ~]# cd /mnt/
[root@xiaomao5 mnt]# cp /etc/fstab /mnt/
[root@xiaomao5 mnt]# ls
fstab
#查看是否挂载成功
[root@xiaomao5 mnt]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/rbd0 2.0G 33M 2.0G 2% /mnt
#查看块映射信息
[root@xiaomao5 ~]# rbd showmapped
id pool namespace image snap device
0 kube vol01 - /dev/rbd0
#卸载块设备
[root@xiaomao5 ~]# rbd unmap /dev/rbd0
#调整RBD块的大小
[cephadm@xiaomao ceph-cluster]$ rbd resize -s 5G kube/vol01
Resizing image: 100% complete...done.
[cephadm@xiaomao ceph-cluster]$ rbd ls -p kube -l
NAME SIZE PARENT FMT PROT LOCK
vol01 5 GiB 2
vol02 2 GiB 2
#删除镜像
[cephadm@xiaomao ceph-cluster]$ rbd rm kube/vol02
#查看镜像是否删除成功
[cephadm@xiaomao ceph-cluster]$ rbd ls -p kube -l
NAME SIZE PARENT FMT PROT LOCK
vol01 5 GiB 2
#把镜像放进回收站
[cephadm@xiaomao ceph-cluster]$ rbd trash move kube/vol01
#再次查看镜像是否回收成功
[cephadm@xiaomao ceph-cluster]$ rbd ls -p kube -l
#显示回收站中的镜像文件