Openstack Cinder Ceph(RBD)备份恢复过程(backup/restore)

转载:原文链接

概要:

本节我们讨论openstack cinder volume rbd驱动的 backup/restore操作。
Backup 是将 volume 备份到别的地方(备份设备),将来可以通过 restore 操作恢复。

Backup VS Snapshot
Backup 与 snapshot 都可以保存 volume 的当前状态,以备以后恢复。但二者在用途和实现上还是有区别的,具体表现在:

  • Snapshot 依赖于源 volume,不能独立存在;而 backup 不依赖源 volume,即便源 volume 不存在了,也可以 restore。
  • Snapshot 与源 volume 通常存放在一起,都由同一个 volume provider 管理;而 backup
    存放在独立的备份设备中,有自己的备份方案和实现,与 volume provider 没有关系。

上面两点决定了 backup 具有容灾功能;而 snapshot 则提供 volume provider 内便捷的回溯功能。

一 RBD增量备份以及恢复原理

1 创建云盘test_volume1, size=1G

()[root@busybox-openstack-5c687fdc9-mpwjd /]# rbd create volumes/test_volume1 --size 1G
()[root@busybox-openstack-5c687fdc9-mpwjd /]# rbd ls -l volumes
NAME         SIZE PARENT FMT PROT LOCK 
test_volume1 1GiB          2         

2 创建test_volume1快照t1和t2

()[root@busybox-openstack-5c687fdc9-mpwjd /]# rbd snap create volumes/test_volume1@test.snap.t1
()[root@busybox-openstack-5c687fdc9-mpwjd /]# rbd ls -l volumes
NAME                      SIZE PARENT FMT PROT LOCK 
test_volume1              1GiB          2           
test_volume1@test.snap.t1 1GiB          2           
()[root@busybox-openstack-5c687fdc9-mpwjd /]# rbd snap create volumes/test_volume1@test.snap.t2
()[root@busybox-openstack-5c687fdc9-mpwjd /]# rbd ls -l volumes
NAME                      SIZE PARENT FMT PROT LOCK 
test_volume1              1GiB          2           
test_volume1@test.snap.t1 1GiB          2           
test_volume1@test.snap.t2 1GiB          2           
()[root@busybox-openstack-5c687fdc9-mpwjd /]# 

3 创建增量diff

# diff from initial to t1
()[root@busybox-openstack-5c687fdc9-mpwjd /]# rbd export-diff volumes/test_volume1@test.snap.t1 diff_t1_between_initial
Exporting image: 100% complete...done.
# diff from initial to t2
()[root@busybox-openstack-5c687fdc9-mpwjd /]# rbd export-diff volumes/test_volume1@test.snap.t2 diff_t2_between_initial
Exporting image: 100% complete...done.
# diff from t1 to t2
()[root@busybox-openstack-5c687fdc9-mpwjd /]# rbd export-diff --from-snap test.snap.t1 volumes/test_volume1@test.snap.t2  diff_t1_between_t2
Exporting image: 100% complete...done.
()[root@busybox-openstack-5c687fdc9-mpwjd /]# ls -l |grep diff
-rw-r--r--     1 root root    39 Sep  4 10:52 diff_t1_between_initial
-rw-r--r--     1 root root    56 Sep  4 10:52 diff_t1_between_t2
-rw-r--r--     1 root root    39 Sep  4 10:52 diff_t2_between_initial

4 通过增量diff创建备份

()[root@busybox-openstack-5c687fdc9-mpwjd /]# rbd create backups/backup_image --size 1G
()[root@busybox-openstack-5c687fdc9-mpwjd /]# rbd ls -l backups
NAME         SIZE PARENT FMT PROT LOCK 
backup_image 1GiB          2    
# import diff from initial to t1
()[root@busybox-openstack-5c687fdc9-mpwjd /]# rbd import-diff diff_t1_between_initial backups/backup_image
Importing image diff: 100% complete...done.
()[root@busybox-openstack-5c687fdc9-mpwjd /]# rbd ls -l backups
NAME                      SIZE PARENT FMT PROT LOCK 
backup_image              1GiB          2           
backup_image@test.snap.t1 1GiB          2   
# import diff from t1 to t2
()[root@busybox-openstack-5c687fdc9-mpwjd /]# rbd import-diff diff_t1_between_t2 backups/backup_image
Importing image diff: 100% complete...done.
()[root@busybox-openstack-5c687fdc9-mpwjd /]# rbd ls -l backups
NAME                      SIZE PARENT FMT PROT LOCK 
backup_image              1GiB          2           
backup_image@test.snap.t1 1GiB          2           
backup_image@test.snap.t2 1GiB          2  

二 ceph备份时实现:

1. 创建云盘volume-id,大小为1G

()[root@busybox-openstack-f7bcf88-hgdkz /]# rbd create volumes/volume-id --size 1G
()[root@busybox-openstack-f7bcf88-hgdkz /]# rbd ls -l volumes |grep volume-id
volume-id         1GiB                          2           

2. 先尝试进行diff store, 创建backups中的base盘

()[root@busybox-openstack-f7bcf88-hgdkz /]# rbd create backups/volume-volume-id.backup.base --size 1G
()[root@busybox-openstack-f7bcf88-hgdkz /]# rbd ls -l backups
NAME                         SIZE PARENT FMT PROT LOCK 
volume-volume-id.backup.base 1GiB          2           

3. 创建volume-id快照1,命名规则如下

()[root@busybox-openstack-f7bcf88-hgdkz /]# rbd snap  create volumes/volume-id@backup.backup-id.snap.time1
()[root@busybox-openstack-f7bcf88-hgdkz /]# rbd ls -l volumes |grep volume-id
volume-id                                 1GiB                       2           
volume-id@backup.backup-id.snap.time1     1GiB                       2           

4. 导出云盘和快照1的差异1

()[root@busybox-openstack-f7bcf88-hgdkz /]# rbd export-diff volumes/volume-id@backup.backup-id.snap.time1 test_diff_snap_time1
Exporting image: 100% complete...done.
()[root@busybox-openstack-f7bcf88-hgdkz /]# ls
test_diff_snap_time1 

5. 将差异1导入到backups的base盘中,此时base盘生成了一个快照

()[root@busybox-openstack-f7bcf88-hgdkz /]# rbd import-diff test_diff_snap_time1 backups/volume-volume-id.backup.base
Importing image diff: 100% complete...done.
()[root@busybox-openstack-f7bcf88-hgdkz /]# rbd ls -l backups
NAME                                                     SIZE PARENT FMT PROT LOCK 
volume-volume-id.backup.base                             1GiB          2           
volume-volume-id.backup.base@backup.backup-id.snap.time1 1GiB          2           

6. 第二次做增量备份时, 创建volume-id新的快照2

()[root@busybox-openstack-f7bcf88-hgdkz /]# rbd snap  create volumes/volume-id@backup.backup-id2.snap.time2
()[root@busybox-openstack-f7bcf88-hgdkz /]# rbd ls -l backups
NAME                                                     SIZE PARENT FMT PROT LOCK 
volume-volume-id.backup.base                             1GiB          2           
volume-volume-id.backup.base@backup.backup-id.snap.time1 1GiB          2           
()[root@busybox-openstack-f7bcf88-hgdkz /]# rbd ls -l volumes |grep volume-id
volume-id                                                                                     1GiB                                                                                                        2           
volume-id@backup.backup-id.snap.time1                                                         1GiB                                                                                                        2           
volume-id@backup.backup-id2.snap.time2                                                        1GiB                                                                                                        2           

7. 导出快照1和快照2的差异2

()[root@busybox-openstack-f7bcf88-hgdkz /]# rbd export-diff --snap backup.backup-id.snap.time1 volumes/volume-id@backup.backup-id2.snap.time2 test_diff_snap_time1_time2
Exporting image: 100% complete...done.

8. 将差异2导入backups的base盘,此时base盘又生成了一个新的快照

()[root@busybox-openstack-f7bcf88-hgdkz /]# rbd import-diff test_diff_snap_time1_time2 backups/volume-volume-id.backup.base
Importing image diff: 100% complete...done.
()[root@busybox-openstack-f7bcf88-hgdkz /]# rbd ls -l backups
NAME                                                      SIZE PARENT FMT PROT LOCK 
volume-volume-id.backup.base                              1GiB          2           
volume-volume-id.backup.base@backup.backup-id.snap.time1  1GiB          2           
volume-volume-id.backup.base@backup.backup-id2.snap.time2 1GiB          2           

9. 删除volume-id的快照1

10. 如果diff store出现异常, 会通过full store来备份, 通过将云盘按照chunk=128M分片拷贝数据到新的云盘。

11. 备份元数据

三 RBD恢复备份的实现:

1 先检查是否满足diff restore, 需要满足下面条件

check can  diff restore:
1 base exist: backups/volume-volume-id.backup.base
2 restore point snapshot exist: backups/volume-volume-id.backup.base@backup.backup-id.snap.time1
3 volume file is rbd
4 backup[volume_id] !=  new volume_id
5 rbd volume has no extents (extend)

2. 如果满足diff restore条件, 先导出对应backup-id的差异

()[root@busybox-openstack-5c687fdc9-mpwjd /]# rbd export-diff  backups/volume-volume-id.backup.base@backup.backup-id1.snap.time1 test_diff_backup_id2
Exporting image: 100% complete...done.

3. 将对应backup-id的差异导入new-volume-id

()[root@busybox-openstack-5c687fdc9-mpwjd /]# rbd import-diff test_diff_backup_id2 volumes/new-volume-id
Importing image diff: 100% complete...done.
()[root@busybox-openstack-5c687fdc9-mpwjd /]# rbd ls -l volumes
NAME                                       SIZE PARENT FMT PROT LOCK 
new-volume-id                              1GiB          2           
new-volume-id@backup.backup-id1.snap.time1 1GiB          2           
volume-id                                  1GiB          2           
volume-id@backup.backup-id1.snap.time1     1GiB          2           

4. 如果new volume的大小与备份的大小不一致,导入差异后需要resize。

()[root@busybox-openstack-5c687fdc9-mpwjd /]# rbd create volumes/new-volume-id2 --size 2G
()[root@busybox-openstack-5c687fdc9-mpwjd /]# rbd import-diff test_diff_backup_id2 volumes/new-volume-id2
Importing image diff: 100% complete...done.
()[root@busybox-openstack-5c687fdc9-mpwjd /]# rbd ls -l volumes
NAME                                        SIZE PARENT FMT PROT LOCK 
new-volume-id                               1GiB          2           
new-volume-id@backup.backup-id1.snap.time1  1GiB          2           
new-volume-id2                              1GiB          2           
new-volume-id2@backup.backup-id1.snap.time1 1GiB          2           
volume-id                                   1GiB          2           
volume-id@backup.backup-id1.snap.time1      1GiB          2           
()[root@busybox-openstack-5c687fdc9-mpwjd /]# 
()[root@busybox-openstack-5c687fdc9-mpwjd /]# rbd resize volumes/new-volume-id2 --size 2G
Resizing image: 100% complete...done.
()[root@busybox-openstack-5c687fdc9-mpwjd /]# rbd ls -l volumes
NAME                                        SIZE PARENT FMT PROT LOCK 
new-volume-id                               1GiB          2           
new-volume-id@backup.backup-id1.snap.time1  1GiB          2           
new-volume-id2                              2GiB          2           
new-volume-id2@backup.backup-id1.snap.time1 1GiB          2           
volume-id                                   1GiB          2           
volume-id@backup.backup-id1.snap.time1      1GiB          2           

5. 如果不满足diff restore条件,或者在diff restore过程中出现异常,进行full restore, 通过将云盘按照chunk=128M分片拷贝数据到新的云盘。

6. 恢复元数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值