导航

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 导入由快照产生的备份数据的时候,会产生出快照,此处应删除

1

[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 导入由快照产生的备份数据的时候,会产生出快照,此处应删除

1

[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

————————————————

版权声明:本文为CSDN博主「tmccmt」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/weixin_44856211/article/details/122040674

posted on 2022-05-06 11:16  a-yong  阅读(1000)  评论(0编辑  收藏  举报