三、Ceph RBD介绍与使用
一、RBD介绍
RBD即RADOS Block Device的简称,RBD块存储是最稳定且最常用的存储类型。RBD块设备类似磁盘可以被挂载。 RBD块设备具有快照、多副本、克隆和一致性等特性,数据以条带化的方式存储在Ceph集群的多个OSD中。如下是对Ceph RBD的理解。 - RBD 就是 Ceph 里的块设备,一个 4T 的块设备的功能和一个 4T 的 SATA 类似,挂载的 RBD 就可以当磁盘用; - resizable:这个块可大可小; - data striped:这个块在Ceph里面是被切割成若干小块来保存,不然 1PB 的块怎么存的下; - thin-provisioned:精简置备,1TB 的集群是能创建无数 1PB 的块的。其实就是块的大小和在 Ceph 中实际占用大小是没有关系的,刚创建出来的块是不占空间,今后用多大空间,才会在 Ceph 中占用多大空间。举例:你有一个 32G 的 U盘,存了一个2G的电影,那么 RBD 大小就类似于 32G,而 2G 就相当于在 Ceph 中占用的空间 ;
块存储本质就是将裸磁盘或类似裸磁盘(lvm)设备映射给主机使用,主机可以对其进行格式化并存储和读取数据,块设备读取速度快但是不支持共享。 >ceph可以通过内核模块和librbd库提供块设备支持。客户端可以通过内核模块挂在rbd使用,客户端使用rbd块设备就像使用普通硬盘一样,可以对其就行格式化然后使用;客户应用也可以通过librbd使用ceph块,典型的是云平台的块存储服务(如下图),云平台可以使用rbd作为云的存储后端提供镜像存储、volume块或者客户的系统引导盘等。
使用场景:
- 云平台(OpenStack做为云的存储后端提供镜像存储)
- K8s容器
- map成块设备直接使用
- ISCIS,安装Ceph客户端
二、RBD常用命令
命令 | 功能 |
---|---|
rbd create | 创建块设备映像 |
rbd ls | 列出 rbd 存储池中的块设备 |
rbd info | 查看块设备信息 |
rbd diff | 可以统计 rbd 使用量 |
rbd map | 映射块设备 |
rbd showmapped | 查看已映射块设备 |
rbd remove | 删除块设备 |
rbd resize | 更改块设备的大小 |
三、RBD配置操作
3.1、RBD挂载到本地操作系统
1、创建rbd使用的pool
# ceph osd pool create rbd 32 32
pool 'rbd' created
# ceph osd pool ls detail ##查看创建的详细信息
# ceph osd pool application enable rbd rbd
enabled application 'rbd' on pool 'rbd'
# rbd create --size 10240 image01
# rbd ls
image01
# rbd info image01
rbd image 'image01':
size 10GiB in 2560 objects
order 22 (4MiB objects)
block_name_prefix: rbd_data.10836b8b4567
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
flags:
create_timestamp: Tue Dec 31 13:40:22 2019
# rados -p rbd ls --all ##查看底层存储格式
rbd_object_map.10836b8b4567
rbd_id.image01
rbd_directory
rbd_info
rbd_header.10836b8b4567
# rbd map image01
# rbd feature disable image01 exclusive-lock, object-map, fast-diff, deep-flatten
# rbd map image01
/dev/rbd0
# rbd info image01
rbd image 'image01':
size 10GiB in 2560 objects
order 22 (4MiB objects)
block_name_prefix: rbd_data.10836b8b4567
format: 2
features: layering
flags:
create_timestamp: Tue Dec 31 13:40:22 2019
# fdisk -l
...省略
磁盘 /dev/rbd0:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):4194304 字节 / 4194304 字节
# mkfs.xfs /dev/rbd0
# mount /dev/rbd0 /mnt
# df -h
文件系统 容量 已用 可用 已用% 挂载点
...省略...
/dev/rbd0 10G 33M 10G 1% /mnt
# umount /mnt
# rbd unmap image01
# rbd rm image01
Removing image: 100% complete...done.
# rbd --image image02 resize --size=15240
Resizing image: 100% complete...done.
# rbd info image02
rbd image 'image02':
size 14.9GiB in 3810 objects
order 22 (4MiB objects)
block_name_prefix: rbd_data.10c26b8b4567
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
flags:
create_timestamp: Tue Dec 31 14:43:23 2019
如上就是本地如何挂载rbd块设备的步骤;
四、快照配置
1、创建快照(占用存储比较大)
# rbd create --size 10240 image02
# rbd info image02
# rbd snap create image02@image02_snap01 ## 本地快照名@快照名字
# rbd snap list image02
或
# rbd ls -l
NAME SIZE PARENT FMT PROT LOCK
image02 10GiB 2
image02@image02_snap01 10GiB 2
# rbd info image02@image02_snap01
# rbd snap protect image02@image02_snap01
# ceph osd pool create kube 16 16
# rbd clone rbd/image02@image02_snap01 kube/image02_clone01 ##将刚刚克隆的image02镜像克隆到 kube 资源池;
## rbd ls -p kube
# rbd children image02
# rbd flatten kube/image02_clone01
# rbd snap rollback image02@image02_snap01
# rbd snap unprotect image02@image02_snap01
# rbd snap remove image02@image02_snap01
# rbd snap ls image02
五、导出导入RBD镜像
1、导出RBD镜像
# rbd export image02 /tmp/image02
# ll /tmp/image02
-rw-r--r-- 1 root root 10737418240 12月 31 14:41 /tmp/image02
# rbd remove image02 ##删除本地rbd设备
Removing image: 100% complete...done.
# rbd ls
# rbd import /tmp/image02 rbd/image02 --image-format 2 ##导入
Importing image: 100% complete...done.
# rbd info image02
rbd image 'image02':
size 10GiB in 2560 objects
order 22 (4MiB objects)
block_name_prefix: rbd_data.10c26b8b4567
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
flags:
create_timestamp: Tue Dec 31 14:43:23 2019
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!