- 积分
- 16840
在线时间 小时
最后登录1970-1-1
|

楼主 |
发表于 2022-6-17 17:23:36
|
显示全部楼层
3、 快照导出的文件导入为新的RBD image
. i: E2 Z- z- v0 I6 S8 z* ~快照的恢复过程使用的是刚刚上面提到的备份到本地的那些文件. 现在假如想恢复到v3那个快照的时间点,那么可以用两个方法 方法1:直接基于v3的时间点的快照做恢复 方法2:直接基于v1的时间点的数据,和后面的增量的v1-v3数据(要按顺序导入) ( {* J3 k1 R- P7 A# ]: K
3.1增量导入:rbd import-diff
0 l- F8 E- ^, @#方法1:直接基于v3的时间点的快照做恢复6 Z' j0 d; R W1 q* ~
#首先随便创建一个image,名称大小都不限制,因为后面恢复的时候会覆盖掉大小的信息9 u4 ~0 \# g1 [: d) k, E
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd create replicapool/resume-v1 --size 1
8 V0 J1 M" X. Y& g* O[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import-diff csz-busybox-v3 replicapool/resume-v1 Importing image diff: 100% complete...done.0 l, ]1 |* {' P+ V% M$ q
[root@rook-ceph-tools-6f5694c655-hzpj5 /]#
' L0 ~+ j& d7 B2 L3 Z& Y7 }7 {#方法2: 基于v1+ v1_v3数据恢复: [9 ^0 L, f$ R+ g) p2 H" f5 l0 v; ~/ H
#首先随便创建一个image,名称大小都不限制,因为后面恢复的时候会覆盖掉大小的信息5 a! \3 c! o7 r8 A) y# C5 W5 N
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd create replicapool/resume-v3 --size 1" B* f% L4 L# v1 h7 c6 t
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import-diff csz-busybox-v1 replicapool/resume-v3" y$ H/ p" N. C4 G! Y/ y# d
Importing image diff: 100% complete...done.2 s; j3 A0 H) v- n2 Q2 ~5 |
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import-diff csz-busybox-v1-v3 replicapool/resume-v30 b% {" l) v( o U1 N
1234567891011
; z% V3 d5 B, j3 N8 R5 C 实际项目当中就是,定期做快照,然后导出某个时间点快照的数据,然后导出增量的快照的数据,就可以了
- x% c7 d) R* L6 N' n; h3.2全量导入:rbd import
l5 R8 G) @# r: k& X注:不用提前创建目标image,否则rbd import会报错 % @0 c* I% m/ S" R5 A
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd create replicapool/resume-full --size 1
; H5 C5 _" {( h# |; G! G: N. u9 Z[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import-diff csz-busybox-full replicapool/resume-full
* U# {& T8 j( L" ]rbd: invalid or unexpected diff banner; _6 U" m. v! @! e
rbd: import-diff failed: (22) Invalid argument# w% {! i, M; q
[root@rook-ceph-tools-6f5694c655-hzpj5 /]#
! v, F# h& w2 {8 t[root@rook-ceph-tools-6f5694c655-hzpj5 /]#
3 Q5 C; {4 `3 R6 J; l[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import csz-busybox-full replicapool/resume-full8 r8 j2 ^, |" P, I8 V: C: R
rbd: image creation failed
3 q, p/ h$ p0 EImporting image: 0% complete...failed.
, Y j: N; i ^3 d, lrbd: import failed: 2021-01-29T02:11:56.790+0000 7fdfdcb4b500 -1 librbd: rbd image resume-full already exists
. n( e5 h4 B, G6 ~(17) File exists
' A: F# t& t& `) ][root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import csz-busybox-full replicapool/resume-full10 o) _7 ~! }5 M3 {1 n6 q
Importing image: 100% complete...done.
9 x: r/ s8 m. A# r7 g[root@rook-ceph-tools-6f5694c655-hzpj5 /]#
$ c& k$ E) Y, h2 O- S9 \) t1234567891011121314 ' g9 o0 M G. ?& w' |
四、如何利用这个 实际项目当中就是,定期做快照,然后导出某个时间点快照的数据,然后导出增量的快照的数据,就可以了,例如: 今天对所有的rbd的image做一个基础快照,然后导出这个快照的数据,然后从今天开始,每天晚上做一个快照,然后导出快照时间点之间的数据,这样每天导出来的就是一个增量的数据了,在做恢复的时候,就从第一个快照导入,然后按顺序导入增量的快照即可,也可以定期做一个快照,导出完整的快照数据,以防中间的增量快照漏了,然后就是要注意可以定期清理快照,如果是做备份的模式,在导入了快照数据后,也可以清理一些本地的数据,本地数据做异地机房复制的时候也可以做一下数据的压缩,来减少数据量的传输
/ A9 J" w% [8 A. E4 @4 G5 @( U客户端验证:将RBD image恢复到pod
9 h2 y4 v" ~# } [3 |思路:将新的image name重命名rename成原来的image name - A# y; i+ `: J& G
删除旧的image
5 r2 g! M! b$ K3 W+ O# Step1:停掉pod对image的使用6 e" Q( p9 U* ]7 _( z
修改pod的yaml文件,将spec: replicas: 副本数改为0+ c R" H/ F2 B1 x& n$ R
# Step2:清空旧image的snapshots
& B" C1 b+ [. M( r- w[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd snap purge replicapool/csi-vol-387b2608-61f7-11eb-b9c5-0e28ddb26a3c
0 R! q1 X+ D# u0 _3 U7 a& K% k1 M4 cRemoving all snapshots: 100% complete...done.7 X+ Z" @3 r/ d& \8 k
# Step3:删除旧的image
1 k5 L" [3 S F6 v u[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd rm replicapool/csi-vol-387b2608-61f7-11eb-b9c5-0e28ddb26a3c
3 u; a6 M, A" d6 tRemoving image: 100% complete...done.
! O5 _5 r( u) I m. f" c12345678
, j5 W, D0 v+ p9 _9 X8 A将new image name重命名为old image name
5 F* C9 P, ?+ ^) J f[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd rename replicapool/test-v3 replicapool/csi-vol-387b2608-61f7-11eb-b9c5-0e28ddb26a3c
- V1 ^% h+ j% B3 E/ e+ P, d1 $ B1 Y2 ]) ?; k7 G8 f) u& X% ~( S, H
启动pod : R5 O! Q5 t( _ f
修改pod的yaml文件,将spec: replicas: 副本数由0改回原值
% h9 x9 [4 O- U9 T( T1 $ [9 r: v \( P* b" G4 q( n; F7 r
FAQ:
2 o8 W" a: t$ ~1 P1 U+ Rrbd 删除image时,报错“rbd: image has snapshots - these must be deleted with ‘rbd snap purge’ before the image can be removed”
* X: }, ~5 b# a% ?8 C6 K: e[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd rm replicapool/csi-vol-387b2608-61f7-11eb-b9c5-0e28ddb26a3c
: E M, ^' O1 I$ ~! \% J+ B2 p fRemoving image: 0% complete...failed.6 E! b9 y; P6 ?6 R
rbd: image has snapshots - these must be deleted with 'rbd snap purge' before the image can be removed.
6 U5 B% K- A6 q" A8 e123
( F {* l/ E/ ?& y9 G9 S解决方法:执行’rbd snap purge’删掉image相关snapshots
5 z6 r" T2 P/ V1 D$ k: _% Erbd 删除image时,报错“rbd: error: image still has watchers”
& L9 D5 `( B, x7 w2 [[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd rm replicapool/csi-vol-6ee1b63a-6060-11eb-b9c5-0e28ddb26a3c: I; H* n! k+ ]. ?0 m( K
2021-01-29T06:22:09.698+0000 7fe4677fe700 -1 librbd::image::PreRemoveRequest: 0x55a645137470 check_image_watchers: image has watchers - not removing
3 M! i6 C1 U9 K4 s( A9 g5 }Removing image: 0% complete...failed.
) ?: s3 I1 G; f2 e# \% d, F! brbd: error: image still has watchers
7 _1 m1 k# l# d4 @1 O: XThis means the image is still open or the client using it crashed. Try again after closing/unmapping it or waiting 30s for the crashed client to timeout.
) Y+ I3 d9 Z# {% }$ D8 g) ~12345
: ]/ G- S8 Y$ F3 b3 s解决方法:删除使用image的pod(修改pod的yaml文件,将spec: replicas: 副本数改为0)# ?, o& p( W5 U3 F+ A6 Q
|
|