目录:1、RBD介绍
RBD经常使用命令
RBD配置操做
RBD挂载在到操做系统
快照配置
导出导入RBD镜像
RBD在线扩容容量 node
RBD即RADOS Block Device的简称,RBD块存储是最稳定且最经常使用的存储类型。RBD块设备相似磁盘能够被挂载。 RBD块设备具备快照、多副本、克隆和一致性等特性,数据以条带化的方式存储在Ceph集群的多个OSD中。以下是对Ceph RBD的理解,快照也就是至关于克隆,也就是有一个RBD1作一个快照,好比往里面去写数据,想回滚,就是能够经过这个去作备份,虽然咱们写到块里面的是一个文件,可是实际存放里面的是一个对象。后端
RBD 就是 Ceph 里的块设备,一个 4T 的块设备的功能和一个 4T 的 SATA 相似,挂载的 RBD 就能够当磁盘用;能够理解成一个块就是一个盘的意思。centos
resizable:这个块可大可小;可是这个块能够改变大小,能够对这个块进行扩大
data striped:这个块在Ceph里面是被切割成若干小块来保存,否则 1PB 的块怎么存的下;1PB的数据能够存放55个PB的块设备app
thin-provisioned:精简置备,1TB 的集群是能建立无数 1PB 的块的。其实就是块的大小和在 Ceph 中实际占用大小是没有关系的,刚建立出来的块是不占空间,从此用多大空间,才会在 Ceph 中占用多大空间。举例:你有一个 32G 的 U盘,存了一个2G的电影,那么 RBD 大小就相似于 32G,而 2G 就至关于在 Ceph 中占用的空间;ide
块存储本质就是将裸磁盘或相似裸磁盘(lvm)设备映射给主机使用,主机能够对其进行格式化并存储和读取数据,块设备读取速度快可是不支持共享。
块的存储速度很快可是相对来讲是不支持共享的,也是支持的话,也就不用Cephfs了,不少公司就是用这个块,基于块去作一些开发,及对象存储作一些开发。工具
ceph能够经过内核模块和librbd库提供块设备支持。客户端能够经过内核模块挂在rbd使用,客户端使用rbd块设备就像使用普通硬盘同样,能够对其就行格式化而后使用;客户应用也能够经过librbd使用ceph块,典型的是云平台的块存储服务(以下图),云平台可使用rbd做为云的存储后端提供镜像存储、volume块或者客户的系统引导盘等。测试
使用场景:spa
云平台(OpenStack作为云的存储后端提供镜像存储)操作系统
K8s容器 (自动pv供给)code
map成块设备直接使用,在存储里去申请块,块映射到系统能够识别的盘,好比ls /dev/能够看到这块RBD,能够把它挂载到本机,若是共享的话借助其余的工具exports,把这个映射出去, ISCIS,安装Ceph客户端,也就是在每台机器都装iscls这个包,这样的话才能使用这个命令去建立块
RBD挂载到操做系统
一、建立rbd使用的pool
也就是建立rbd的时候都会放到这个pool下,可是若是不想放到pool下就能够指定pool的名字,目前这些命令不是针对k8s去用的,好比咱们的服务临时须要一块空间,把这个文件挂载到本地上,那么就能够用这么个方法,从存储里面拿出一块空间供他使用
32 32:是它的pg与pgp number的pg数,就是建立一个pool,32个pg,32个pgp,这个会随着容量的增长,pg也会动态的去扩容,生产上规定pg会用多少,根据osd的数量,文件数量,作一个前期的规划
建立好以后能够经过 ceph osd lspools 查看新增一个rbd块存储
#ceph osd pool create rbd 32 32 .rgw.root default.rgw.control default.rgw.meta default.rgw.log rbd 能够经过# ceph osd pool ls detail 查看建立pool的详细信息,能够看到pg_num与pgp_num pg_num是pg里面包含的object,pg_num是描述pg的位置,这两个数是一一对应的 pool 5 'rbd' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode warn last_change 29 flags hashpspool stripe_width 0 把这个pool标记成rbd #ceph osd pool application enable rbd rbd 执行完就可使用rbd ls命令了 [root@cephnode01 my-cluster]# rbd ls
二、建立一个块设备镜像#rbd create --size 10240 image01
三、查看块设备有多少镜像,以及详细信息
#ls #rbd info image01 rbd image 'image01': size 10 GiB in 2560 objects order 22 (4 MiB objects) snapshot_count: 0 id: 11bb8aff0615 block_name_prefix: rbd_data.11bb8aff0615 format: 2 features: layering, exclusive-lock, object-map, fast-diff, deep-flatten op_features: flags: create_timestamp: Mon Mar 2 15:14:01 2020 access_timestamp: Mon Mar 2 15:14:01 2020 modify_timestamp: Mon Mar 2 15:14:01 2020 使用rados命令查看底层rbd #rados -p rbd ls --all rbd_id.image01 rbd_directory rbd_object_map.11bb8aff0615 rbd_header.11bb8aff0615 rbd_info
四、将块设备映射到系统内核#rbd map image01
若是这里报错这里须要执行如下不支持的系统内核
五、禁用当前系统内核不支持的feature#rbd feature disable image01 exclusive-lock, object-map, fast-diff, deep-flatten
再次查看rbd info image01
详细信息能够看到feature已经关掉
六、再次映射
#rbd map image01 /dev/rbd0 #ls /dev/rbd0 查看会多一个/dev/rbd0设备 /dev/rbd0
六、格式化块设备镜像,也就是如今可使用这个块设备了,由于已经映射到系统内核当中,可是用以前咱们须要将它格式化
#mkfs.xfs /dev/rbd0 meta-data=/dev/rbd0 isize=512 agcount=16, agsize=163840 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=2621440, imaxpct=25 = sunit=1024 swidth=1024 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=8 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
七、mount到本地,挂载到系统的/mnt目录下,也可使用其余的目录
#mount /dev/rbd0 /mnt 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/centos-root 36G 5.6G 30G 16% / devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 1.9G 13M 1.9G 1% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/sda1 1014M 170M 845M 17% /boot tmpfs 378M 8.0K 378M 1% /run/user/42 tmpfs 378M 44K 378M 1% /run/user/0 /dev/sr0 4.2G 4.2G 0 100% /run/media/root/CentOS 7 x86_64 tmpfs 1.9G 52K 1.9G 1% /var/lib/ceph/osd/ceph-0 /dev/rbd0 10G 33M 10G 1% /mnt
八、在/mnt也就是挂载的目录下建立文件进行测试,使用rados命令能够查看到它是以rbd的格式去存放数据
#cd /mnt #echo "welcome to use rbd" > test.txt #rados -p rbd ls --all rbd_data.11bb8aff0615.0000000000000001 rbd_data.11bb8aff0615.00000000000006e0 rbd_data.11bb8aff0615.00000000000008c0 rbd_data.11bb8aff0615.0000000000000501 rbd_data.11bb8aff0615.0000000000000140 rbd_data.11bb8aff0615.0000000000000960 rbd_id.image01 rbd_data.11bb8aff0615.0000000000000780 rbd_data.11bb8aff0615.0000000000000640 rbd_directory rbd_data.11bb8aff0615.0000000000000820 rbd_data.11bb8aff0615.00000000000001e0 rbd_header.11bb8aff0615 rbd_info rbd_data.11bb8aff0615.00000000000005a0 rbd_data.11bb8aff0615.00000000000009ff rbd_data.11bb8aff0615.0000000000000280 卸载使用umount #umount /mnt
九、取消块设备和内核映射
查看map
#rbd showmapped id pool namespace image snap device rbd image01 - /dev/rbd0 取消块设备 #rbd unmap image01 再次查看info设备信息还都在,也就是umount和unmap以后数据不会丢失,只有rm删除块设备以后数据才会丢失 #rbd info image01 rbd image 'image01': size 10 GiB in 2560 objects order 22 (4 MiB objects) snapshot_count: 0 id: 11bb8aff0615 block_name_prefix: rbd_data.11bb8aff0615 format: 2 features: layering op_features: flags: create_timestamp: Mon Mar 2 15:14:01 2020 access_timestamp: Mon Mar 2 15:14:01 2020 modify_timestamp: Mon Mar 2 15:14:01 2020
十、删除RBD块设备
#rbd rm image01 这是本机怎么将rbd挂载到文件系统上,但这只能是在ceph集群中有rbd命令的时候才能去建立的,若是想使用rbd命令的话须要安装ceph-mon
一、建立快照
#rbd create --size 10240 image02 #rbd snap create image02@image02_snap01
二、列出建立的快照
#rbd snap list image02 SNAPID NAME SIZE PROTECTED TIMESTAMP image02_snap01 10 GiB Mon Mar 2 16:44:37 2020 或 #rbd ls -l NAME SIZE PARENT FMT PROT LOCK image02 10 GiB 2 image02@image02_snap01 10 GiB 2
三、查看快照详细信息
#rbd info image02@image02_snap01 rbd image 'image02': size 10 GiB in 2560 objects order 22 (4 MiB objects) snapshot_count: 1 id: 12315524dc09 block_name_prefix: rbd_data.12315524dc09 format: 2 features: layering, exclusive-lock, object-map, fast-diff, deep-flatten op_features: flags: create_timestamp: Mon Mar 2 16:32:50 2020 access_timestamp: Mon Mar 2 16:32:50 2020 modify_timestamp: Mon Mar 2 16:32:50 2020 protected: False
四、克隆快照(快照必须处于被保护状态才能被克隆)
进入保护状态#rbd snap protect image02@image02_snap01
这里须要建立kube的pool
#ceph osd pool create kube 16 16 克隆到kube/image02_clone01中 #rbd clone rbd/image02@image02_snap01 kube/image02_clone01 #rbd ls -p kube image02_clone01
五、查看快照的children,查看它的子快照
#rbd children image02 kube/image02_clone01
六、去掉快照的parent,去掉关系以后再次查看它的就没有了
#rbd flatten kube/image02_clone01 Image flatten: 100% complete...done.
七、恢复快照,也就是回滚操做,好比以前建立一个快照有1g的文件,后面想回滚到以前的状态就可使用恢复以前的快照操做#rbd snap rollback image02@image02_snap01
八、删除快照
取消保护
#rbd snap unprotect image02@image02_snap01 #rbd snap remove image02@image02_snap01
删除以后查看#rbd snap ls image02
九、导出导入RBD镜像
导出RBD镜像
#rbd export image02 /tmp/image02 Exporting image: 100% complete...done.
导入RBD镜像
先把以前的进行删除
#rbd ls image02 rbd remove image02 Removing image: 100% complete...done.
导入#rbd import /tmp/image02 rbd/image02 --image-format 2
在k8s中若是使用rbd的话,建立一个块设备,映射成系统可识别的设备,格式化以后,mount到本地,经过exports共享出去,使用NFS一块儿使用RBD,这样也是能够的
对RBD扩容使用命令:rbd --image image03 resize --size 15240
一、使用rbd进行扩容,举个新例子,新建立一个rbd镜像
#rbd create --size 10240 image03 rbd ls
二、查看块存储的详细信息#rbd info image03
三、使用rados能够查看底层设备rbd块设备#rados -p rbd ls
四、禁用当前系统内核不支持的feature
#rbd feature disable image03 exclusive-lock, object-map, fast-diff, deep-flatten
五、map成系统可识别的设备 #rbd map image03
六、格式化#mkfs.xfs /dev/rbd0
七、挂载到本地当中#mount /dev/rbd0 /mnt
八、使用df -h能够查看到磁盘已经挂载上 #df -h
九、进行扩容大小#rbd --image image03 resize --size 15240
十、查看rbd的大小,已经扩容到15,可是这个不会直接占用15g,而是用多少占用多少,使用的精简置用
#rbd info image03 rbd image 'image03': size 15 GiB in 3810 objects order 22 (4 MiB objects) snapshot_count: 0 id: 134426f02050 block_name_prefix: rbd_data.134426f02050 format: 2 features: layering op_features: flags: create_timestamp: Mon Mar 2 18:26:29 2020 access_timestamp: Mon Mar 2 18:26:29 2020 modify_timestamp: Mon Mar 2 18:26:29 2020
十一、可是查看咱们的系统的挂载目录目前仍是没有扩容到咱们的15G呢,能够执行xfs_growfs -d 指定挂载目录
#xfs_growfs -d /mnt #df -h 查看已经扩容 /dev/rbd0 15G 33M 15G 1% /mnt /dev/rbd1 20G 33M 20G 1% /test1