09 RDB 高级功能

RDB 回收机制

ceph RBD 默认提供回收站机制 trash,也就是我们可以把块数据放在回收站,在回收站中保持一定的存储周期,当我们后期还需要使用的时候可以在回收站在拿回来。

同样,在公有云也有硬盘的回收站,作用和 RBD 回收站类似,当我们后不确定是否后期还会使用,回收站会为我们保留一定时间的周期

到期 7 天后仍未续费的云硬盘,会在回收站中保留 7 天,这期间您可以续费进行恢复。7 天后,这些云硬盘会被彻底释放,不可恢复。

回收站有两个好处

  • 可以有效的防止误删除操作 (正常情况下数据就会销毁掉了,但是有了回收站,数据是存放在回收站中)
  • 还有一种情况多发生的云存储中,例如我们的服务器忘记续费,过期后默认情况下是直接被释放了,但是有了回收站,数据就会在回收站在为我们保留一段时间

RDB 直接删除

# 新建一个 RDB 块
[root@node0 ceph-deploy]# rbd create ceph-demo/ceph-trash.img --size 10G

# 查看 RDB 块信息
[root@node0 ceph-deploy]# rbd info ceph-demo/ceph-trash.img
rbd image 'ceph-trash.img':
        size 10 GiB in 2560 objects
        order 22 (4 MiB objects)
        snapshot_count: 0
        id: 14ba472ea35d9
        block_name_prefix: rbd_data.14ba472ea35d9
        format: 2
        features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
        op_features: 
        flags: 
        create_timestamp: Tue Nov  1 17:04:06 2022
        access_timestamp: Tue Nov  1 17:04:06 2022
        modify_timestamp: Tue Nov  1 17:04:06 2022

# 查看 RDB 信息
[root@node0 ceph-deploy]# rbd -p ceph-demo ls
ceph-trash.img  # 新创建的 RDB 快
crush-demo.img
rdb-demo.img

# 直接删除 RDB 块
[root@node0 ceph-deploy]# rbd rm ceph-demo/ceph-trash.img
Removing image: 100% complete...done.

# 查看 RDB 信息,没有 ceph-trash.img 块信息
[root@node0 ceph-deploy]# rbd -p ceph-demo ls
crush-demo.img
rdb-demo.img

# 查看 RDB 回收站信息,无数据
[root@node0 ceph-deploy]# rbd -p ceph-demo trash ls

RDB 放入回收站

# 新建一个 RDB 块
[root@node0 ceph-deploy]# rbd create ceph-demo/ceph-trash.img --size 10G

# 查看 rbd trash move 命令帮助信息
[root@node0 ceph-deploy]# rbd help trash move 
usage: rbd trash move [--pool <pool>] [--namespace <namespace>] 
                      [--image <image>] [--expires-at <expires-at>] 
                      <image-spec> 

Move an image to the trash.

Positional arguments
  <image-spec>            image specification
                          (example: [<pool-name>/[<namespace>/]]<image-name>)

Optional arguments
  -p [ --pool ] arg       pool name
  --namespace arg         namespace name
  --image arg             image name
  --expires-at arg (=now) set the expiration time of an image so it can be
                          purged when it is stale

# RDB 放入回收站,并设置过期时间 20221103
[root@node0 ceph-deploy]# rbd trash move ceph-demo/ceph-trash.img --expires-at 20221103

# 查看 RDB 信息
[root@node0 ceph-deploy]# rbd -p ceph-demo ls
crush-demo.img
rdb-demo.img

# 查看 RDB 回收站信息
[root@node0 ceph-deploy]# rbd -p ceph-demo trash ls
14bdab3117858 ceph-trash.img

RDB 数据还原

# 查看 RDB 回收站信息
[root@node0 ceph-deploy]# rbd -p ceph-demo trash ls
14bdab3117858 ceph-trash.img

# 查看 rbd trash restore 命令帮助信息
[root@node0 ceph-deploy]# rbd help trash restore
usage: rbd trash restore [--pool <pool>] [--namespace <namespace>] 
                         [--image-id <image-id>] [--image <image>] 
                         <image-id> 

Restore an image from trash.

Positional arguments
  <image-id>           image id
                       (example: [<pool-name>/]<image-id>)

Optional arguments
  -p [ --pool ] arg    pool name
  --namespace arg      namespace name
  --image-id arg       image id
  --image arg          image name

# 从回收站还原数据信息
[root@node0 ceph-deploy]# rbd trash restore -p ceph-demo 14bdab3117858

# 查看 RDB 信息
[root@node0 ceph-deploy]# rbd -p ceph-demo ls
ceph-trash.img  # 数据已还原
crush-demo.img
rdb-demo.img

RDB 镜像制作快照

和云硬盘一样,RBD 也是支持快照的功能,对某个时刻的 RBD 文件进行保留生成快照。

RBD 是块存储基于文件系统上的,我们在生成快照时需要确保文件系统正常。否则生成的快照也出现损坏

制作快照准备

# 新建一个 RDB 块
[root@node0 ceph-deploy]# rbd create ceph-demo/rbd-test.img --image-feature layering --size 10G

# 查看 RDB 信息
[root@node0 ceph-deploy]# rbd -p ceph-demo ls
ceph-trash.img
crush-demo.img
rbd-test.img    # 新建 RDB 块
rdb-demo.img

# 查看 RDB 块信息
[root@node0 ceph-deploy]# rbd info ceph-demo/rbd-test.img
rbd image 'rbd-test.img':
        size 10 GiB in 2560 objects
        order 22 (4 MiB objects)
        snapshot_count: 0
        id: 14c288be2e51
        block_name_prefix: rbd_data.14c288be2e51
        format: 2
        features: layering
        op_features: 
        flags: 
        create_timestamp: Tue Nov  1 17:25:26 2022
        access_timestamp: Tue Nov  1 17:25:26 2022
        modify_timestamp: Tue Nov  1 17:25:26 2022

# 挂载 RDB 块信息
[root@node0 ceph-deploy]# rbd device map ceph-demo/rbd-test.img
/dev/rbd0

# 初始化块设备
[root@node0 ceph-deploy]# 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 

# 挂载磁盘到 media 目录
[root@node0 ceph-deploy]# mount /dev/rbd0 /media/

# 新建测试文件测试
[root@node0 ceph-deploy]# cd /media/
[root@node0 media]# ls
lost+found

[root@node0 media]# echo "evescn" > test.txt
[root@node0 media]# ls
lost+found  test.txt

[root@node0 media]# cat test.txt 
evescn

# 同步信息到磁盘
[root@node0 media]# sync

制作快照

# 制作快照
[root@node0 media]# rbd snap create ceph-demo/rbd-test.img@snap_20221101

# 查看快照
[root@node0 media]# rbd snap ls ceph-demo/rbd-test.img
SNAPID NAME          SIZE   PROTECTED TIMESTAMP                
     4 snap_20221101 10 GiB           Tue Nov  1 17:30:18 2022

RDB 快照数据恢复

当我们做好备份后,后续有需求需要回滚。 可以通过下面的命令进行回滚操作。

将 rbd 文件恢复到之前创建好快照的位置

删除数据

[root@node0 media]# rm -f test.txt 
[root@node0 media]# ls
lost+found

快照恢复

建议恢复快照的时候,停止对磁盘访问,比如关闭服务器或者临时卸载 RDB 磁盘

# 使用快照回滚
[root@node0 media]# rbd snap rollback ceph-demo/rbd-test.img@snap_20221101
Rolling back to snapshot: 100% complete...done.

# 回滚后发现文件没有恢复,此时需要重新挂载下 磁盘信息,建议使用快照恢复时,先卸载 RDB 磁盘
[root@node0 media]# ls
lost+found

# 重新挂载磁盘
[root@node0 ceph-deploy]# umount /media
[root@node0 ceph-deploy]# rbd device ls
id pool      namespace image        snap device    
0  ceph-demo           rbd-test.img -    /dev/rbd0 
[root@node0 ceph-deploy]# mount /dev/rbd0 /media/

# 再次验证信息,test.txt 文件已恢复,文件内容 OK
[root@node0 ceph-deploy]# cd /media/
[root@node0 media]# ls
lost+found  test.txt
[root@node0 media]# cat test.txt 
evescn

删除快照命令

# 格式和创建的格式相同,命令替换为remove (相当于rm)  
[root@node0 media]# rbd snap remove ceph-demo/rbd-test.img@snap_20221101
Removing snap: 100% complete...done.

[root@node0 media]# rbd snap ls ceph-demo/rbd-test.img

# 如果镜像没有在使用了,可以通过purge直接删除所有快照  
[root@node0 media]# rbd snap purge ceph-demo/rbd-test.img  
Removing all snapshots: 100% complete...done.  

[root@node0 media]# rbd snap ls ceph-demo/rbd-test.img

RDB 镜像克隆机制

Ceph 支持为块设备快照创建许多写时复制 COW 克隆。快照分层使 Ceph 块设备客户端能够非常快速的创建映射。例如,我们创建一个块设备镜像,其中写入一个 Linux;然后对镜像进行快照、保护快照并创建写时克隆。快照是只读的,写入将写入到新的位置--进行快速克隆

  • 完整克隆
  • 快速克隆 (快速克隆使用的就是写时复制)

每个克隆镜像子级存储对父级镜像为引用作用,子级会读取父级别的数据

parent 代表镜像父级

Child 代表克隆的子级

COW 克隆和 Ceph 块设备完全相同,可以进行读取、写入和调整镜像大小。克隆镜像没用特殊限制。但是,写时复制克隆是指快照,因此必须在克隆快照之前对其保护

Ceph 目前只支持 format 2 镜像的克隆,内核 rbd create --image-format 2 还不支持。rbd 因此必须使用 QEMU/KVM 或者 librbd 直接访问版本中的克隆

RBD 分层概念

Ceph 块设备分层是一个简单的过程,首先我们必须创建镜像的快照,并且需要保护快照,保护完成就可以开始克隆快照

克隆的镜像有对父快照的引用,包括池 ID、镜像 ID 和快照 ID。

1.镜像模板: 块设备分层的一个常见用例是创建一个主镜像和一个用做克隆模板的快照。

2.扩展模板: 提供比基础镜像更多的信息,例如用户可以克隆镜像并按照其他软件,然后对扩展镜像进行快照,该扩展镜像本身可以更新就像基本镜像一样

3.模板池: 使用块设备分层的一个方法是创建一个 pool,其中包含充当模板的主镜像以及这些模板的快照。然后可以将只读权限扩展到用户,以便可以直接克隆快照,但是无法在池中写入和执行

4.镜像迁移/恢复: 使用块设备分层的一个方法是将数据从一个 pool 迁移或者恢复到另一个 pool 中

RBD 创建快照

[root@node0 media]# rbd snap create ceph-demo/rbd-test.img@template
[root@node0 media]# rbd snap ls ceph-demo/rbd-test.img
SNAPID NAME     SIZE   PROTECTED TIMESTAMP                
     6 template 10 GiB           Tue Nov  1 18:01:18 2022 

快照保护

如果用户不小心删除了父快照,所有的克隆都会终端。为了防止克隆的镜像丢失,必须保护快照才可以进行克隆

# protect 创建快照保护
[root@node0 media]# rbd snap protect ceph-demo/rbd-test.img@template

# rm 删除快照,测试是否可以正常删除
[root@node0 media]# rbd snap rm ceph-demo/rbd-test.img@template
Removing snap: 2022-11-01 18:02:35.581 7fe062d42c80 -1 librbd::Operations: snapshot is protected
0% complete...failed.
rbd: snapshot 'template' is protected from removal.

取消保护,如果我们想取消保护,可以通过 unprotect 参数

[root@node0 media]# rbd snap unprotect ceph-demo/xxx.img@template  

快照 clone

# 快速创建3个 clone 磁盘
[root@node0 media]# rbd clone ceph-demo/rbd-test.img@template ceph-demo/vm1-clone.img
[root@node0 media]# rbd clone ceph-demo/rbd-test.img@template ceph-demo/vm2-clone.img
[root@node0 media]# rbd clone ceph-demo/rbd-test.img@template ceph-demo/vm3-clone.img

# 查看 RDB 信息
[root@node0 media]# rbd -p ceph-demo ls
ceph-trash.img
crush-demo.img
rbd-test.img
rdb-demo.img
vm1-clone.img
vm2-clone.img
vm3-clone.img

# 查看 vm1-clone.img 块信息
[root@node0 media]# rbd -p ceph-demo info vm1-clone.img
rbd image 'vm1-clone.img':
        size 10 GiB in 2560 objects
        order 22 (4 MiB objects)
        snapshot_count: 0
        id: 14cc7fa778cf7
        block_name_prefix: rbd_data.14cc7fa778cf7
        format: 2
        features: layering
        op_features: 
        flags: 
        create_timestamp: Tue Nov  1 18:03:55 2022
        access_timestamp: Tue Nov  1 18:03:55 2022
        modify_timestamp: Tue Nov  1 18:03:55 2022
        parent: ceph-demo/rbd-test.img@template     # 父镜像
        overlap: 10 GiB

挂载 clone 的 RDB 磁盘查看数据信息

# 挂载磁盘
[root@node0 media]# rbd device map ceph-demo/vm1-clone.img
/dev/rbd1
[root@node0 media]# mount /dev/rbd1 /mnt

# 查看磁盘信息
[root@node0 media]# cd /mnt/
[root@node0 mnt]# ls
lost+found  test.txt
[root@node0 mnt]# cat test.txt 
evescn

RDB 解除依赖关系

解除 clone 出来的镜像和 template 镜像的依赖关系,删除 temp 模板镜像后也不影响 clone 出来的镜像使用

使用 flatten 取消依赖关系,抽离了依赖关系后,clone 的镜像就是独立的镜像,但会占用更多的空间

查看快照下面创建的镜像

# 查看 快照 clone 出来的 RDB 磁盘信息
[root@node0 mnt]# rbd -h | grep chil
    children                          Display children of an image or its
    clone                             Clone a snapshot into a CoW child image.

# 查看 children 命令帮助
[root@node0 mnt]# rbd help children
usage: rbd children [--pool <pool>] [--namespace <namespace>] 
                    [--image <image>] [--snap <snap>] [--snap-id <snap-id>] 
                    [--all] [--descendants] [--format <format>] 
                    [--pretty-format] 
                    <image-or-snap-spec> 

Display children of an image or its snapshot.

Positional arguments
  <image-or-snap-spec>  image or snapshot specification
                        (example:
                        [<pool-name>/[<namespace>/]]<image-name>[@<snap-name>])

Optional arguments
  -p [ --pool ] arg     pool name
  --namespace arg       namespace name
  --image arg           image name
  --snap arg            snapshot name
  --snap-id arg         snapshot id
  -a [ --all ]          list all children (include trash)
  --descendants         include all descendants
  --format arg          output format (plain, json, or xml) [default: plain]
  --pretty-format       pretty formatting (json and xml)

# 查看 ceph-demo/rbd-test.img@template clone 出来的 RDB 磁盘
[root@node0 mnt]# rbd children ceph-demo/rbd-test.img@template
ceph-demo/vm1-clone.img
ceph-demo/vm2-clone.img
ceph-demo/vm3-clone.img

解除快照和镜像的绑定关系

# 查看解除绑定命令帮助
[root@node0 mnt]# rbd help flatten
usage: rbd flatten [--pool <pool>] [--namespace <namespace>] [--image <image>] 
                   [--no-progress] 
                   <image-spec> 

Fill clone with parent data (make it independent).

Positional arguments
  <image-spec>         image specification
                       (example: [<pool-name>/[<namespace>/]]<image-name>)

Optional arguments
  -p [ --pool ] arg    pool name
  --namespace arg      namespace name
  --image arg          image name
  --no-progress        disable progress output

# 解除 ceph-demo/vm1-clone.img 和 ceph-demo/rbd-test.img@template 的依赖
[root@node0 mnt]# rbd flatten ceph-demo/vm1-clone.img
Image flatten: 100% complete...done.

# 查看信息,已经没有 parent 信息
[root@node0 mnt]# rbd info ceph-demo/vm1-clone.img
rbd image 'vm1-clone.img':
        size 10 GiB in 2560 objects
        order 22 (4 MiB objects)
        snapshot_count: 0
        id: 14cc7fa778cf7
        block_name_prefix: rbd_data.14cc7fa778cf7
        format: 2
        features: layering
        op_features: 
        flags: 
        create_timestamp: Tue Nov  1 18:03:55 2022
        access_timestamp: Tue Nov  1 18:03:55 2022
        modify_timestamp: Tue Nov  1 18:03:55 2022

# 解除 ceph-demo/vm2-clone.img 和 ceph-demo/rbd-test.img@template 的依赖
[root@node0 mnt]# rbd flatten ceph-demo/vm2-clone.img
Image flatten: 100% complete...done.
[root@node0 mnt]# rbd info ceph-demo/vm2-clone.img
rbd image 'vm2-clone.img':
        size 10 GiB in 2560 objects
        order 22 (4 MiB objects)
        snapshot_count: 0
        id: 14cd0bdcdf111
        block_name_prefix: rbd_data.14cd0bdcdf111
        format: 2
        features: layering
        op_features: 
        flags: 
        create_timestamp: Tue Nov  1 18:04:02 2022
        access_timestamp: Tue Nov  1 18:04:02 2022
        modify_timestamp: Tue Nov  1 18:04:02 2022

# 不解除 ceph-demo/vm3-clone.img 的依赖,查看信息
[root@node0 mnt]# rbd info ceph-demo/vm3-clone.img
rbd image 'vm3-clone.img':
        size 10 GiB in 2560 objects
        order 22 (4 MiB objects)
        snapshot_count: 0
        id: 14cd9c67305e7
        block_name_prefix: rbd_data.14cd9c67305e7
        format: 2
        features: layering
        op_features: 
        flags: 
        create_timestamp: Tue Nov  1 18:04:05 2022
        access_timestamp: Tue Nov  1 18:04:05 2022
        modify_timestamp: Tue Nov  1 18:04:05 2022
        parent: ceph-demo/rbd-test.img@template     # RDB 磁盘关联的依赖父快照信息
        overlap: 10 GiB

删除模版快照

# 解除 ceph-demo/vm3-clone.img 和 ceph-demo/rbd-test.img@template 的依赖
[root@node0 mnt]# rbd flatten ceph-demo/vm3-clone.img
Image flatten: 100% complete...done.

# 取消 ceph-demo/rbd-test.img@template 快照的保护标记
[root@node0 mnt]# rbd snap unprotect ceph-demo/rbd-test.img@template

# 删除模版快照
[root@node0 mnt]# rbd snap rm ceph-demo/rbd-test.img@template
Removing snap: 100% complete...done.

# 查看 RDB DEVICE 映射信息
[root@node0 mnt]# rbd device ls
id pool      namespace image         snap device    
0  ceph-demo           rbd-test.img  -    /dev/rbd0 
1  ceph-demo           vm1-clone.img -    /dev/rbd1 

# 查看 RDB 信息
[root@node0 mnt]# rbd -p ceph-demo ls
ceph-trash.img
crush-demo.img
rbd-test.img
rdb-demo.img
vm1-clone.img
vm2-clone.img
vm3-clone.img

RDB 备份与恢复

RBD 备份分为两种,一种是全备,另外一个是增量备份

防止 ceph 集群坏掉,快照都无法正常使用的情况出现,需要离线备份,异地备份等

用于数据恢复或者数据迁移等场景

RDB 创建快照

[root@node0 ceph-deploy]# rbd snap create ceph-demo/rbd-test.img@snap-demo
[root@node0 ceph-deploy]# rbd snap ls ceph-demo/rbd-test.img
SNAPID NAME      SIZE   PROTECTED TIMESTAMP                
     8 snap-demo 10 GiB           Wed Nov  2 09:57:25 2022 

RDB 数据备份

# 查看 export 导出数据命令帮助
[root@node0 ceph-deploy]# rbd help export
usage: rbd export [--pool <pool>] [--namespace <namespace>] [--image <image>] 
                  [--snap <snap>] [--path <path>] [--no-progress] 
                  [--export-format <export-format>] 
                  <source-image-or-snap-spec> <path-name> 

Export image to file.

Positional arguments
  <source-image-or-snap-spec>  source image or snapshot specification
                               (example:
                               [<pool-name>/[<namespace>/]]<image-name>[@<snap-n
                               ame>])
  <path-name>                  export file (or '-' for stdout)

Optional arguments
  -p [ --pool ] arg            source pool name
  --namespace arg              source namespace name
  --image arg                  source image name
  --snap arg                   source snapshot name
  --path arg                   export file (or '-' for stdout)
  --no-progress                disable progress output
  --export-format arg          format of image file


# 备份数据
[root@node0 ceph-deploy]# mkdir rdb
[root@node0 ceph-deploy]# rbd export ceph-demo/rbd-test.img@snap-demo ./rdb/rdb-test.img
Exporting image: 100% complete...done.
[root@node0 ceph-deploy]# ls ./rdb/ -lh
total 84M
-rw-r--r-- 1 root root 10G Nov  2 10:11 rdb-test.img

数据删除,模拟数据丢失

[root@node0 ceph-deploy]# cd /media/
[root@node0 media]# ls
lost+found  test.txt
[root@node0 media]# rm ./test.txt -rf

RDB 数据恢复

# 查看数据盘挂载,卸载 RDB 磁盘挂载
[root@node0 ceph-deploy]# df 
Filesystem              1K-blocks    Used Available Use% Mounted on
devtmpfs                   919528       0    919528   0% /dev
tmpfs                      931512       0    931512   0% /dev/shm
tmpfs                      931512   41264    890248   5% /run
tmpfs                      931512       0    931512   0% /sys/fs/cgroup
/dev/mapper/centos-root  38770180 2633828  36136352   7% /
/dev/sda1                 1038336  153608    884728  15% /boot
tmpfs                      931512      24    931488   1% /var/lib/ceph/osd/ceph-0
tmpfs                      931512      52    931460   1% /var/lib/ceph/osd/ceph-3
/dev/rbd0                10190100   36892   9612536   1% /media
/dev/rbd1                10190100   36892   9612536   1% /mnt
tmpfs                      186304       0    186304   0% /run/user/0

[root@node0 ceph-deploy]# rbd device ls
id pool      namespace image         snap device    
0  ceph-demo           rbd-test.img  -    /dev/rbd0 
1  ceph-demo           vm1-clone.img -    /dev/rbd1 

[root@node0 ceph-deploy]# umount /media

# 数据恢复
[root@node0 ceph-deploy]# rbd import ./rdb/rdb-test.img ceph-demo/rbd-test-new.img
Importing image: 100% complete...done.
[root@node0 ceph-deploy]# rbd -p ceph-demo ls
ceph-trash.img
crush-demo.img
rbd-test-new.img    # 新恢复的数据
rbd-test.img
rdb-demo.img
vm1-clone.img
vm2-clone.img
vm3-clone.img

# 映射新的 RDB 磁盘
[root@node0 ceph-deploy]# rbd device map ceph-demo/rbd-test-new.img
rbd: sysfs write failed
RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable ceph-demo/rbd-test-new.img 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

# 直接映射报错,取消磁盘携带的 feature
[root@node0 ceph-deploy]# rbd feature disable ceph-demo/rbd-test-new.img object-map fast-diff deep-flatten

# 重新映射新的 RDB 磁盘
[root@node0 ceph-deploy]# rbd device map ceph-demo/rbd-test-new.img
/dev/rbd2

# 重新挂载磁盘
[root@node0 ceph-deploy]# r

# 检验数据
[root@node0 ceph-deploy]# cd /media/
[root@node0 media]# ls -l
total 20
drwx------ 2 root root 16384 Nov  1 17:27 lost+found
-rw-r--r-- 1 root root     7 Nov  1 17:28 test.txt
[root@node0 media]# cat test.txt 
evescn

RDB 增量备份与恢复

对于增量备份,常用于 ceph 异地备份,或者 kvm、OpenStack 相关备份。可以减少空间占用大小 可以写成定时脚本,定时基于全备添加增量的备份

rbd-test-new.img 镜像进行快照,并添加增量数据

# 查看 rbd-test-new.img 镜像快照情况
[root@node0 ceph-deploy]# rbd snap ls ceph-demo/rbd-test-new.img

# 创建快照
[root@node0 ceph-deploy]# rbd snap create ceph-demo/rbd-test-new.img@testv1
[root@node0 ceph-deploy]# rbd snap ls ceph-demo/rbd-test-new.img
SNAPID NAME   SIZE   PROTECTED TIMESTAMP                
    15 testv1 10 GiB           Wed Nov  2 14:10:26 2022

# 添加增量数据
[root@node0 ceph-deploy]# cd /media/

[root@node0 media]# ls -l
total 20
drwx------ 2 root root 16384 Nov  1 17:27 lost+found
-rw-r--r-- 1 root root     7 Nov  1 17:28 test.txt

[root@node0 media]# echo gmkk > file2
[root@node0 media]# ls -l
total 24
-rw-r--r-- 1 root root     5 Nov  2 14:10 file2
drwx------ 2 root root 16384 Nov  1 17:27 lost+found
-rw-r--r-- 1 root root     7 Nov  1 17:28 test.txt

[root@node0 media]# sync

# 添加增量数据后自作快照
[root@node0 media]# rbd snap create ceph-demo/rbd-test-new.img@testv2

# 查看 rbd-test-new.img 镜像快照情况
[root@node0 media]# rbd snap ls ceph-demo/rbd-test-new.img
SNAPID NAME   SIZE   PROTECTED TIMESTAMP                
    15 testv1 10 GiB           Wed Nov  2 14:10:26 2022 
    16 testv2 10 GiB           Wed Nov  2 14:11:15 2022 

导出全量快照和增量快照,以便后续数据恢复

[root@node0 media]# cd -
/data/ceph-deploy

# 导出全量快照
[root@node0 ceph-deploy]# rbd export ceph-demo/rbd-test-new.img@testv1 ./rdb/rbd-test-new.img
Exporting image: 100% complete...done.

# 导出增量快照
[root@node0 ceph-deploy]# rbd export-diff ceph-demo/rbd-test-new.img@testv2 ./rdb/rbd-test-new.img@testv2
Exporting image: 100% complete...done.

使用全量+增量快照进行数据恢复

# 使用全量快照恢复
[root@node0 ceph-deploy]# rbd import ./rdb/rbd-test-new.img ceph-demo/rbd-test-new2.img
Importing image: 100% complete...done.

# 追加增量快照数据           
[root@node0 ceph-deploy]# rbd import-diff ./rdb/rbd-test-new.img@testv2 ceph-demo/rbd-test-new2.img
Importing image diff: 100% complete...done.

# 挂载磁盘
[root@node0 ceph-deploy]# rbd feature disable ceph-demo/rbd-test-new2.img object-map fast-diff deep-flatten

[root@node0 ceph-deploy]#  rbd device map ceph-demo/rbd-test-new2.img
/dev/rbd3
[root@node0 ceph-deploy]# mount /dev/rbd3 /opt/

[root@node0 ceph-deploy]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 898M     0  898M   0% /dev
tmpfs                    910M     0  910M   0% /dev/shm
tmpfs                    910M   41M  870M   5% /run
tmpfs                    910M     0  910M   0% /sys/fs/cgroup
/dev/mapper/centos-root   37G  2.7G   35G   8% /
/dev/sda1               1014M  151M  864M  15% /boot
tmpfs                    910M   24K  910M   1% /var/lib/ceph/osd/ceph-0
tmpfs                    910M   52K  910M   1% /var/lib/ceph/osd/ceph-3
tmpfs                    182M     0  182M   0% /run/user/0
/dev/rbd2                9.8G   37M  9.2G   1% /media
/dev/rbd3                9.8G   37M  9.2G   1% /opt

# 查看数据信息
[root@node0 ceph-deploy]# ls /opt/ -lh
total 24K
-rw-r--r-- 1 root root   5 Nov  2 14:10 file2
drwx------ 2 root root 16K Nov  1 17:27 lost+found
-rw-r--r-- 1 root root   7 Nov  1 17:28 test.txt

# 查看新增文本数据信息
[root@node0 ceph-deploy]# cat /opt/file2 
gmkk

RDB 导入导出总结

  • 场景1:VMware 迁移至 openstack
  • 场景2:数据备份,备份至专属备份系统
  • 场景3:最少宕机离线迁移

img

posted @ 2022-11-02 14:47  evescn  阅读(276)  评论(0编辑  收藏  举报