rbd使用

Ceph 支持一个非常好的特性,即以COW(写时复制)的方式从RDB 快照创建克隆(clone),在Ceph> 中这也被称为快照分层(Snapshot Layering)。分层特性允许客户端创建多个Ceph RBD> 克隆实例。这个特性对OpenStack、CloudsStack、Qemu/KVM> 等云平台和虚拟化平台都提供了非常有用的帮助。这些平台通常以快照的形式来保护Ceph RBD> 镜像。然后,这些快照被多次用来孵化实例。快照是只读的,但COW> 克隆是完全可写的;Ceph的这一特性提供了更强大的灵活性,这对云平台来说非常有用。

创建块

rbd create (pool_name)/(rbd_name) --size xxxxxMB
如果不指定pool_name, 块默认创建在rbd中。下图在pool2中创建disk1
在这里插入图片描述
根据block id查看对应objects

[root@node1 cstrbd1]# rados ls -p pool2 |grep rbd_data.aca2904292e3
rbd_data.aca2904292e3.000000000000000c
rbd_data.aca2904292e3.00000000000000e0
rbd_data.aca2904292e3.000000000000000b
rbd_data.aca2904292e3.0000000000000016
rbd_data.aca2904292e3.0000000000000040
rbd_data.aca2904292e3.0000000000000060
rbd_data.aca2904292e3.000000000000001c
rbd_data.aca2904292e3.0000000000000009

查看object状态和pg以及osd (三副本存储池,落到0,1,2三个osd)

[root@node1 cstrbd1]# rados -p pool2 stat rbd_data.aca2904292e3.000000000000001a
pool2/rbd_data.aca2904292e3.000000000000001a mtime 2021-08-23T15:17:14.000000+0800, size 4194304
[root@node1 cstrbd1]# ceph osd map pool2 rbd_data.aca2904292e3.000000000000001a
osdmap e69 pool 'pool2' (3) object 'rbd_data.aca2904292e3.000000000000001a' -> pg 3.811558bf (3.1f) -> up ([0,1,2], p0) acting ([0,1,2], p0)

映射块

将img映射到主机(/dev/rbd0)
rbd map pool2/disk1
映射完成后可以通过fdisk -l查看

TIPS:
rbd unmap pool2/disk1
取消映射

在这里插入图片描述

挂载与使用

格式化文件系统,这里使用XFS文件系统
mkfs.xfs -f /dev/rbd0
挂载到指定目录使用,挂载完成可以通过df -h查看挂载点等信息
mount /dev/rbd0 /root/cst
dd if=/dev/zero of=/root/cst/file bs=100M count=1 oflag=direct
在目录中写入100M的文件

通过以下命令可以查看存储池和img的使用量,数据被写入到ceph的osd中:

[root@node1 cstrbd1]# rados df
POOL_NAME                 USED  OBJECTS  CLONES  COPIES  MISSING_ON_PRIMARY  UNFOUND  DEGRADED  RD_OPS       RD  WR_OPS       WR  USED COMPR  UNDER COMPR
device_health_metrics      0 B        0       0       0                   0        0         0       0      0 B       0      0 B         0 B          0 B
pool2                  983 MiB      174      64     522                   0        0         0  130643  378 MiB     855  341 MiB         0 B          0 B

total_objects    174
total_used       2.1 GiB
total_avail      28 GiB
total_space      30 GiB
[root@node1 cstrbd1]# rbd du pool2/disk1
NAME         PROVISIONED  USED
disk1@snap1        1 GiB  136 MiB
disk1@snap2        1 GiB  136 MiB
disk1              1 GiB  160 MiB
<TOTAL>            1 GiB  432 MiB

创建快照

创建快照
rbd snap create --snap snap1 pool2/disk1

快照还原

ceph不支持在线还原,需要进行umount和unmap操作后才能进行还原
验证快照还原:

  1. img中随意写入新数据
  2. 卸载img:unmount /dev/rbd0 /root/cst/
  3. 取消映射: rbd unmap /dev/rbd0
  4. 快照还原:rbd snap rollback pool2/disk1@snap1

还原完成后重新映射和挂载,查看数据,正常来说可以看到第一步中写入的数据已经不在了。
另外我们通过查看img已用量信息发现,img的快照实际上是与img在一起的,作为img的使用量(回忆以前openstack针对cinder的quota,snapshot也是不占用配额的,且snapshot与源volume强关联)

[root@node1 cstrbd1]# rbd du pool2/diskclone1
NAME                PROVISIONED  USED
diskclone1@snap2-1        1 GiB  136 MiB
diskclone1@snap2-2        1 GiB  136 MiB
diskclone1                1 GiB   40 MiB
<TOTAL>                   1 GiB  312 MiB

模板与克隆

Ceph RBD 镜像有两种类型:format-1 和format-2。RBD 快照支持这两种类型,即format-1 镜像和format-2 镜像。然而,分层特性(COW 克隆特性)只支持format-2类型的RBD镜像。默认的RBD镜像类型为format-1。
(没了解过为什么。format有1,2两种,没研究具体差别)

克隆之前需要对快照进行保护。
rbd snap protect pool2/disk1@snap1

在这里插入图片描述

从受保护的快照克隆新的img。
rbd clone pool2/disk1@snap1 pool2/diskclone1
克隆出来的img查看详情,可以发现多了一个parent参数:
在这里插入图片描述

且可以看到不写入新数据的情况下,该img的使用量是0:
在这里插入图片描述

这也是克隆之前要protect快照的原因,也就是所谓的快照分层,这个新的img依赖于快照,如果不对快照做保护,删除快照后这些img都无法正常使用了。

rbd flatten pool2/newclone2
通过flatten可以将克隆出来的img进行独立(拍平),也就是将父img中的数据写入(随着数据量的增长耗时越长),独立后就可以对快照解除保护进行删除操作,因为不再依赖于快照中的数据。

克隆出来的img包含了父块的文件以及文件系统,map之后不用再做文件系统,直接挂载即可;
但是挂载中遇到了问题,克隆出来的img无法再挂载:

[root@node1 cstrbd1]# mount /dev/rbd1 /root/cstrbd2
mount: /root/cstrbd2: wrong fs type, bad option, bad superblock on /dev/rbd1, missing codepage or helper program, or other error.

克隆出来的img和源img,做map生成的块的uuid始终是相同的(这里很奇怪,后面再去看看源码这块的处理逻辑)
在这里插入图片描述

想要挂载所有的这些块设备,就需要重新生成uuid烧录到对应的dev:

[root@node1 ~]# uuidgen
2dbffbb6-7c2f-4e3b-ae0b-7f0dda1b8008
[root@node1 ~]# xfs_admin -U 2dbffbb6-7c2f-4e3b-ae0b-7f0dda1b8008 /dev/rbd5
Clearing log and setting UUID
writing all SBs
new UUID = 2dbffbb6-7c2f-4e3b-ae0b-7f0dda1b8008
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值