CEPH-RBD备份/恢复/删除备份

CEPH-RBD备份/恢复/删除备份

1. 准备工作

1.1 创建POOL/镜像
[root@node210 ~]# ceph osd pool create rbd_pool 4 4
pool 'rbd_pool' created
[root@node210 ~]# rbd create rbd_pool/test --size 20G
[root@node210 ~]# rbd info rbd_pool/test
rbd image 'test':
        size 20 GiB in 5120 objects
        order 22 (4 MiB objects)
        id: 19220c6b8b4567
        block_name_prefix: rbd_data.19220c6b8b4567
        format: 2
        features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
        op_features:
        flags:
        create_timestamp: Thu Dec 16 03:01:46 2021
1.2 映射块存储并挂载
1.2.1 映射块存储
[root@node210 ~]# rbd map rbd_pool/test
rbd: sysfs write failed
RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable rbd_pool/test object-map fast-diff deep-flatten".
In some cases useful info is found in syslog - try "dmesg | tail".
rbd: map failed: (6) No such device or address

[root@node210 ~]# dmesg | tail
[1222570.672535] libceph: client1642406 fsid 7c9c2ba8-dcec-42b0-8231-a2149988b913
[1222570.682210] rbd: image rbd_store: image uses unsupported features: 0x38
[1223066.962766] libceph: mon0 192.168.20.210:8000 session established
[1223066.963118] libceph: client1665435 fsid 7c9c2ba8-dcec-42b0-8231-a2149988b913
[1223066.977187] rbd: rbd0: capacity 10737418240 features 0x1
[1223431.297527] EXT4-fs (rbd0): mounted filesystem with ordered data mode. Opts: (null)
[1224232.515655] rbd: image aa: image uses unsupported features: 0x38
[1225600.712265] libceph: mon0 192.168.20.210:8000 session established
[1225600.712899] libceph: client1669650 fsid 7c9c2ba8-dcec-42b0-8231-a2149988b913
[1225601.219616] rbd: image rest: image uses unsupported features: 0x38

# 错误原因:
# (1)使用 rbd create rbd_pool/rest --size 20G 创建镜像的时候,除了指定大小以外内有指定任何其他选项,所以format格式为2(默认就是2),features未指定默认开启了所有;虽然格式2支持的功能较多,但是低内核又不支持那么多,只能把其他的功能禁用掉使用
# (2)ceph服务器内核版本(cat /proc/version查看)为:Linux version 3.10.0-1160.el7.x86_64,经测试,内核版本3.10,仅支持此特性(layering),其它特性需要使用更高版本内核,或者从新编译内核加载特性模块才行;
# 解决方法:
# 创建遇难时指定features
[root@node210 ~]# rbd create rbd_pool/test --size 10G --image-feature  layering
[root@node210 ~]# rbd info rbd_pool/test
rbd image 'test':
        size 10 GiB in 2560 objects
        order 22 (4 MiB objects)
        id: 1928f66b8b4567
        block_name_prefix: rbd_data.1928f66b8b4567
        format: 2
        features: layering
        op_features:
        flags:
        create_timestamp: Thu Dec 16 03:19:09 2021
        
# 映射块存储
[root@node210 ~]# rbd map rbd_pool/test
/dev/rbd0
1.2.2 格式化块存储
[root@node210 ~]# mkfs.ext4 /dev/rbd0
mke2fs 1.42.9 (28-Dec-2013)
Discarding device blocks: done
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=1024 blocks, Stripe width=1024 blocks
655360 inodes, 2621440 blocks
131072 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2151677952
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
1.2.3 挂载块存储
# (1)创建挂载目录
[root@node210 ~]# mkdir /mnt/test
# 未挂载前存储
[root@node210 ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 3.9G     0  3.9G   0% /dev
tmpfs                    3.9G     0  3.9G   0% /dev/shm
tmpfs                    3.9G  394M  3.5G  11% /run
tmpfs                    3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/mapper/centos-root   44G  2.2G   42G   5% /
/dev/vda1               1014M  150M  865M  15% /boot
tmpfs                    3.9G   28K  3.9G   1% /var/lib/ceph/osd/ceph-0
tmpfs                    781M     0  781M   0% /run/user/0

# (2)挂载块存储
[root@node210 ~]# mount /dev/rbd0 /mnt/test

# 挂载后存储
[root@node210 ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 3.9G     0  3.9G   0% /dev
tmpfs                    3.9G     0  3.9G   0% /dev/shm
tmpfs                    3.9G  394M  3.5G  11% /run
tmpfs                    3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/mapper/centos-root   44G  2.2G   42G   5% /
/dev/vda1               1014M  150M  865M  15% /boot
tmpfs                    3.9G   28K  3.9G   1% /var/lib/ceph/osd/ceph-0
tmpfs                    781M     0  781M   0% /run/user/0
/dev/rbd0                9.8G   37M  9.2G   1% /mnt/test

2. 数据备份

在这里插入图片描述

2.1 快照创建

# 写入文件1
# 时间点v1创建快照1
[root@node210 ~]# rbd snap create rbd_pool/test@snap1
# 写入文件2
# 时间点v2创建快照2
[root@node210 ~]# rbd snap create rbd_pool/test@snap2
# 写入文件3
# 时间点v3创建快照3
[root@node210 ~]# rbd snap create rbd_pool/test@snap3
# 写入文件4
# 时间点v4创建快照4
[root@node210 ~]# rbd snap create rbd_pool/test@snap4
# 写入文件5
# 时间点v5创建快照5
[root@node210 ~]# rbd snap create rbd_pool/test@snap5
# 写入文件6
# 时间点v6创建快照6
[root@node210 ~]# rbd snap create rbd_pool/test@snap6

2.2 数据备份

rbd的数据备份是基于快照而来,通过创建快照,并导出差异数据,以实现增量备份和全量备份

2.2.1 全量备份
# 第一次全量备份
# 导出了创建快照v1那个时间点前的差异数据,导出成本地文件snapshot1
[root@node210 ~]# rbd export-diff rbd_pool/test@snap1 ./snap/snapshot1
Exporting image: 100% complete...done.

# 第二次全量备份
# 导出了创建快照v2那个时间点前的差异数据,导出成本地文件snapshot2
[root@node210 ~]# rbd export-diff rbd_pool/test@snap2 ./snap/snapshot2
Exporting image: 100% complete...done.

# 第三次全量备份
# 导出了创建快照v3那个时间点前的差异数据,导出成本地文件snapshot3
[root@node210 ~]# rbd export-diff rbd_pool/test@snap3 ./snap/snapshot3
Exporting image: 100% complete...done.

# 第四次全量备份
# 导出了创建快照v4那个时间点前的差异数据,导出成本地文件snapshot4
[root@node210 ~]# rbd export-diff rbd_pool/test@snap3 ./snap/snapshot4
Exporting image: 100% complete...done.
2.2.2 增量备份
# 导出了从创建快照v4到创建快照v5时间点间的差异数据,导出成本地文件snapshot4_5
[root@node210 ~]# rbd export-diff rbd_pool/test@snap5 --from-snap snap4 ./snap/snapshot4_5
Exporting image: 100% complete...done.
# 此时应该有 snap4时间点数据 + snap4_snap5之间数据 = snap5时间点数据

# 导出了从创建快照v5到创建快照v6时间点间的差异数据,导出成本地文件snapshot5_6
[root@node210 ~]# rbd export-diff rbd_pool/test@snap6 --from-snap snap5 ./snap/snapshot5_6
Exporting image: 100% complete...done.
# 此时应该有 snap5时间点数据 + snap5_snap6之间数据 = snap6时间点数据
2.2.3 导出此刻差异数据
# 导出了从image创建到当前的时间点的差异数据
[root@node210 ~]# rbd export-diff rbd_pool/test testimage_now

3 数据恢复

在这里插入图片描述

3.1 新增空盘方式恢复数据

通过创建空盘,将备份的数据直接写入进该空盘当中以实现数据恢复。

注意事项:

# 新增空盘恢复数据满足以下条件:
# (1) 保证需要恢复的数据已从ceph存储池中导出,或备份数据所在的云盘及快照均还存在(用以导出数据);
# (2) 新的空盘属于rbd类型;当新建的空盘和备份的数据所属统一存储池时,保证存储池的id不一致
# (3) 新的rbd类型空盘没有扩展数据块(扩展)
3.1.1 创建新盘
[root@node210 ~]# rbd create rbd_pool/backup --size 10G --image-feature layering
3.1.2 全量备份数据恢复
# 将上述第二次全量备份的数据./snap/snapshot3,写入至新建的空盘当中
[root@node210 ~]# rbd import-diff ./snap/snapshot3 rbd_pool/backup
Importing image diff: 100% complete...done.

[root@node210 ~]# rbd snap ls rbd_pool/backup
SNAPID NAME    SIZE TIMESTAMP
     7 snap3 10 GiB Mon Dec 20 01:07:51 2021
3.1.3 增量备份数据恢复
# 将上述第增量备份的数据./snap/snapshot4_5,写入至新建的空盘当中
[root@node210 ~]# rbd import-diff ./snap/snapshot4_5 rbd_pool/backup
Importing image diff: 100% complete...done.

[root@node210 ~]# rbd snap ls rbd_pool/backup
SNAPID NAME    SIZE TIMESTAMP
     7 snap4 10 GiB Mon Dec 20 01:07:51 2021
     8 snap5 10 GiB Mon Dec 20 01:19:43 2021

# 此时实际恢复到了创建快照5的时间节点5
3.1.4 清除快照

注意:

# 使用rbd import-diff 导入由快照产生的备份数据的时候,会产生出快照,此处应删除
[root@node210 ~]# rbd snap purge rbd_pool/backup
Removing all snapshots: 100% complete...done.

3.2 覆盖方式恢复数据

备注:

# 通过清空备份数据所在的云盘,将备份的数据直接写入清空后的盘中以实现数据恢复,但是此方式会使原云盘中的快照不可使用

注意事项:

# 新增空盘恢复数据满足以下条件:
# (1) 保证需要恢复的数据已从ceph存储池中导出,或备份数据所在的云盘及快照均还存在(用以导出数据);
# (2) 此处覆盖方式进行回复数据,实则是删除原有云盘,新建与之前名称大小及类型一致的空盘,再进行数据恢复,这就导致原有云盘的快照不可再使用。
3.2.1 清空盘
# 此处清空盘,采用的是删除原有盘,新建与之前名称大小及类型一致的空盘
#(1)清除快照(快照若有保护,则需先取消保护)
[root@node210 ~]# rbd snap purge rbd_pool/test
Removing all snapshots: 100% complete...done.

#(2)删除原始云盘
[root@node210 ~]# rbd rm rbd_pool/test
Removing image: 100% complete...done.

#(3)新建与之前名称大小及类型一致的空盘
[root@node210 ~]# rbd create rbd_pool/test --size 10G --image-feature layering
3.2.2 全量备份数据恢复
# 将上述第二次全量备份的数据./snap/snapshot3,写入原始云盘当中
[root@node210 ~]# rbd import-diff ./snap/snapshot2 rbd_pool/test
Importing image diff: 100% complete...done.

[root@node210 ~]# rbd snap ls rbd_pool/test
SNAPID NAME    SIZE TIMESTAMP
     7 snap3 10 GiB Mon Dec 20 01:07:51 2021
3.2.3 增量备份数据恢复
# 将上述第增量备份的数据./snap/snapshot4_5,写入至新建的空盘当中
[root@node210 ~]# rbd import-diff ./snap/snapshot4_5 rbd_pool/test
Importing image diff: 100% complete...done.

[root@node210 ~]# rbd snap ls rbd_pool/test
SNAPID NAME    SIZE TIMESTAMP
     7 snap4 10 GiB Mon Dec 20 01:07:51 2021
     8 snap5 10 GiB Mon Dec 20 01:19:43 2021

# 此时实际恢复到了创建快照5的时间节点5
3.2.4 清除快照

注意:

# 使用rbd import-diff 导入由快照产生的备份数据的时候,会产生出快照,此处应删除
[root@node210 ~]# rbd snap purge rbd_pool/test
Removing all snapshots: 100% complete...done.

4 删除备份

4.1 merger-diff操作

4.1.1 merger-diff作用
# Merge two diff exports together,将导出的两个差异合并成新的差异
4.1.2 merger-diff使用
# 语法说明
#(1)diff-path1和diff-path2均为导出的差异数据,
#(2)其中diff-path1可以为全量导出的差异数据和增量导出的差异数据,diff-path2则必须为增量导出的差异数据,且第一个差异的结束快照时间点,必须与第二个差异的开始快照时间点相等。
rbd merge-diff diff-path1 diff-path2 path
4.1.3 merger-diff实际操作

merger-diff操作可以分成两种情况,

  • 其一:diff-path1导出的为全量差异数据,diff-path2导出的为增量差异数据,

  • 其二:diff-path1导出的为增量差异数据,diff-path2导出的为增量差异数据,

4.1.3.1 diff-path1为增量差异
# 准备工作
#(1)创建三个快照
[root@node210 ~]# rbd snap create rbd_pool/test@v1
[root@node210 ~]# rbd snap create rbd_pool/test@v2
[root@node210 ~]# rbd snap create rbd_pool/test@v3

#(2)创建备份
# 创建增量备份:diff-path1
[root@node210 ~]# rbd export-diff rbd_pool/test@v2 --from-snap v1 ./snap/v2-diff
Exporting image: 100% complete...done.
# 创建增量备份:diff-path2
[root@node210 ~]# rbd export-diff rbd_pool/test@v3 --from-snap v2 ./snap/v3-diff
Exporting image: 100% complete...done.

# 实际操作
#(3)merger-diff操作
# 将快照v1到v2间导出的增量差异备份v2-diff,与快照v2到v3间导出的增量差异备份v3-diff合并至差异v4
[root@node210 ~]# rbd merge-diff ./snap/v2-diff ./snap/v3-diff ./snap/v4
Merging image diff: 100% complete...done.

#(4)将合并后差异v4重命名为v3-diff
# 此处为避免直接重命名(v4覆盖v3-diff的内容)产生的错误,选择先删除v3-diff,再将v4重命名为v3-diff
[root@node210 ~]# rm -rf ./snap/v3-diff
[root@node210 ~]# mv ./snap/v4 ./snap/v3-diff

#(5)删除快照v2和快照v1到v2间的增量差异备份v2-diff
# 删除合并的两个差异中间的快照
[root@node210 ~]# rbd snap rm rbd_pool/test@v2
Removing snap: 100% complete...done.
# 删除快照v1到v2间的增量差异备份v2-diff
[root@node210 ~]# rm -rf ./snap/v2-diff

4.1.3.2 diff-path1为全量差异
#(1)创建二个快照
[root@node210 ~]# rbd snap create rbd_pool/test@v4
[root@node210 ~]# rbd snap create rbd_pool/test@v5

#(2)创建备份
# 创建全量备份:diff-path1
[root@node210 ~]# rbd export-diff rbd_pool/test@v4 ./snap/v4
Exporting image: 100% complete...done.
# 创建增量备份:diff-path2
[root@node210 ~]# rbd export-diff rbd_pool/test@v5 --from-snap v4 ./snap/v5-diff
Exporting image: 100% complete...done.

# 实际操作
#(3)merger-diff操作
# 将快照v4导出的全量差异备份v4,与快照v4到v5间导出的增量差异备份v5-diff合并至差异v5
[root@node210 ~]# rbd merge-diff ./snap/v4 ./snap/v5-diff ./snap/v5
Merging image diff: 100% complete...done.

#(4)将合并后差异v5重命名为v5-diff
# 此处为避免直接重命名(v5覆盖v5-diff的内容)产生的错误,选择先删除v5-diff,再将v5重命名为v5-diff
[root@node210 ~]# rm -rf ./snap/v5-diff
[root@node210 ~]# mv ./snap/v5 ./snap/v5-diff

#(5)删除快照v4
[root@node210 ~]# rbd snap rm rbd_pool/test@v4
Removing snap: 100% complete...done.

#(6)删除快照v4的备份
[root@node210 ~]# rbd -rf ./snap/v4

4.2 删除备份

rbd备份的删除,需取决于快照有没有被引用(在后续有无被作为增量备份使用)。

  • 若没有被引用,则在删除备份的时候,直接删除对应的快照和备份文件即可。
  • 若被作为增量备份使用,则涉及到合并差异,删除对应快照和增量备份文件等。
4.2.1 快照没有被引用

此处以上述快照snap3作为示例,由于snap4被作为全量备份导出,那么可以看出snap3后面并没有被引用(即没有被作为增量备份使用)。所以删除snap3处备份操作如下:

#(1)删除备份文件
[root@node210 ~]# rm -rf ./snap/snapshot3
#(2)删除对应快照
[root@node210 ~]# rbd snap rm rbd_pool/test@snap3
4.2.2 快照被引用

备注:

# 此处rbd merge-diff操作采取的为:
# diff-path1导出的为全量差异数据,diff-path2导出的为增量差异数据

此处以上述快照snap4,snap5作为示例,由于snap5被作为增量备份导出,那么可以看出snap4在后面被引用(即作为增量备份使用)。所以删除snap4处备份操作如下:

#(1)差异数据合并
# 将snap4导出的差异数据snapshot4,与snap5导出的增量备份snapshot4_5
[root@node210 ~]# rbd merge-diff ./snap/snapshot4 ./snap/snapshot4_5 ./snap/new_snapshot4_5
Merging image diff: 100% complete...done.

#(2)删除快照snap4
[root@node210 ~]# rbd snap rm rbd_pool/test@snap4
Removing snap: 100% complete...done.

#(3)删除快照snap4到snap5间的增量差异snapshot4_5 
[root@node210 ~]# rm -rf ./snap/snapshot4_5

#(4)删除快照snap4全量备份snapshot4
[root@node210 ~]# rm -rf ./snap/snapshot4

#(5)将合并后差异new_snapshot4_5重命名为snapshot4_5
[root@node210 ~]# mv ./snap/new_snapshot4_5 ./snap/snapshot4_5 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值