RBD的块设备的镜像快照实战指南

简介: 这篇文章提供了一个关于如何在Ceph RBD块设备上创建和管理快照的详细指南,包括快照的创建、回滚、分层克隆以及快照数量限制的操作步骤。

一.RBD快照概述

1 快照简介

快照的作用就是对当前块设备状态进行记录拍照,而后基于该状态进行回滚的一种方式。

ceph支持在一个块设备快照的基础上创建一个活多个COW或者COR(Copy-On-Read)类型的克隆,这种中间快照层机制提了一种极速创建image的方式。用户可以创建一个基础image并未起创建一个只读快照层,而后可以在此上创建任意个克隆进行读写操作,甚至能够多级克隆。

事件中可以为Qemu虚拟机创建一个image并按照好基础操作系统作为模板,对其创建快照层后,便可按需创建任意多个克隆作为image提供给多个不同的VM使用,或者每创建一个克隆猴按需修改,而后对其再次创建下游的克隆。

2 ceph支持COW和COR两种类型

COW:
    在数据首次写入时才需要将它复制到克隆的image中,是默认的类型。

COR:
    在数据首次被读取时复制到当前克隆中,随后到读写操作都将直接基于此克隆中的对象进行。

3 分层快照的使用

所谓的快照分层,指的是基于基础的目标快照和特有的应用快照。

在RBD上使用分层克隆的流程:
    - 1.创建一个image(Create Block Device Image);
    - 2.对image创建一个快照(Create a Snapshot);
    - 3.将其置于保护模式(Protect the Snapshot);
    - 4.克隆此快照(Clone the Snapshot);


温馨提示:
   - 1.通过克隆生成的imag在其功能上与直接创建的image几乎完全相同,它同样支持读,写,克隆,空间缩容等功能,唯一的不同之处是克隆饮用了一个只读的上游快照,而且此快照必须要置于"保护"模式之下;
   - 2.克隆的image会保留对父快照的引用,删除子克隆对父快照的引用时,可通过将信息从快照复制到克隆,进行image到展平克隆所需的时间随着image大小增加而延长;
   - 3.在创建克隆的image时,需要指定引用的存储池,镜像和镜像快照,以及克隆的目标image的存储池和镜像名称,因此克隆镜像支持跨存储池进行;
   - 4.必须先取消保护快照,然后才能删除它,用户无法删除克隆所引用的快照,需要先展平其每个克隆,然后才能删除快照;

二.RBD的块设备的镜像快照实战案例

1.创建测试的镜像

[root@ceph141 ~]# rbd create -s 2G yinzhengjie-rbd/rbd-snap --image-feature layering,exclusive-lock
[root@ceph141 ~]# 
[root@ceph141 ~]# rbd info yinzhengjie-rbd/rbd-snap  | grep '\sfeatures'
    features: layering, exclusive-lock
[root@ceph141 ~]#

2.客户端添加映射并挂载设备写入测试数据

[root@ceph141 ~]# rbd map yinzhengjie-rbd/rbd-snap
/dev/rbd0
[root@ceph141 ~]# 
[root@ceph141 ~]# mkfs.xfs /dev/rbd0 
meta-data=/dev/rbd0              isize=512    agcount=8, agsize=65536 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=524288, 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
[root@ceph141 ~]# 
[root@ceph141 ~]# mount /dev/rbd0 /mnt/
[root@ceph141 ~]# 
[root@ceph141 ~]# df -h | grep mnt
/dev/rbd0                2.0G   33M  2.0G   2% /mnt
[root@ceph141 ~]# 
[root@ceph141 ~]# cp /etc/os-release /mnt/
[root@ceph141 ~]# 
[root@ceph141 ~]# ll /mnt/
total 4
-rw-r--r-- 1 root root 393 Feb  1 16:20 os-release
[root@ceph141 ~]#

3.在ceph服务端创建快照

    1 为指定块设备创建快照
[root@ceph143 ~]# rbd info yinzhengjie-rbd/rbd-snap | grep snapshot_count
    snapshot_count: 0
[root@ceph143 ~]# 
[root@ceph143 ~]# rbd snap create yinzhengjie-rbd/rbd-snap --snap yinzhengjie-snap-rbd-v1-20240201
[root@ceph143 ~]# 
[root@ceph143 ~]# rbd info yinzhengjie-rbd/rbd-snap | grep snapshot_count
    snapshot_count: 1
[root@ceph143 ~]# 
[root@ceph143 ~]# 

    2 查看指定块设备快照
[root@ceph143 ~]# rbd snap list yinzhengjie-rbd/rbd-snap 
SNAPID NAME                           SIZE  PROTECTED TIMESTAMP                
     4 yinzhengjie-snap-rbd-v1-20240201 2 GiB           Thu Feb  1 16:22:24 2024 
[root@ceph143 ~]#

4.客户端删除挂载的块设备内的数据

[root@ceph141 ~]# ll /mnt/
total 4
-rw-r--r-- 1 root root 393 Feb  1 16:20 os-release
[root@ceph141 ~]# 
[root@ceph141 ~]# rm -f  /mnt/os-release 
[root@ceph141 ~]# 
[root@ceph141 ~]# ll /mnt/
total 0
[root@ceph141 ~]#

5.客户端删除映射前在服务端查看块设备镜像是否被锁住,注意LOCK字段是否有"excl"属性

[root@ceph143 ~]# rbd ls yinzhengjie-rbd -l
NAME                                    SIZE  PARENT FMT PROT LOCK 
...
rbd-snap                                2 GiB          2      excl 
rbd-snap@yinzhengjie-snap-rbd-v1-20240201 2 GiB          2           
...
[root@ceph143 ~]#

6.客户端取消块设备映射,如果不这样做,就无法释放锁

[root@ceph141 ~]# umount /mnt/  # 卸载服务
[root@ceph141 ~]# 
[root@ceph141 ~]# ll /dev/rbd*  # rbd设备的映射关系还在
brw-rw---- 1 root disk 252, 0 Feb  1 16:19 /dev/rbd0

/dev/rbd:
total 0
drwxr-xr-x 2 root root 60 Feb  1 16:18 yinzhengjie-rbd
[root@ceph141 ~]# 
[root@ceph141 ~]# rbd unmap yinzhengjie-rbd/rbd-snap  # 删除映射关系
[root@ceph141 ~]# 
[root@ceph141 ~]# ll /dev/rbd*
ls: cannot access /dev/rbd*: No such file or directory
[root@ceph141 ~]#

7.客户端删除映射后在服务端查看镜像是否被锁住,注意LOCK字段是否有"excl"属性

[root@ceph143 ~]# rbd ls yinzhengjie-rbd -l
NAME                                    SIZE  PARENT FMT PROT LOCK 
...
rbd-snap                                2 GiB          2       
rbd-snap@yinzhengjie-snap-rbd-v1-20240201 2 GiB          2           
...
[root@ceph143 ~]#

8.基于之前的快照信息恢复数据

[root@ceph143 ~]# rbd snap list  yinzhengjie-rbd/rbd-snap
SNAPID NAME                           SIZE  PROTECTED TIMESTAMP                
     4 yinzhengjie-snap-rbd-v1-20240201 2 GiB           Thu Feb  1 16:22:24 2024 
[root@ceph143 ~]# 
[root@ceph143 ~]# rbd snap rollback yinzhengjie-rbd/rbd-snap --snap yinzhengjie-snap-rbd-v1-20240201
Rolling back to snapshot: 100% complete...done.
[root@ceph143 ~]#

9.随机找一个客户端重新挂载块设备文件,验证数据是否找回

[root@ceph142 ~]# rbd map yinzhengjie-rbd/rbd-snap
/dev/rbd0
[root@ceph142 ~]# 
[root@ceph142 ~]# mount /dev/rbd0 /mnt/
[root@ceph142 ~]# 
[root@ceph142 ~]# ll /mnt/
total 4
-rw-r--r-- 1 root root 393 Feb  1 16:20 os-release
[root@ceph142 ~]#

10.删除快照

[root@ceph143 ~]# rbd snap list  yinzhengjie-rbd/rbd-snap
SNAPID NAME                           SIZE  PROTECTED TIMESTAMP                
     4 yinzhengjie-snap-rbd-v1-20240201 2 GiB           Thu Feb  1 16:22:24 2024 
[root@ceph143 ~]# 
[root@ceph143 ~]# 
[root@ceph143 ~]# rbd snap rm yinzhengjie-rbd/rbd-snap --snap yinzhengjie-snap-rbd-v1-20240201
Removing snap: 100% complete...done.
[root@ceph143 ~]# 
[root@ceph143 ~]# rbd snap list  yinzhengjie-rbd/rbd-snap
[root@ceph143 ~]#

三.RBD的块设备的快照数量限制

1 创建指定数量的快照

[root@ceph143 ~]# rbd snap limit set yinzhengjie-rbd/rbd-snap --limit 3
[root@ceph143 ~]# 
[root@ceph143 ~]# rbd info yinzhengjie-rbd/rbd-snap | egrep "snapshot_count|snapshot_limit"
    snapshot_count: 0
    snapshot_limit: 3
[root@ceph143 ~]# 
[root@ceph143 ~]# rbd snap create  yinzhengjie-rbd/rbd-snap --snap yinzhengjie-snap-v1
[root@ceph143 ~]# 
[root@ceph143 ~]# rbd snap create  yinzhengjie-rbd/rbd-snap --snap yinzhengjie-snap-v2
[root@ceph143 ~]# 
[root@ceph143 ~]# rbd snap create  yinzhengjie-rbd/rbd-snap --snap yinzhengjie-snap-v3
[root@ceph143 ~]# 
[root@ceph143 ~]# rbd snap create  yinzhengjie-rbd/rbd-snap --snap yinzhengjie-snap-v4
rbd: failed to create snapshot: (122) Disk quota exceeded
[root@ceph143 ~]# 
[root@ceph143 ~]# rbd snap list  yinzhengjie-rbd/rbd-snap
SNAPID NAME              SIZE  PROTECTED TIMESTAMP                
     6 yinzhengjie-snap-v1 2 GiB           Thu Feb  1 16:33:38 2024 
     7 yinzhengjie-snap-v2 2 GiB           Thu Feb  1 16:33:42 2024 
     8 yinzhengjie-snap-v3 2 GiB           Thu Feb  1 16:33:44 2024 
[root@ceph143 ~]# 
[root@ceph143 ~]# rbd info yinzhengjie-rbd/rbd-snap | egrep "snapshot_count|snapshot_limit"
    snapshot_count: 3
    snapshot_limit: 3
[root@ceph143 ~]#

2 清空快照数量限制

[root@ceph143 ~]# rbd info yinzhengjie-rbd/rbd-snap | egrep "snapshot_count|snapshot_limit"
    snapshot_count: 3
    snapshot_limit: 3
[root@ceph143 ~]# 
[root@ceph143 ~]# rbd snap limit clear yinzhengjie-rbd/rbd-snap
[root@ceph143 ~]# 
[root@ceph143 ~]# rbd info yinzhengjie-rbd/rbd-snap | egrep "snapshot_count|snapshot_limit"
    snapshot_count: 3
[root@ceph143 ~]# 
[root@ceph143 ~]# rbd snap create  yinzhengjie-rbd/rbd-snap --snap yinzhengjie-snap-v4
[root@ceph143 ~]# 
[root@ceph143 ~]# rbd snap create  yinzhengjie-rbd/rbd-snap --snap yinzhengjie-snap-v5
[root@ceph143 ~]# 
[root@ceph143 ~]# rbd snap create  yinzhengjie-rbd/rbd-snap --snap yinzhengjie-snap-v6
[root@ceph143 ~]# 
[root@ceph143 ~]# rbd snap create  yinzhengjie-rbd/rbd-snap --snap yinzhengjie-snap-v7
[root@ceph143 ~]# 
[root@ceph143 ~]# rbd snap create  yinzhengjie-rbd/rbd-snap --snap yinzhengjie-snap-v8
[root@ceph143 ~]# 
[root@ceph143 ~]# rbd snap list  yinzhengjie-rbd/rbd-snap
SNAPID NAME              SIZE  PROTECTED TIMESTAMP                
     6 yinzhengjie-snap-v1 2 GiB           Thu Feb  1 16:33:38 2024 
     7 yinzhengjie-snap-v2 2 GiB           Thu Feb  1 16:33:42 2024 
     8 yinzhengjie-snap-v3 2 GiB           Thu Feb  1 16:33:44 2024 
    11 yinzhengjie-snap-v4 2 GiB           Thu Feb  1 16:36:19 2024 
    12 yinzhengjie-snap-v5 2 GiB           Thu Feb  1 16:36:21 2024 
    13 yinzhengjie-snap-v6 2 GiB           Thu Feb  1 16:36:23 2024 
    14 yinzhengjie-snap-v7 2 GiB           Thu Feb  1 16:36:25 2024 
    15 yinzhengjie-snap-v8 2 GiB           Thu Feb  1 16:36:31 2024 
[root@ceph143 ~]#

四.快照分层实战案例

推荐阅读:
    https://www.cnblogs.com/yinzhengjie/p/18385758
目录
相关文章
|
存储 算法 关系型数据库
Ceph介绍及原理架构分享
Ceph介绍及原理架构分享
963 0
|
定位技术 API 开发工具
AppsFlyer 研究(七) 非GPS设备用户归因解决方案
AppsFlyer 研究(七) 非GPS设备用户归因解决方案
1038 0
|
存储 缓存 运维
Ceph离线(纯内网)部署
Ceph离线(纯内网)部署
Ceph离线(纯内网)部署
|
6月前
|
存储 数据可视化 API
Proxmox Datacenter Manager 1.0 - 集中管理 Proxmox 虚拟化环境
Proxmox Datacenter Manager 1.0 - 集中管理 Proxmox 虚拟化环境
838 2
Proxmox Datacenter Manager 1.0 - 集中管理 Proxmox 虚拟化环境
|
存储 关系型数据库 文件存储
Ubuntu22.04LTS基于cephadm快速部署Ceph Reef(18.2.X)集群
这篇文章是关于如何在Ubuntu 22.04LTS上使用cephadm工具快速部署Ceph Reef(18.2.X)存储集群的详细教程,包括ceph的基本概念、集群的搭建步骤、集群管理以及测试集群可用性等内容。
4719 8
Ubuntu22.04LTS基于cephadm快速部署Ceph Reef(18.2.X)集群
|
Shell 容器
Ceph Reef(18.2.X)访问ceph集群的方式及管理员节点配置案例
这篇文章是关于Ceph Reef(18.2.X)版本中访问ceph集群的方式和管理员节点配置的案例,介绍了使用cephadm shell的不同方式访问集群和如何配置管理节点以方便集群管理。
896 5
|
网络安全
ceph的mgr组件模块dashboard图形化管理ceph集群
关于如何通过Ceph的mgr组件模块dashboard来图形化管理Ceph集群的教程,包括基于HTTP和HTTPS的配置步骤。
1302 3
|
缓存 JSON 安全
Http自定义Header导致的跨域问题
在Web开发中,正确处理跨域问题是确保应用安全和性能的重要环节。通过在服务器端设置适当的CORS头信息,处理预检请求,并遵循最佳实践,可以有效解决自定义Header导致的跨域问题,提高应用的安全性和用户体验。理解并掌握这些技巧,对于构建高效、可靠的Web应用至关重要。
1157 11
|
存储
cephFS高可用分布式文件系统部署指南
关于如何部署高可用的cephFS分布式文件系统,包括集群的搭建、验证高可用性以及实现两主一从架构的详细指南。
1443 10