RBD回收站机制(TRASH)

回收站就是将你的数据放在回收站,正常的 rbd image 一旦删除了就没了,但是ceph rbd 提供了回收站方式给你反悔的机会,可以自定义设置保留日期.
  • 创建镜像
rbd create ceph-demo/ceph-trash.img --size 10G
[root@node-1 ~]# rbd -p ceph-demo ls
ceph-trash.img
rbd-demo.img
  • 将镜像移动到回收站回收后pool下将没有这个镜像
rbd trash move ceph-demo/ceph-trash.img --expires-at 20200928
--expires-at 设置指定的过期日期
#查看回收站镜像
[root@node-1 ~]# rbd trash -p ceph-demo ls
16173ad6a4dc ceph-trash.img
  • 还原镜像
[root@node-1 ~]# rbd trash restore  ceph-demo/16173ad6a4dc
[root@node-1 ~]# rbd -p ceph-demo ls
ceph-trash.img
rbd-demo.img

RBD镜像快照(SNAPSHOTS)

快照是映像在某个特定时间点的一份只读副本。 Ceph 块设备的一个高级特性就是你可以为映像创建快照来保留其历史。 Ceph 还支持分层快照,让你快速、简便地克隆映像(如 VM 映像)。 Ceph 的快照功能支持 rbd 命令和多种高级接口,包括 QEMU 、 libvirt 、 OpenStack 和 CloudStack.
  • 创建快照
rbd snap create ceph-demo/rbd-demo.img@snap_20200927
#查看快照
[root@node-1 ~]# rbd snap ls ceph-demo/rbd-demo.img
SNAPID NAME          SIZE   PROTECTED TIMESTAMP                
     4 snap_20200927 20 GiB           Sun Sep 27 10:40:17 2020
  • 快照恢复
[root@node-1 ~]# rbd snap rollback ceph-demo/rbd-demo.img@snap_20200927
Rolling back to snapshot: 100% complete...done.

快照恢复后数据依然还是不存在的,因为恢复后磁盘是离线状态,需要unmount然后重新挂载数据可以恢复。

  • 删除快照
[root@node-1 ~]# rbd snap remove ceph-demo/rbd-demo.img@snap_20200927
Removing snap: 100% complete...done.
#查看快照已删除

RBD镜像克隆机制

RBD 支持image快照技术,快照可以保留image的状态历史 ,RBD image 快照只需要保存少量的快照元数据信息,其底层数据 i/o 的实现完全依 赖于RADOS快照实现,数据对象克隆生成快照对象的COW(copy-on-write)功能实现,云厂商也基于COW过程对RBD客户端而言完全不感知,RADOS层根据RBD客户端发起的数据对象 I/O 所携带的 SnapContext 信息决定是否要进行COW操作。

RBD 快照是创建于特定时间点的RBD镜像的只读副本,RBD快照使用写时复制(COW)技术来最大程度减少所需的存储空间所谓写时复制即快照并没有真正的复制原文件,而只是对原文件的一个引用

image.png

  • 创建镜像模板并保护模板
rbd snap create ceph-demo/rbd-demo.img@template
[root@node-1 ~]# rbd snap ls ceph-demo/rbd-demo.img
SNAPID NAME     SIZE   PROTECTED TIMESTAMP                
     6 template 20 GiB           Sun Sep 27 10:58:37 2020
rbd snap protect ceph-demo/rbd-demo.img@template
#测试快照是否可以删除
[root@node-1 ~]# rbd snap rm ceph-demo/rbd-demo.img@template
Removing snap: 2020-09-27 11:00:08.251 7f969c484c80 -1 librbd::Operations: snapshot is protected
0% complete...failed.
rbd: snapshot 'template' is protected from removal.
  • 镜像克隆
rbd  clone ceph-demo/rbd-demo.img@template ceph-demo/vm1-clone.img
[root@node-1 ~]# rbd -p ceph-demo ls
ceph-trash.img
rbd-demo.img
vm1-clone.img
[root@node-1 ~]# rbd info ceph-demo/vm1-clone.img
rbd image 'vm1-clone.img':
    size 20 GiB in 5120 objects
    order 22 (4 MiB objects)
    snapshot_count: 0
    id: 17402e7eef15
    block_name_prefix: rbd_data.17402e7eef15
    format: 2
    features: layering
    op_features: 
    flags: 
    create_timestamp: Sun Sep 27 11:04:47 2020
    access_timestamp: Sun Sep 27 11:04:47 2020
    modify_timestamp: Sun Sep 27 11:04:47 2020
    parent: ceph-demo/rbd-demo.img@template
    overlap: 20 GiB
# 可以查看其使用的那个父镜像

可以发现克隆的非常快,这利用rbd的COW(copy-on-write)功能实现,云厂商也基于COW这样可以做到速度非常的快,而且很省空间,但是缺点是当快照模板损坏时,基于其创建的镜像都回损坏,所以有时我们需要取消他的依赖关系,但这样会花费更多的时间和更多的磁盘资源。

  • 解除镜像模板父子依赖关系
# 查看基于快照模板创建的镜像
[root@node-1 ~]# rbd children ceph-demo/rbd-demo.img@template
ceph-demo/vm1-clone.image
#取消模板依赖
[root@node-1 ~]# rbd flatten  ceph-demo/vm1-clone.image
Image flatten: 4% complete...

RBD备份与恢复

Ceph 提供了一些特性和接口, 可以让我们很方便地实现 集群的备份与恢复. 一种是 通过集群镜像, 可以做到实时备份, 但是这个对网络要求比较高, 运行一个镜像集群资源消耗也比较大. 还有一种就是通过 RBD 的快照技术, 实现对 RBD 的数据备份与恢复,基于快照的备份是实现在ceph集群内部的,然而当整个ceph集群损坏后,依然无法恢复所以需要在集群外部实现备份。
  • 导出快照
#创建快照
rbd snap create ceph-demo/rbd-demo.img@snap-demo
#导出快照
[root@node-1 ~]# rbd export ceph-demo/rbd-demo.img@snap-demo  /root/rbd-demo.img
Exporting image: 100% complete...done.
  • 恢复镜像
[root@node-1 ~]# rbd import rbd-demo.img ceph-demo/rbd-demo-test.img
Importing image: 8% complete...

## 重新挂载将会恢复数据,可以通过这中方法做ceph集群迁移
  • 增量备份

rbd export-diff ceph-demo/rbd-demo.img@snap-demo  /root/rbd-demo-test.img
将增量文件导入全备文件中
rbd import-diff rbd-demo-test.img ceph-demo/rbd-demo-test.img.img

Cherish
216 声望4 粉丝

引用和评论

0 条评论