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

楼主 |
发表于 2022-6-17 17:23:36
|
显示全部楼层
3、 快照导出的文件导入为新的RBD image 7 k( E1 {$ p% F! L$ i! V
快照的恢复过程使用的是刚刚上面提到的备份到本地的那些文件. 现在假如想恢复到v3那个快照的时间点,那么可以用两个方法 方法1:直接基于v3的时间点的快照做恢复 方法2:直接基于v1的时间点的数据,和后面的增量的v1-v3数据(要按顺序导入) 0 o' K& e) [) ?6 i) |% J, I( H
3.1增量导入:rbd import-diff ! ^7 i x/ _1 d+ \
#方法1:直接基于v3的时间点的快照做恢复
5 r5 u$ C3 X* M4 I6 [) W* j8 a#首先随便创建一个image,名称大小都不限制,因为后面恢复的时候会覆盖掉大小的信息4 Y O; H1 X% H( r
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd create replicapool/resume-v1 --size 1
' j7 m) U, A1 Q. F" d; M$ ~5 y[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import-diff csz-busybox-v3 replicapool/resume-v1 Importing image diff: 100% complete...done., \$ b" N. D6 l7 V
[root@rook-ceph-tools-6f5694c655-hzpj5 /]#% V* w: N/ C* n
#方法2: 基于v1+ v1_v3数据恢复6 _. Z Z! S/ L* `5 K
#首先随便创建一个image,名称大小都不限制,因为后面恢复的时候会覆盖掉大小的信息
m4 t8 T1 ?0 [. b ~[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd create replicapool/resume-v3 --size 1
1 C+ H+ a6 M, r: k, x! f[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import-diff csz-busybox-v1 replicapool/resume-v3
d% F1 ~: L$ T6 Z" e1 ]- T# wImporting image diff: 100% complete...done.
# M# K3 z6 p# `! F5 o, w' W[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import-diff csz-busybox-v1-v3 replicapool/resume-v3+ S$ r' M8 v9 @/ [. j, h$ P
1234567891011 ) Q& Y2 \3 x* Y: e! m' _ N
实际项目当中就是,定期做快照,然后导出某个时间点快照的数据,然后导出增量的快照的数据,就可以了 3 x0 V% }* U* ?2 n1 \+ `! J9 S: X
3.2全量导入:rbd import 5 w7 Q/ K# `% Y8 ^( u% Y
注:不用提前创建目标image,否则rbd import会报错
4 b3 ~6 j+ w% u" \5 B" ?[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd create replicapool/resume-full --size 1" S6 @4 I* C; N- S8 i! f) f
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import-diff csz-busybox-full replicapool/resume-full8 E( t, Q" d1 }* B; S* ^4 S1 @1 T
rbd: invalid or unexpected diff banner
W, F& S' D3 orbd: import-diff failed: (22) Invalid argument: i6 E; R- L |! F
[root@rook-ceph-tools-6f5694c655-hzpj5 /]#( o9 `0 I U. }0 e9 V& i
[root@rook-ceph-tools-6f5694c655-hzpj5 /]#% L: t, p. V+ L5 G h
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import csz-busybox-full replicapool/resume-full
: B. r& Q2 h2 y( Rrbd: image creation failed- j) W, W/ p& R4 X) v8 P
Importing image: 0% complete...failed.! y0 G2 m8 U0 |: o6 Z3 C- k; F
rbd: import failed: 2021-01-29T02:11:56.790+0000 7fdfdcb4b500 -1 librbd: rbd image resume-full already exists
1 n! o. ~6 @# q9 K A. t1 \' y6 A(17) File exists/ ^; }6 L8 ?$ m% c5 P4 |
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import csz-busybox-full replicapool/resume-full12 E) {$ I; q& t
Importing image: 100% complete...done.7 I- o G1 f9 C! k6 D, J% I
[root@rook-ceph-tools-6f5694c655-hzpj5 /]#4 F* ~) b0 t" X7 ~$ a
1234567891011121314 . o- O" |& {- U0 J/ D4 O
四、如何利用这个 实际项目当中就是,定期做快照,然后导出某个时间点快照的数据,然后导出增量的快照的数据,就可以了,例如: 今天对所有的rbd的image做一个基础快照,然后导出这个快照的数据,然后从今天开始,每天晚上做一个快照,然后导出快照时间点之间的数据,这样每天导出来的就是一个增量的数据了,在做恢复的时候,就从第一个快照导入,然后按顺序导入增量的快照即可,也可以定期做一个快照,导出完整的快照数据,以防中间的增量快照漏了,然后就是要注意可以定期清理快照,如果是做备份的模式,在导入了快照数据后,也可以清理一些本地的数据,本地数据做异地机房复制的时候也可以做一下数据的压缩,来减少数据量的传输
; r5 |7 `( q* f9 c A3 K客户端验证:将RBD image恢复到pod
- ^% M: E# X8 A, h- F( O思路:将新的image name重命名rename成原来的image name
7 X9 h( }8 w, D" ~ y8 [- k" ~删除旧的image
, @5 L6 k. n3 b$ A. F, {! R+ v# Step1:停掉pod对image的使用0 ^( p7 _/ M7 U0 X6 N
修改pod的yaml文件,将spec: replicas: 副本数改为0
) O; t1 t6 e L2 s! m- C% n# Step2:清空旧image的snapshots
$ U& X. @" @' }1 O# V, B[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd snap purge replicapool/csi-vol-387b2608-61f7-11eb-b9c5-0e28ddb26a3c
4 x7 d4 `% b3 @% U% v8 h& p0 rRemoving all snapshots: 100% complete...done. J8 P" A- S: p: ^" E
# Step3:删除旧的image
3 Z; B& i9 L5 k4 O3 P. l[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd rm replicapool/csi-vol-387b2608-61f7-11eb-b9c5-0e28ddb26a3c% b1 F( j: \ l% n
Removing image: 100% complete...done.- A$ c1 ^' _4 w
12345678
; w' H. T2 `* f: g" C) M; o将new image name重命名为old image name / J8 f% K1 V% F
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd rename replicapool/test-v3 replicapool/csi-vol-387b2608-61f7-11eb-b9c5-0e28ddb26a3c
9 g- R. D7 i8 B1 D1
$ ~" T% @, T# b% ~ m, ^9 M$ @# N启动pod 1 J; p8 N7 Q; i0 }5 q
修改pod的yaml文件,将spec: replicas: 副本数由0改回原值
8 w- D$ t# Q6 L1 o. O* g3 |% l3 `1
( E" |* i& k$ Z2 S$ T9 WFAQ:
+ A" S" j2 p$ j! f' Yrbd 删除image时,报错“rbd: image has snapshots - these must be deleted with ‘rbd snap purge’ before the image can be removed” 0 n6 `; N' @! ]/ i
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd rm replicapool/csi-vol-387b2608-61f7-11eb-b9c5-0e28ddb26a3c+ |7 F8 k, G7 w3 \) d
Removing image: 0% complete...failed.
- ]7 k( V: s5 t0 r$ \rbd: image has snapshots - these must be deleted with 'rbd snap purge' before the image can be removed.
/ o. h0 |) Z' ^+ S) f123
5 l) G8 _0 [, J+ [1 C, e解决方法:执行’rbd snap purge’删掉image相关snapshots - E2 }; ?' F) [7 `% f
rbd 删除image时,报错“rbd: error: image still has watchers”
; d6 g$ w L. o" a- J! Q[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd rm replicapool/csi-vol-6ee1b63a-6060-11eb-b9c5-0e28ddb26a3c
/ w: ~4 {: |" `& ?! x5 K0 J2021-01-29T06:22:09.698+0000 7fe4677fe700 -1 librbd::image::PreRemoveRequest: 0x55a645137470 check_image_watchers: image has watchers - not removing
* b+ x- R; K6 t8 p- ~1 ^3 o6 pRemoving image: 0% complete...failed.
, Q" _1 \8 g! Q' {, d ~rbd: error: image still has watchers
& C9 h& v& U2 U: l$ yThis 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.2 M/ I$ U$ o. z' q
12345 / t2 m% `1 U2 A$ j$ H
解决方法:删除使用image的pod(修改pod的yaml文件,将spec: replicas: 副本数改为0)' i) n! b' i! V/ Z/ d
|
|