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做後端,在建立例項時,需要選擇一個系統盤,系統盤即是我們的目標資料盤。
備份實驗步驟:
- 建立虛機。
- 在時間點v1對虛機打快照。
- 匯出從開始建立image到快照v1那個時間點的差異資料,可以視為全量備份。
- 使用dd命令寫入檔案test.txt
- 在時間點v2對虛機打快照。
- 匯出從開始建立image到快照v2那個時間點的差異資料,可以視為全量備份。
- 匯出了從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做一個基礎快照,然後匯出這個快照的資料,然後設定每天定時做快照,匯出快照時間點之間的資料,這樣每天匯出來的就是一個增量的資料了。
設定迴圈週期,比如三天為一個週期。每三天迴圈一次,自動刪除三天前的備份。
恢復:
從第一個快照匯入,然後按照順序匯入增量的快照即可