|
|
楼主 |
发表于 2022-6-17 17:23:36
|
显示全部楼层
3、 快照导出的文件导入为新的RBD image 1 F, m: S s; t& E
快照的恢复过程使用的是刚刚上面提到的备份到本地的那些文件. 现在假如想恢复到v3那个快照的时间点,那么可以用两个方法 方法1:直接基于v3的时间点的快照做恢复 方法2:直接基于v1的时间点的数据,和后面的增量的v1-v3数据(要按顺序导入) + e3 G) T; X3 a! ?+ S. ?
3.1增量导入:rbd import-diff ( r7 X; D5 x J& Y; r8 T: K
#方法1:直接基于v3的时间点的快照做恢复 N D9 ]$ v. y( p
#首先随便创建一个image,名称大小都不限制,因为后面恢复的时候会覆盖掉大小的信息2 D* `/ e0 n' C! U2 e2 M
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd create replicapool/resume-v1 --size 1
( K% ?+ K4 c5 D+ H3 z- ~. _: S[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import-diff csz-busybox-v3 replicapool/resume-v1 Importing image diff: 100% complete...done.
$ z5 X! i }& M% `: R$ D7 T[root@rook-ceph-tools-6f5694c655-hzpj5 /]#( Q7 Q7 x) j2 s( T2 z+ l. w
#方法2: 基于v1+ v1_v3数据恢复
& A- l( n* o+ k9 K#首先随便创建一个image,名称大小都不限制,因为后面恢复的时候会覆盖掉大小的信息0 T1 P1 n2 y: m, E1 U
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd create replicapool/resume-v3 --size 1+ W9 y, D. z' T! N! Q! F3 P
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import-diff csz-busybox-v1 replicapool/resume-v3' @& o0 v0 m3 m! z" p: q. T/ d6 O
Importing image diff: 100% complete...done./ w) N2 \" \! J; Y% R) Z
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import-diff csz-busybox-v1-v3 replicapool/resume-v3$ n# ^/ G3 d4 F1 f+ A! t
1234567891011 1 W, p C7 n3 B, z% }
实际项目当中就是,定期做快照,然后导出某个时间点快照的数据,然后导出增量的快照的数据,就可以了
$ Y) g2 f* V& f f* |3.2全量导入:rbd import 0 N" p# l6 f' e" W4 A d- g. O' X
注:不用提前创建目标image,否则rbd import会报错 F+ Y" l2 E+ ]: w! d' s8 j
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd create replicapool/resume-full --size 1
4 K$ r9 M, v, D1 D. J1 `[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import-diff csz-busybox-full replicapool/resume-full2 v3 H; l1 J( M+ C* N5 I3 Y/ E( @
rbd: invalid or unexpected diff banner* W. f" a0 Y; i" V9 T y
rbd: import-diff failed: (22) Invalid argument& g; Q: I- |$ C' `
[root@rook-ceph-tools-6f5694c655-hzpj5 /]#
0 w3 D8 d9 G: ^& F& J4 f[root@rook-ceph-tools-6f5694c655-hzpj5 /]#
, L* a8 E- U! g! n; P4 o[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import csz-busybox-full replicapool/resume-full, L1 S' ?$ M4 ?, M
rbd: image creation failed) y$ N& U6 \2 Y" c8 W( o
Importing image: 0% complete...failed.
; E3 y: m y$ Y7 c( x4 Grbd: import failed: 2021-01-29T02:11:56.790+0000 7fdfdcb4b500 -1 librbd: rbd image resume-full already exists( b& E C6 ^0 k8 j2 t5 B3 b
(17) File exists6 _8 N' b) D' u d/ z
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import csz-busybox-full replicapool/resume-full11 O; E1 ~. E& h8 j1 p+ _1 R
Importing image: 100% complete...done.
) F% h8 O; O8 w" O, F[root@rook-ceph-tools-6f5694c655-hzpj5 /]#3 K m; J- x' { T: j
1234567891011121314 0 ]7 _5 n5 }) [: O
四、如何利用这个 实际项目当中就是,定期做快照,然后导出某个时间点快照的数据,然后导出增量的快照的数据,就可以了,例如: 今天对所有的rbd的image做一个基础快照,然后导出这个快照的数据,然后从今天开始,每天晚上做一个快照,然后导出快照时间点之间的数据,这样每天导出来的就是一个增量的数据了,在做恢复的时候,就从第一个快照导入,然后按顺序导入增量的快照即可,也可以定期做一个快照,导出完整的快照数据,以防中间的增量快照漏了,然后就是要注意可以定期清理快照,如果是做备份的模式,在导入了快照数据后,也可以清理一些本地的数据,本地数据做异地机房复制的时候也可以做一下数据的压缩,来减少数据量的传输 ! t- s9 J) k* o$ r
客户端验证:将RBD image恢复到pod
- N S( [$ ]7 R( i! Y思路:将新的image name重命名rename成原来的image name ; w% {+ ]' t; w) g
删除旧的image
+ h& c' q2 W4 S1 Q2 i/ x# Step1:停掉pod对image的使用7 j4 Q+ c6 I0 ^. J0 u6 Z* h/ S
修改pod的yaml文件,将spec: replicas: 副本数改为0
, Z0 I: q {: i( e) b$ @; o/ \8 w# Step2:清空旧image的snapshots ^6 u$ C6 i s+ u
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd snap purge replicapool/csi-vol-387b2608-61f7-11eb-b9c5-0e28ddb26a3c. D+ `1 i+ M" g1 @( V" J
Removing all snapshots: 100% complete...done.
5 q0 l u# x5 E# b N# Step3:删除旧的image
; S0 s( K1 q. \# }, ], p2 h[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd rm replicapool/csi-vol-387b2608-61f7-11eb-b9c5-0e28ddb26a3c
* _' L; m! E" D# ]& a+ L/ VRemoving image: 100% complete...done.
2 K) \4 _* [/ F7 }12345678 + Z+ g `5 c% x
将new image name重命名为old image name
0 N* C4 S3 M* b3 _[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd rename replicapool/test-v3 replicapool/csi-vol-387b2608-61f7-11eb-b9c5-0e28ddb26a3c
& y/ H7 z& g' R4 }& @7 ]7 G1
, L" {1 ~+ z3 {启动pod % o+ }5 w0 w% E# I5 k+ P ~
修改pod的yaml文件,将spec: replicas: 副本数由0改回原值8 d/ a5 ]) H+ o% B2 x
1 / d9 n: P8 U+ J9 y$ T
FAQ:
; Z& k# y( |5 Q! W6 H5 J* Erbd 删除image时,报错“rbd: image has snapshots - these must be deleted with ‘rbd snap purge’ before the image can be removed”
) J9 K( |. f5 M7 A7 @/ b0 X5 ?[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd rm replicapool/csi-vol-387b2608-61f7-11eb-b9c5-0e28ddb26a3c& b) e6 S! X# J* x* z+ z/ h
Removing image: 0% complete...failed.
4 a- E# T& b) K& H1 ]# srbd: image has snapshots - these must be deleted with 'rbd snap purge' before the image can be removed.
8 F+ _; \! Y7 N( h# w9 f3 E! O123
4 U2 z( e: ]' D$ I8 P4 T6 k解决方法:执行’rbd snap purge’删掉image相关snapshots
& _1 S1 e9 }) D. o7 d1 k) j& trbd 删除image时,报错“rbd: error: image still has watchers” % `( f2 ]5 }6 ~, |
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd rm replicapool/csi-vol-6ee1b63a-6060-11eb-b9c5-0e28ddb26a3c
+ h1 e) Y" h, s4 f9 I- G( q& V+ n4 a* C2021-01-29T06:22:09.698+0000 7fe4677fe700 -1 librbd::image::PreRemoveRequest: 0x55a645137470 check_image_watchers: image has watchers - not removing
6 f a" B5 k4 @& z. n% \- W1 q4 lRemoving image: 0% complete...failed.
- R) c* e2 f, C+ w1 z1 ~; i, ?) Yrbd: error: image still has watchers/ @: G* @$ y1 B) @8 N
This 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.
3 t- X5 j- _0 T( i! q12345 4 q. k6 Y/ ?" W6 E @5 {& i4 {( k' V6 k
解决方法:删除使用image的pod(修改pod的yaml文件,将spec: replicas: 副本数改为0)
7 y. R( e) ]3 O! S |
|