|
|
楼主 |
发表于 2022-6-17 17:23:36
|
显示全部楼层
3、 快照导出的文件导入为新的RBD image ' m/ t5 n& Z5 x9 s1 N. X
快照的恢复过程使用的是刚刚上面提到的备份到本地的那些文件. 现在假如想恢复到v3那个快照的时间点,那么可以用两个方法 方法1:直接基于v3的时间点的快照做恢复 方法2:直接基于v1的时间点的数据,和后面的增量的v1-v3数据(要按顺序导入)
0 O: d* m3 [, e& G$ q9 n( D3.1增量导入:rbd import-diff
2 A( v' e2 w/ h' G. n, @! o8 ~#方法1:直接基于v3的时间点的快照做恢复
# {1 G" T0 t9 V) p5 t#首先随便创建一个image,名称大小都不限制,因为后面恢复的时候会覆盖掉大小的信息$ }- o5 S: G; L
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd create replicapool/resume-v1 --size 1 ( N/ Q+ r0 G8 `1 R
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import-diff csz-busybox-v3 replicapool/resume-v1 Importing image diff: 100% complete...done.
" j5 N+ e/ e6 R" d$ h4 _[root@rook-ceph-tools-6f5694c655-hzpj5 /]#
N, j& h' D w: t* s9 a$ ]- J#方法2: 基于v1+ v1_v3数据恢复8 n/ B6 P$ q5 p8 E
#首先随便创建一个image,名称大小都不限制,因为后面恢复的时候会覆盖掉大小的信息
, `- f: S3 ], [2 f6 |[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd create replicapool/resume-v3 --size 19 O9 f0 s6 D+ }# j, k
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import-diff csz-busybox-v1 replicapool/resume-v3
6 R6 B" d: U6 ^' r' aImporting image diff: 100% complete...done." J8 q& Q/ s( I$ n) F
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import-diff csz-busybox-v1-v3 replicapool/resume-v3
2 ^, t0 E$ Q) o4 h, K1234567891011 , G# o. O- n" V4 b
实际项目当中就是,定期做快照,然后导出某个时间点快照的数据,然后导出增量的快照的数据,就可以了
. g9 g; i, J# U% z; T0 J3.2全量导入:rbd import
4 q. X0 q- u( n: P5 x0 m注:不用提前创建目标image,否则rbd import会报错
% h* \1 s$ k( N/ z) ~- c[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd create replicapool/resume-full --size 1
+ S% }( Q% o+ p! {% F[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import-diff csz-busybox-full replicapool/resume-full
$ q+ J8 w* E) k, `" l. w9 Irbd: invalid or unexpected diff banner' a$ v9 k& s( c% ~! p* P$ V
rbd: import-diff failed: (22) Invalid argument
k3 X ~; ~$ t7 J[root@rook-ceph-tools-6f5694c655-hzpj5 /]#
( p/ E) K9 ~' O# v[root@rook-ceph-tools-6f5694c655-hzpj5 /]#
* X# S' W. b1 G# k) C: @! j# z' s[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import csz-busybox-full replicapool/resume-full, V, p7 T0 |7 f- J: Z2 T
rbd: image creation failed2 W( }3 x2 e2 Q4 ?* L6 J5 x+ Q5 j
Importing image: 0% complete...failed.+ z/ t# f9 h( S, q
rbd: import failed: 2021-01-29T02:11:56.790+0000 7fdfdcb4b500 -1 librbd: rbd image resume-full already exists
4 z/ O- r n4 P1 S2 f3 c(17) File exists
& b; m3 g% I; o P' c) {[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import csz-busybox-full replicapool/resume-full18 J1 L& g% p; S# P
Importing image: 100% complete...done.
H! G8 h, A4 N1 u3 J[root@rook-ceph-tools-6f5694c655-hzpj5 /]#" ^4 S! }# O. r0 W3 N, s
1234567891011121314 + b* O; `) q8 ~" e/ \7 ^
四、如何利用这个 实际项目当中就是,定期做快照,然后导出某个时间点快照的数据,然后导出增量的快照的数据,就可以了,例如: 今天对所有的rbd的image做一个基础快照,然后导出这个快照的数据,然后从今天开始,每天晚上做一个快照,然后导出快照时间点之间的数据,这样每天导出来的就是一个增量的数据了,在做恢复的时候,就从第一个快照导入,然后按顺序导入增量的快照即可,也可以定期做一个快照,导出完整的快照数据,以防中间的增量快照漏了,然后就是要注意可以定期清理快照,如果是做备份的模式,在导入了快照数据后,也可以清理一些本地的数据,本地数据做异地机房复制的时候也可以做一下数据的压缩,来减少数据量的传输 % Z7 j' P3 h! M, D. i7 W
客户端验证:将RBD image恢复到pod
+ ~' [5 |( R% o思路:将新的image name重命名rename成原来的image name
7 \( U/ t9 K7 d# O6 u+ C删除旧的image ( o0 C/ \5 a7 `1 Q
# Step1:停掉pod对image的使用$ U/ W+ V( W3 K1 j$ h! q S
修改pod的yaml文件,将spec: replicas: 副本数改为0
- g1 Y; [" E7 I# Step2:清空旧image的snapshots# P2 M5 X, O2 T5 `
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd snap purge replicapool/csi-vol-387b2608-61f7-11eb-b9c5-0e28ddb26a3c
9 C( e* ] [% Z) qRemoving all snapshots: 100% complete...done.
; ]8 |3 { c& |/ [5 J0 J# Step3:删除旧的image
. s9 Z; s+ Q' L6 R, L[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd rm replicapool/csi-vol-387b2608-61f7-11eb-b9c5-0e28ddb26a3c4 ]: V! b5 k0 O0 V: J' v
Removing image: 100% complete...done.
$ Z5 u2 X2 E" O& m12345678 5 L- e7 ~0 L# r" m$ c( w! ]% b
将new image name重命名为old image name ; m& }' K( Z' E
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd rename replicapool/test-v3 replicapool/csi-vol-387b2608-61f7-11eb-b9c5-0e28ddb26a3c1 g: }2 d* R$ h. r
1
; q4 P j3 P. }( S$ S! f+ C9 W启动pod 5 }1 T- d! N& a' Y2 r* T
修改pod的yaml文件,将spec: replicas: 副本数由0改回原值
$ M* W: C9 v4 C/ w3 `2 `1 7 q) G4 @; x% O9 s, E6 `
FAQ:
# u7 q D" d U: m3 ~( Rrbd 删除image时,报错“rbd: image has snapshots - these must be deleted with ‘rbd snap purge’ before the image can be removed” ' }" n8 p4 Q+ i# t d
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd rm replicapool/csi-vol-387b2608-61f7-11eb-b9c5-0e28ddb26a3c
: R9 I, t3 ^& R( G" `Removing image: 0% complete...failed.
& V9 s- [* R, u4 _( y; krbd: image has snapshots - these must be deleted with 'rbd snap purge' before the image can be removed.
$ n+ x* A4 D* K W- C, f123 & C. Z$ g P4 o% x9 w, j
解决方法:执行’rbd snap purge’删掉image相关snapshots
. K0 J- n, @$ C6 F2 s# t, `3 Krbd 删除image时,报错“rbd: error: image still has watchers” # G9 }/ I0 P! b( e& K* ^7 M8 C9 U; H
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd rm replicapool/csi-vol-6ee1b63a-6060-11eb-b9c5-0e28ddb26a3c
& Z! X0 ]4 u7 [2021-01-29T06:22:09.698+0000 7fe4677fe700 -1 librbd::image::PreRemoveRequest: 0x55a645137470 check_image_watchers: image has watchers - not removing7 l" o, V+ q* p
Removing image: 0% complete...failed.
' W0 \, y' d* W# ~7 drbd: error: image still has watchers
! P% `) i3 ^8 }, WThis 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.
8 O/ F+ D B# L" c2 W& I12345
% G8 K0 |7 ^* g) Y5 C0 E5 T( Z" D解决方法:删除使用image的pod(修改pod的yaml文件,将spec: replicas: 副本数改为0)1 B( ^ J, n, C) @# H( Z
|
|