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

楼主 |
发表于 2022-6-17 17:23:36
|
显示全部楼层
3、 快照导出的文件导入为新的RBD image ) F; @% k% J1 v0 Y% }
快照的恢复过程使用的是刚刚上面提到的备份到本地的那些文件. 现在假如想恢复到v3那个快照的时间点,那么可以用两个方法 方法1:直接基于v3的时间点的快照做恢复 方法2:直接基于v1的时间点的数据,和后面的增量的v1-v3数据(要按顺序导入)
* B X! J" \2 i3 O0 `6 |* O3.1增量导入:rbd import-diff
' |3 ?* u' X; D! C#方法1:直接基于v3的时间点的快照做恢复! Z8 i# e( D/ Y2 G8 J; V. Z, F
#首先随便创建一个image,名称大小都不限制,因为后面恢复的时候会覆盖掉大小的信息$ |/ M8 s1 Z8 U6 |: U/ I3 k# ~
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd create replicapool/resume-v1 --size 1
0 f5 `- Q2 T( U4 ~- M[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import-diff csz-busybox-v3 replicapool/resume-v1 Importing image diff: 100% complete...done.
4 z6 R _8 w# p[root@rook-ceph-tools-6f5694c655-hzpj5 /]#8 h8 D" p# g \1 I' Y) c$ ^
#方法2: 基于v1+ v1_v3数据恢复! }5 f6 ~' d* t2 @- p7 d
#首先随便创建一个image,名称大小都不限制,因为后面恢复的时候会覆盖掉大小的信息
9 {1 a: @9 ?5 Z, \3 C[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd create replicapool/resume-v3 --size 1 C' d2 ^+ I6 ~; u0 j) k- a: z1 B
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import-diff csz-busybox-v1 replicapool/resume-v3
! D( ~8 R+ G6 }& W- C1 {, zImporting image diff: 100% complete...done.' w! r: B, O: r& Q0 L; R" p
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import-diff csz-busybox-v1-v3 replicapool/resume-v3
/ I" m& U; s) z% H+ y0 i# O7 N4 n1234567891011 $ H3 W% ]5 u, R" C& q6 |
实际项目当中就是,定期做快照,然后导出某个时间点快照的数据,然后导出增量的快照的数据,就可以了 : d, ?% ]% P& N0 O- }4 f
3.2全量导入:rbd import 5 F6 R) q- O+ [+ I+ R2 J$ w2 W: O. J
注:不用提前创建目标image,否则rbd import会报错
8 j; R0 k3 Q% w8 r[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd create replicapool/resume-full --size 18 A) y( N$ _/ ]3 f
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import-diff csz-busybox-full replicapool/resume-full
. Z2 e5 h+ \: B% C1 {rbd: invalid or unexpected diff banner
7 [, z+ z/ }2 }7 h7 Wrbd: import-diff failed: (22) Invalid argument
$ s K( O. b: {9 h* n/ B/ J/ l[root@rook-ceph-tools-6f5694c655-hzpj5 /]#
% I' U5 e) l8 D4 d* S[root@rook-ceph-tools-6f5694c655-hzpj5 /]#. D. w+ F$ p! ]* b& R
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import csz-busybox-full replicapool/resume-full9 Y1 l" X# N/ E }1 z( U
rbd: image creation failed( r2 ]& A* [, d' v* K
Importing image: 0% complete...failed.
6 t9 q% P7 T0 s" R K3 Zrbd: import failed: 2021-01-29T02:11:56.790+0000 7fdfdcb4b500 -1 librbd: rbd image resume-full already exists& }3 {0 K) E9 u$ x# x8 u; m7 L8 F
(17) File exists7 W$ Z% p4 l. \# [8 t5 ^; n
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import csz-busybox-full replicapool/resume-full1
/ C: U7 l" y: u7 x% L7 }Importing image: 100% complete...done.+ P! ?2 w0 m& l5 X* H+ f3 }
[root@rook-ceph-tools-6f5694c655-hzpj5 /]#
" E9 n8 _6 M% A- e; d. F. V1234567891011121314
9 \4 N, C, |- F P9 d) L 四、如何利用这个 实际项目当中就是,定期做快照,然后导出某个时间点快照的数据,然后导出增量的快照的数据,就可以了,例如: 今天对所有的rbd的image做一个基础快照,然后导出这个快照的数据,然后从今天开始,每天晚上做一个快照,然后导出快照时间点之间的数据,这样每天导出来的就是一个增量的数据了,在做恢复的时候,就从第一个快照导入,然后按顺序导入增量的快照即可,也可以定期做一个快照,导出完整的快照数据,以防中间的增量快照漏了,然后就是要注意可以定期清理快照,如果是做备份的模式,在导入了快照数据后,也可以清理一些本地的数据,本地数据做异地机房复制的时候也可以做一下数据的压缩,来减少数据量的传输
8 H- ]' r! i% p8 d& @) E客户端验证:将RBD image恢复到pod
* e$ h3 i! y4 ~思路:将新的image name重命名rename成原来的image name 9 S, r' L- `8 _% E$ ^) A. P
删除旧的image : m8 q# @, X# y1 Y3 {7 ]2 \8 G$ q9 K
# Step1:停掉pod对image的使用
- O# i1 P; {; z- a6 l" y: v4 ]修改pod的yaml文件,将spec: replicas: 副本数改为0+ S5 @+ p/ }! U o$ b
# Step2:清空旧image的snapshots
8 v" J1 B7 d% ~[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd snap purge replicapool/csi-vol-387b2608-61f7-11eb-b9c5-0e28ddb26a3c
9 L- p* X" _& e9 J8 }1 k+ iRemoving all snapshots: 100% complete...done.$ ], Y* w3 L9 ?$ v9 ?8 l# }$ u3 e
# Step3:删除旧的image
8 S/ y9 ?" P9 N: o4 r7 B[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd rm replicapool/csi-vol-387b2608-61f7-11eb-b9c5-0e28ddb26a3c
5 P- U9 G# j; q8 H- L& @Removing image: 100% complete...done.
& Y5 f3 w1 ~7 w! H' W4 C' S% z p12345678
7 @3 K D( m9 Z1 B将new image name重命名为old image name 4 O; z7 A, }& e
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd rename replicapool/test-v3 replicapool/csi-vol-387b2608-61f7-11eb-b9c5-0e28ddb26a3c
. e9 n& v: i8 v# r) \) K1
! S) k; V, q7 U& b8 H, o+ f" e启动pod
' }: f% v4 X* I3 j修改pod的yaml文件,将spec: replicas: 副本数由0改回原值$ H0 n$ f' M; a% O- u! A; r
1
( Z6 T; V8 F& ~0 @FAQ: ! @( I% b2 D/ K# f7 v: ]/ F
rbd 删除image时,报错“rbd: image has snapshots - these must be deleted with ‘rbd snap purge’ before the image can be removed”
) D8 U j- _) v. m( Z[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd rm replicapool/csi-vol-387b2608-61f7-11eb-b9c5-0e28ddb26a3c
4 L* _7 Z1 t* q: Q8 t' LRemoving image: 0% complete...failed.: l- W" w2 }* g# e
rbd: image has snapshots - these must be deleted with 'rbd snap purge' before the image can be removed.
# H# G+ j- h, }; V: Q123 * T) ?" b" F* h4 D5 m5 I2 z
解决方法:执行’rbd snap purge’删掉image相关snapshots
; w/ ]2 s& n5 z" Crbd 删除image时,报错“rbd: error: image still has watchers” " f1 T, L% R+ B
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd rm replicapool/csi-vol-6ee1b63a-6060-11eb-b9c5-0e28ddb26a3c+ u! R" p) M% N/ n: {0 L
2021-01-29T06:22:09.698+0000 7fe4677fe700 -1 librbd::image::PreRemoveRequest: 0x55a645137470 check_image_watchers: image has watchers - not removing
( n/ J1 t% g) t2 k! y8 K: URemoving image: 0% complete...failed.+ }: a! U( b4 c% s! k' k9 e$ K6 ~: R4 g
rbd: error: image still has watchers
. z& M+ K; c. s. ?5 `8 w% p+ dThis 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.
B/ T/ `6 z$ i$ G, z* L12345
- q5 w8 G+ ~+ S( L4 U解决方法:删除使用image的pod(修改pod的yaml文件,将spec: replicas: 副本数改为0): _$ `2 R; f9 ^, u7 U
|
|