1. 程式人生 > >ceph中rbd的增量備份和恢復

ceph中rbd的增量備份和恢復

ceph中rbd的增量備份和恢復

ceph的文件地址:Ceph Documentation

​ 在調研OpenStack中虛機的備份和恢復時,發現OpenStack和ceph緊密結合,使用ceph做OpenStack的後端簡直是不要太爽,於是調研了使用ceph中的塊裝置rbd來對虛機進行增量備份和恢復。以下是虛機備份和恢復的實驗步驟:

1. 前言:

​ 快照的功能一般是基於時間點做一個標記,然後在某些需要的時候,將狀態恢復到標記的那個點,這個有一個前提是底層的資料沒有破壞,舉個簡單的例子,Vmware 裡面對虛擬機器做了一個快照,然後做了一些系統的操作,想恢復快照,前提是儲存快照的儲存系統沒用破壞,一旦破壞了是無法恢復的。

​ ceph也有快照功能,同樣,在這裡的快照是用來儲存儲存系統上的狀態的,資料的快照能成功恢復的前提是儲存系統是好的,而一旦儲存系統壞了,快照同時會失效的,所以最好是能夠將資料備份下來。本篇部落格主要是調研使用ceph的rbd命令來對儲存裝置進行基於快照的增量備份。

2. ceph中rbd的常用命令:

2.1列出儲存池

ceph osd pool ls

2.2 檢視儲存池的內容

rbd ls --pool pool_name
例子
rbd ls --pool volumes

2.3 打快照

rbd snap create {pool-name}/{image-name}@{snap-name}
例如
rbd snap create volumes/volume-c18b9782-dc71-4ddc-bb7f-bc0037105ac3@v1

2.4 羅列快照

rbd snap ls {pool-name}/{image-name}
例如:
rbd snap ls volumes/volume-c18b9782-dc71-4ddc-bb7f-bc0037105ac3

2.5 建立image

rbd create --size {pool-name}/{image-name}

3. Nova例項的備份與恢復

以ceph做後端,在建立例項時,需要選擇一個系統盤,系統盤即是我們的目標資料盤。

備份實驗步驟:

  1. 建立虛機。
  2. 在時間點v1對虛機打快照。
  3. 匯出從開始建立image到快照v1那個時間點的差異資料,可以視為全量備份。
  4. 使用dd命令寫入檔案test.txt
  5. 在時間點v2對虛機打快照。
  6. 匯出從開始建立image到快照v2那個時間點的差異資料,可以視為全量備份。
  7. 匯出了從v1快照時間點到v2快照時間點的差異資料,可以視為增量備份。

上文實驗過程的資料:

v1時間點資料 + v1_v2之間資料 = v2 時間點資料

虛機的備份

1. 例項第一次快照:

rbd snap create volumes/volume-c18b9782-dc71-4ddc-bb7f-bc0037105ac3@v1

2. 第一次全量備份:

rbd export-diff volumes/volume-c18b9782-dc71-4ddc-bb7f-bc0037105ac3@v1 testimage_v1

這個命令是匯出了從開始建立image到快照v1那個時間點的差異資料匯出來了testimage_v1,匯出成本地檔案testimage_v1

3. 寫入檔案

dd

寫入檔案,以此顯示出v1和v2之間的資料變化,並沒有其他作用。

4. 例項第二次快照

rbd snap create volumes/volume-c18b9782-dc71-4ddc-bb7f-bc0037105ac3@v2

5. 第二次全量備份:

rbd export-diff volumes/volume-c18b9782-dc71-4ddc-bb7f-bc0037105ac3@v2  testimage_v2

這個命令是匯出了從開始建立image到快照v2那個時間點的差異資料匯出來了testimage_v2,匯出成本地檔案testimage_v2

6. 增量備份

增量備份(第二次和第一次的差異檔案):

rbd export-diff volumes/volume-c18b9782-dc71-4ddc-bb7f-bc0037105ac3@v2 --from-snap v1 testimage_v1_v2

這個命令是匯出了從v1快照時間點到v2快照時間點的差異資料,匯出成本地檔案testimage_v1_v2

注意:

rbd export-diff rbd/testimage testimage_now

這個是匯出了從image建立到當前的時間點的差異資料。

虛機恢復

虛機的恢復過程使用的是剛剛上面提到的備份到本地的那些檔案。

1.建立塊裝置映像

2.將testimage_v1融入塊裝置,恢復v1時間的狀態

3.將testimage_v2融入塊裝置,恢復v2時間狀態

4.在2基礎上將v1_v2融入塊裝置,恢復至v2時間狀態

上述實驗是全量恢復和增量恢復的兩種狀態。下文將詳細總結專案中增量備份和恢復的使用過程。

1. 建立塊裝置映像image

首先隨便建立一個image,名稱大小都不限制,因為後面恢復的時候會覆蓋掉大小的資訊

rbd create --size 2048 backups/testbacknew

2. 基於v2的時間點的快照做恢復

2.1 基於V2恢復

直接基於v2的時間點的快照做恢復

rbd import-diff testimage_v2 rbd/testbacknew
2.2 基於v1+ v1_v2資料恢復

直接基於v1的時間點的資料,和後面的增量的v1_v2資料(要按順序匯入)

rbd import-diff testimage_v1 backups/testbacknew
rbd import-diff testimage_v1_v2 backups/testbacknew

​ 實際專案當中就是,定期做快照,然後匯出某個時間點快照的資料,然後匯出增量的快照的資料,就可以了

4. 實際使用

​ 在實際專案中使用就是,定期做快照,然後匯出某個時間點快照的資料,然後匯出增量的快照的資料。

例如:

備份:

​ 對所有的rbd的image做一個基礎快照,然後匯出這個快照的資料,然後設定每天定時做快照,匯出快照時間點之間的資料,這樣每天匯出來的就是一個增量的資料了。

​ 設定迴圈週期,比如三天為一個週期。每三天迴圈一次,自動刪除三天前的備份。

恢復:

​ 從第一個快照匯入,然後按照順序匯入增量的快照即可