Ceph 存儲集羣能夠從RBD的快照中建立寫時複製 (COW 副本),這就是 Ceph 的快照分層。 Ceph 的這個分層特性容許客戶端建立 Ceph RBD 的多個即時副本, 這個特性對雲平臺和虛擬化平臺很是有 ,例如 OpenStack 、CloudStack 和Qemu/ KVM 這些平臺一般'以快照的形式保護含有 OS/VM 鏡像的Ceph RBD 鏡像 ,而後經過不斷複製這個快照來建立新的虛擬機 /實例 ,快照是隻讀的,可是 COW 副本則是徹底可寫的; Ceph 的這個特性爲雲平臺帶來巨大的靈活性,而且對於雲平臺很是有用,下圖顯示了 RADOS 塊設備、 RBD 快照和COW 快照副本之間的關係。node
每個複製的鏡像(子鏡像)都包含它的父快照的引用,用於讀取鏡像數據。 所以,父快照在用於復 制以前應該處於被保護狀態。當有數據寫入COW 複製的鏡像時,它會爲本身存儲新的數據引用。 COW 複製的鏡像與 RBD是一 樣的。分佈式
它們都很是靈活,相似於 RBD ,也就是說,它們可寫, 可調整容量,能夠建立新的快照,未來還能夠複製。ide
RBD 鏡像的類型定義了它所支持的特性,在Ceph 中,有兩種 類型的RBD 鏡像:format-l和 form t-2, format-l和 format-2 類型的 RBD 鏡像 都支持快 照特性。然而,分層特性( 也就是 COW 特性)只有 format-2 類型 RBD 鏡像支持, RBD 鏡像 默認類型是format-l。學習
(1)首先建立一個format2類型的RBD鏡像,而後建立快照,保護快照,最後使用該快照建立一個COW副本。code
[root@node140 /]# rbd create rbd_copy1 --size 10240 --image-format 2 [root@node140 /]# rbd ls rbd_copy1
(2)建立該鏡像的快照orm
[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
blog
(4)複製快照須要父存儲池,RBD鏡像及快照的名稱。[root@node140 /]# rbd clone rbd/rbd_copy1@snap_for_clone rbd/rbd_copy2
虛擬機
(5)建立副本速度很是快,建立完成後,查看新鏡像的信息,發現他的父池、鏡像,以及快照的信息都會顯示出來。it
[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鏡像,基於其父鏡像的快照,但如今不是獨立的,還依賴於父鏡像,要不依賴於父鏡像,須要扁平化該鏡像,其中會從父鏡像的快照中複製數據到子鏡像中。扁平化過程所須要的時間域鏡像中的數據大小相同,扁平化事後無任何依賴,徹底獨立。ast
[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分佈式存儲學習指南》進行學習和實踐