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

楼主 |
发表于 2022-6-17 17:23:36
|
显示全部楼层
3、 快照导出的文件导入为新的RBD image 5 ^, [1 [* p! m, `3 A z
快照的恢复过程使用的是刚刚上面提到的备份到本地的那些文件. 现在假如想恢复到v3那个快照的时间点,那么可以用两个方法 方法1:直接基于v3的时间点的快照做恢复 方法2:直接基于v1的时间点的数据,和后面的增量的v1-v3数据(要按顺序导入)
/ a0 c9 T, w6 J3.1增量导入:rbd import-diff
5 j* y1 x* x# A#方法1:直接基于v3的时间点的快照做恢复
0 d# Z0 F' ?9 B: j5 ?, g7 b#首先随便创建一个image,名称大小都不限制,因为后面恢复的时候会覆盖掉大小的信息& ~) f; @- A- `
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd create replicapool/resume-v1 --size 1
) [; o: Z/ N* M" u1 _7 H$ @[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import-diff csz-busybox-v3 replicapool/resume-v1 Importing image diff: 100% complete...done.7 F, x, |- a8 e/ e* Q4 f$ g. X* h/ ^
[root@rook-ceph-tools-6f5694c655-hzpj5 /]#: O" s5 F5 j! U1 \
#方法2: 基于v1+ v1_v3数据恢复( R- {: f6 O! y3 I; L
#首先随便创建一个image,名称大小都不限制,因为后面恢复的时候会覆盖掉大小的信息$ ^- m+ L/ d/ H. i- A, U
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd create replicapool/resume-v3 --size 17 t: Q& y3 [3 i6 m5 W$ H2 R& Q
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import-diff csz-busybox-v1 replicapool/resume-v3/ g" m' N4 R/ n' F4 Y7 Z; o
Importing image diff: 100% complete...done.7 _3 L% A) L" E' P! H/ E
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import-diff csz-busybox-v1-v3 replicapool/resume-v3% e- `, E- |9 R8 E' u
1234567891011 : E5 G& y9 [! z4 i- n
实际项目当中就是,定期做快照,然后导出某个时间点快照的数据,然后导出增量的快照的数据,就可以了 " ]% Y: o% R2 s+ u, y6 O
3.2全量导入:rbd import ( `" |- m" l8 r8 _9 w! D
注:不用提前创建目标image,否则rbd import会报错
& E& v! \. G, H9 _' c[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd create replicapool/resume-full --size 1
. O6 X. T8 k* c* ]5 Y. [+ d; l[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import-diff csz-busybox-full replicapool/resume-full
& Z, I( \9 I5 e5 W; ~* Q; Krbd: invalid or unexpected diff banner
) N2 K$ T( j, B) Irbd: import-diff failed: (22) Invalid argument$ g$ y4 C! ^0 V% P" r
[root@rook-ceph-tools-6f5694c655-hzpj5 /]#
7 F: P# ^" E" w[root@rook-ceph-tools-6f5694c655-hzpj5 /]#
) |6 h; E4 R1 X[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import csz-busybox-full replicapool/resume-full
( }8 `. h, R7 H. M: Arbd: image creation failed
8 o; N0 P- f( O* s4 s+ ]: jImporting image: 0% complete...failed.
+ z1 B# V' f s: @4 T8 [' yrbd: import failed: 2021-01-29T02:11:56.790+0000 7fdfdcb4b500 -1 librbd: rbd image resume-full already exists
# X8 [/ z4 k7 B, H8 l(17) File exists
$ L8 y( a% g* p6 s! L# P( G[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import csz-busybox-full replicapool/resume-full19 L; ]0 b8 V! D2 W, {. u
Importing image: 100% complete...done.1 ~7 c4 f! d& c. O$ S7 [
[root@rook-ceph-tools-6f5694c655-hzpj5 /]#
6 @+ c+ n0 c0 X1 A; u; s4 n! i1234567891011121314 ~9 ^1 D$ Y8 |) e s$ j/ `4 i% L
四、如何利用这个 实际项目当中就是,定期做快照,然后导出某个时间点快照的数据,然后导出增量的快照的数据,就可以了,例如: 今天对所有的rbd的image做一个基础快照,然后导出这个快照的数据,然后从今天开始,每天晚上做一个快照,然后导出快照时间点之间的数据,这样每天导出来的就是一个增量的数据了,在做恢复的时候,就从第一个快照导入,然后按顺序导入增量的快照即可,也可以定期做一个快照,导出完整的快照数据,以防中间的增量快照漏了,然后就是要注意可以定期清理快照,如果是做备份的模式,在导入了快照数据后,也可以清理一些本地的数据,本地数据做异地机房复制的时候也可以做一下数据的压缩,来减少数据量的传输 3 ~( M; |4 E e1 h) |
客户端验证:将RBD image恢复到pod
4 P1 r0 U5 I: C( |思路:将新的image name重命名rename成原来的image name
6 \* W. }3 n( _3 n* L删除旧的image
0 s5 x) Q+ i3 {5 ]+ L/ ]# Step1:停掉pod对image的使用
, R& F0 T2 q3 L3 m4 C! ~修改pod的yaml文件,将spec: replicas: 副本数改为0
0 I! A# ?4 c4 G, ?" t# Step2:清空旧image的snapshots6 ^- J) c2 i3 X
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd snap purge replicapool/csi-vol-387b2608-61f7-11eb-b9c5-0e28ddb26a3c
5 [; z; @( n# C4 v3 f9 mRemoving all snapshots: 100% complete...done.
G5 E; G' i, E% v# Step3:删除旧的image( R$ ?5 N, S0 c7 P; t
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd rm replicapool/csi-vol-387b2608-61f7-11eb-b9c5-0e28ddb26a3c* {3 p( X5 f# y# n
Removing image: 100% complete...done.
1 I8 \" \5 s7 @! z4 B$ }3 b( e' P+ p12345678 ' N* e; M$ c, u: S
将new image name重命名为old image name 6 F% P. K9 j& @" F
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd rename replicapool/test-v3 replicapool/csi-vol-387b2608-61f7-11eb-b9c5-0e28ddb26a3c) }: P/ @( b8 B* z7 ?5 \' {
1 , L" C: {! m B# S
启动pod
8 D7 D" f$ L/ W [修改pod的yaml文件,将spec: replicas: 副本数由0改回原值8 B2 Q0 z: ~4 G. f: z8 Y
1 + I2 h; ~" W5 p7 a" L6 e! h
FAQ:
6 U. n6 ?4 N1 }9 srbd 删除image时,报错“rbd: image has snapshots - these must be deleted with ‘rbd snap purge’ before the image can be removed” # f1 ~3 T( u# X
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd rm replicapool/csi-vol-387b2608-61f7-11eb-b9c5-0e28ddb26a3c
( ~: o B7 [3 z5 x/ wRemoving image: 0% complete...failed.
/ T. ?4 v7 Y" L; `+ ]rbd: image has snapshots - these must be deleted with 'rbd snap purge' before the image can be removed.' h, e) B( _! s! ^9 s8 }$ o
123
& e- }! R6 v$ n' @解决方法:执行’rbd snap purge’删掉image相关snapshots
4 v* l' U* M+ Z& f; Q3 Erbd 删除image时,报错“rbd: error: image still has watchers” 1 u$ a5 l6 P( U( k8 u4 Y- @8 M
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd rm replicapool/csi-vol-6ee1b63a-6060-11eb-b9c5-0e28ddb26a3c
( R% c1 D6 i& \( A2021-01-29T06:22:09.698+0000 7fe4677fe700 -1 librbd::image::PreRemoveRequest: 0x55a645137470 check_image_watchers: image has watchers - not removing1 L! `& y8 E) k& c4 A, C
Removing image: 0% complete...failed.
0 }; _ u# K ?5 b P p4 drbd: error: image still has watchers. p' u/ d% H5 N1 G' M: E% m( }
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./ _( p9 x4 {3 v# ]
12345 V" E, }, n9 l9 q* n. s: G$ b, ]
解决方法:删除使用image的pod(修改pod的yaml文件,将spec: replicas: 副本数改为0)
1 H1 v) Q( A2 f0 b |
|