cinder-backup詳細介紹


首先介紹Snapshot

        snapshot可以為volume創建快照,快照中保存了volume當前的狀態,此后可以通過snapshot回溯

        主要采用了Copy On Write算法。進行快照時,不牽涉到任何檔案復制動作,它所作的只是通知服務器將目前有數據的磁盤區塊全部保留起來,不被覆寫。接下來檔案修改或任何新增、刪除動作,均不會覆寫原本數據所在的磁盤區塊,而是將修改部分寫入其它可用的磁盤區塊中。

        COW技術在很多場景都有應用,下圖為編程中創建子進程時采用COW技術的場景(思想一致):

只讀情況:

 

        針對上述場景,當父子進程中有更改相應段的行為發生時,再為子進程相應的段分配物理空間,如下:

寫情況:

        資源的復制只有在需要寫入的時候才進行,此前,是以只讀方式共享,使實際的拷貝被推遲到實際發生寫入的時候。

        再回到volume的snapshot中,根據上述其它場景的例子,此處的volume即對應上述的物理空間,而snapshot相當於指向虛擬空間的指針,是依賴於volume的,無法獨立存在。

Backup相關

        Backup與Snapshot區別

            1. snapshot依賴源volume,不能獨立存在;而backup不依賴vilume,即便源volume不存在了,仍可以restroe。

            2. snapsot與源volume通常存放在一起,由同一個volume provider管理;backup存放在獨立的備份設備中,有自己的備份方案和實現。

            3. backup具有容災功能;而snapshot則提供volume provider內便捷的回溯功能。

        分析backup創建流程

          以NFS為backend時:

            1. 啟動backup操作,mount NFS

            2. 創建volume的臨時快照

            3. 創建存放backup的container目錄

            4. 對臨時快照數據壓縮並保存到container目錄中

            5. 創建保存sha256(加密)文件和metadata文件

            6. 刪除臨時快照

          以LVM為backend時:

            1. 創建volume的臨時快照

            2. 創建一個設備new_lv

            3. 依據快照將數據從源卷拷貝到new_lv中

            4. 刪除臨時快照

          以ceph為backend時:

            1. 判斷源卷是否為RBD卷,如果源卷為RBD卷,則使用增量備份,否則使用全量備份。

Ceph作為backend

        按照cinder-volume所用的backend分兩種情況介紹:一種是使用非RBD作為backend,另一種是使用RBD作為backend。

        1. cinder-volume使用非RBD作為backend

       這種情況下比較簡單,並且僅支持全量備份。在創建備份時,首先創建一個base backup image,然后每次從源卷讀入chunk_size(即backup_ceph_chunk_size,默認是128MB)大小的數據,寫入到backup image,直到把整個源卷都復制完。注意,這里不支持對chunk的壓縮。因為volume上的數據都會寫入到創建的這個backup image上去,也就是說volume和backup是一對一的,因此也不需要metadata文件。

2. cinder-volume使用RBD作為backend

        在這種情況下,即cinder-volume和cinder-backup都是用rbd作為backend,是支持增量備份的。增量備份的實現完全依賴於ceph處理差量文件的特性,所謂ceph處理差量文件的能力,即ceph可以將某個rbd image不同時刻的狀態進行比較,並且將其差量導出成文件。另外,ceph也可以將這個差量文件導入到某個image中。

差量文件的生成與導入

        生成差量文件的三種方式


               三種方式對應命令及簡要描述:

rdb export-diff volumes/image1 diff1 image1創建時到此時的diff
rbd export-diff volumes/image1@snap1 diff2 image1創建時與snap1的diff
rbd export-diff volumes/image1-from-snap snap1 diff3

image1此時(snap2)與snap1的diff

        導入差量文件的三種方式(前提,先創建一個image2,然后將diff文件導入image2):

rbd import-diff diff1 volumes/image2 image2和生成diff1時的image1相同
rbd import-diff diff2 volumes/image2 image2和創建snap1時的image1相同
rbd import-diff diff3 volumes/image2 image2和創建snap1后(創建snap2時)的image1相同

備份的實現

        依據上述差量文件的生成與導入的操作特性實現備份,這里主要說明ceph增量備份的實現:

        

備份的恢復

    diff方式的恢復

        利用ceph的特性,首先找到第一次備份時創建的base image和所選備份的snapshot,利用上述第二種生成差量文件的方式生成diff文件,將diff文件導入到新的volume即完成volume恢復。

        1)獲取恢復備份的起點

        2)如果能則進行增量恢復

            這里進行增量恢復的條件如下

            a. 要恢復的卷必須是rbd

            b. 要恢復的卷必須沒有任何內容

            c. 備份卷必須存在

            d. 備份卷的恢復點(快照)必須存在

            e. 要恢復的卷和備份卷的源卷是不同的 

        3)如果不能,則進行全量恢復

    非diff方式的恢復

         全量恢復,每次從備份讀入chunk_size的數據,寫入到對應的volume中,直到復制完整個備份。沒有metadata文件,也不支持解壓。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM