Ceph 存储集群可以从RBD的快照中创建写时复制 (COW 副本),这就是 Ceph 的快照分层。 Ceph 的这个分层特性允许客户端创建 Ceph RBD 的多个即时副本, 这个特性对云平台和虚拟化平台非常有 ,例如 OpenStack 、CloudStack 和Qemu/ KVM 这些平台通常'以快照的形式保护含有 OS/VM 镜像的Ceph RBD 镜像 ,然后通过不断复制这个快照来创建新的虚拟机 /实例 ,快照是只读的,但是 COW 副本则是完全可写的; Ceph 的这个特性为云平台带来巨大的灵活性,并且对于云平台非常有用,下图显示了 RADOS 块设备、 RBD 快照和COW 快照副本之间的关系。
每一个复制的镜像(子镜像)都包含它的父快照的引用,用于读取镜像数据。 因此,父快照在用于复 制之前应该处于被保护状态。当有数据写入COW 复制的镜像时,它会为自己存储新的数据引用。 COW 复制的镜像与 RBD是一 样的。
它们都非常灵活,类似于 RBD ,也就是说,它们可写, 可调整容量,可以创建新的快照,将来还可以复制。
RBD 镜像的类型定义了它所支持的特性,在Ceph 中,有两种 类型的RBD 镜像:format-l和 form t-2, format-l和 format-2 类型的 RBD 镜像 都支持快 照特性。然而,分层特性( 也就是 COW 特性)只有 format-2 类型 RBD 镜像支持, RBD 镜像 默认类型是format-l。
(1)首先创建一个format2类型的RBD镜像,然后创建快照,保护快照,最后使用该快照创建一个COW副本。
[root@node140 /]# rbd create rbd_copy1 --size 10240 --image-format 2
[root@node140 /]# rbd ls
rbd_copy1
(2)创建该镜像的快照
[root@node140 /]# rbd snap create rbd/rbd_copy1@snap_for_clone
[root@node140 /]# rbd snap ls rbd/rbd_copy1
SNAPID NAME SIZE PROTECTED TIMESTAMP
8 snap_for_clone 10 GiB Wed Aug 28 17:27:10 2019
(3)要创建COW副本,先要将快照置于保护状态,这个步骤很重要,我们应该保护该快照,因为如果删除该快照,所有连接到它的COW副本都将被销毁。[root@node140 /]# rbd snap protect rbd/rbd_copy1@snap_for_clone
(4)复制快照需要父存储池,RBD镜像及快照的名称。[root@node140 /]# rbd clone rbd/rbd_copy1@snap_for_clone rbd/rbd_copy2
(5)创建副本速度非常快,创建完成后,查看新镜像的信息,发现他的父池、镜像,以及快照的信息都会显示出来。
[root@node140 /]# rbd --pool rbd --image rbd_copy2 info
rbd image 'rbd_copy2':
size 10 GiB in 2560 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: 1735e1f84c868
block_name_prefix: rbd_data.1735e1f84c868
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
op_features:
flags:
create_timestamp: Wed Aug 28 17:33:38 2019
access_timestamp: Wed Aug 28 17:33:38 2019
modify_timestamp: Wed Aug 28 17:33:38 2019
parent: rbd/rbd_copy1@snap_for_clone ##依赖父镜像
overlap: 10 GiB
(6)到这里已经克隆了一个RBD镜像,基于其父镜像的快照,但现在不是独立的,还依赖于父镜像,要不依赖于父镜像,需要扁平化该镜像,其中会从父镜像的快照中复制数据到子镜像中。扁平化过程所需要的时间域镜像中的数据大小相同,扁平化过后无任何依赖,完全独立。
[root@node140 /]# rbd flatten rbd/rbd_copy2
Image flatten: 100% complete...done.
[root@node140 /]# rbd --pool rbd --image rbd_copy2 info
rbd image 'rbd_copy2':
size 10 GiB in 2560 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: 1735e1f84c868
block_name_prefix: rbd_data.1735e1f84c868
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
op_features:
flags:
create_timestamp: Wed Aug 28 17:33:38 2019
access_timestamp: Wed Aug 28 17:33:38 2019
modify_timestamp: Wed Aug 28 17:33:38 2019
(7)如果要删除父镜像快照,先去保护,然后删除
[root@node140 /]# rbd snap unprotect rbd/rbd_copy1@snap_for_clone
[root@node140 /]# rbd snap rm rbd/rbd_copy1@snap_for_clone
Removing snap: 100% complete...done.
注释:引用《ceph分布式存储学习指南》进行学习和实践