|
|
楼主 |
发表于 2022-6-17 17:23:36
|
显示全部楼层
3、 快照导出的文件导入为新的RBD image
4 [; z$ u; Z0 w6 K# M快照的恢复过程使用的是刚刚上面提到的备份到本地的那些文件. 现在假如想恢复到v3那个快照的时间点,那么可以用两个方法 方法1:直接基于v3的时间点的快照做恢复 方法2:直接基于v1的时间点的数据,和后面的增量的v1-v3数据(要按顺序导入) & y- i j- _3 e ?1 b9 M% l
3.1增量导入:rbd import-diff ; x4 R$ j( a7 L' J
#方法1:直接基于v3的时间点的快照做恢复3 l" b- J D6 i+ o! `" Q9 \( e
#首先随便创建一个image,名称大小都不限制,因为后面恢复的时候会覆盖掉大小的信息3 d8 ?# ]4 w% S
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd create replicapool/resume-v1 --size 1 , U/ I. w, W4 A+ @1 `; @
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import-diff csz-busybox-v3 replicapool/resume-v1 Importing image diff: 100% complete...done. c6 o' `% m/ F v; @! R
[root@rook-ceph-tools-6f5694c655-hzpj5 /]#
3 d5 A1 q# p& ^0 ~6 T$ x- |" D/ t: T8 ^#方法2: 基于v1+ v1_v3数据恢复3 [4 N4 i3 M$ V7 x ^
#首先随便创建一个image,名称大小都不限制,因为后面恢复的时候会覆盖掉大小的信息& n/ }) M( Y8 {2 v, B2 R$ f1 @
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd create replicapool/resume-v3 --size 1- D3 n. E: v2 m4 M6 W2 K* n
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import-diff csz-busybox-v1 replicapool/resume-v3
" D3 a7 V2 F0 fImporting image diff: 100% complete...done." _) a6 {% [- {: J$ n
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import-diff csz-busybox-v1-v3 replicapool/resume-v3
4 B# [2 o+ I% _- T4 {# z1234567891011 - Q* S. L$ w; Y- o' ?5 ?
实际项目当中就是,定期做快照,然后导出某个时间点快照的数据,然后导出增量的快照的数据,就可以了 ; e# T( @/ F3 _$ v" x5 @5 k L0 G
3.2全量导入:rbd import
/ h# ?7 C9 g8 B7 |) B注:不用提前创建目标image,否则rbd import会报错
# V. }# M, @8 ]/ Z# A' D* _3 @. v[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd create replicapool/resume-full --size 1$ u1 Z" r1 b3 K: g
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import-diff csz-busybox-full replicapool/resume-full
3 ~" S2 Q* n% [0 W3 G" s& wrbd: invalid or unexpected diff banner$ r N8 i4 D2 b
rbd: import-diff failed: (22) Invalid argument' j% V8 x5 x4 k1 U* u( k y
[root@rook-ceph-tools-6f5694c655-hzpj5 /]#$ i7 @$ u8 V& Y4 M& W9 z. p o! A% s
[root@rook-ceph-tools-6f5694c655-hzpj5 /]#4 ]$ M+ K9 b8 y. H) Z) _6 H9 B( }
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import csz-busybox-full replicapool/resume-full
# o: i. Z) D" v& q! C+ Erbd: image creation failed
9 K# v3 M6 A5 y3 v2 j) ?' u! aImporting image: 0% complete...failed.
% A1 b% V4 r" |6 brbd: import failed: 2021-01-29T02:11:56.790+0000 7fdfdcb4b500 -1 librbd: rbd image resume-full already exists
# A+ s6 ]2 N |4 j( Y(17) File exists
; L5 u0 E6 V& E- P7 @, t& Z[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import csz-busybox-full replicapool/resume-full1
: H: o% P9 ], B, Y3 z0 R: g4 kImporting image: 100% complete...done.7 u7 H! e5 l$ s& q! [3 Z3 G
[root@rook-ceph-tools-6f5694c655-hzpj5 /]#
& f) `; s; E+ g* @1234567891011121314 ! ]9 Z- ?. c9 c/ G v
四、如何利用这个 实际项目当中就是,定期做快照,然后导出某个时间点快照的数据,然后导出增量的快照的数据,就可以了,例如: 今天对所有的rbd的image做一个基础快照,然后导出这个快照的数据,然后从今天开始,每天晚上做一个快照,然后导出快照时间点之间的数据,这样每天导出来的就是一个增量的数据了,在做恢复的时候,就从第一个快照导入,然后按顺序导入增量的快照即可,也可以定期做一个快照,导出完整的快照数据,以防中间的增量快照漏了,然后就是要注意可以定期清理快照,如果是做备份的模式,在导入了快照数据后,也可以清理一些本地的数据,本地数据做异地机房复制的时候也可以做一下数据的压缩,来减少数据量的传输 / `7 h$ A. E% p5 i
客户端验证:将RBD image恢复到pod
3 `3 {! j$ B* U. u* \9 s6 N思路:将新的image name重命名rename成原来的image name 7 ` Q" n, I' c& i
删除旧的image
* g W2 ~. a! G( @# Step1:停掉pod对image的使用
2 E3 f- W6 u6 T修改pod的yaml文件,将spec: replicas: 副本数改为08 T) d( e" m/ G8 j( _" k" D
# Step2:清空旧image的snapshots
6 e1 S7 k4 o6 G( }[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd snap purge replicapool/csi-vol-387b2608-61f7-11eb-b9c5-0e28ddb26a3c- j& u& c& ^5 A- l
Removing all snapshots: 100% complete...done.
" W1 Z% Y Q( ^* Q" ]" V# Step3:删除旧的image
3 S8 y: N: ~ f Y[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd rm replicapool/csi-vol-387b2608-61f7-11eb-b9c5-0e28ddb26a3c. Q! n |6 ?8 Y3 {) j3 V6 N. m6 g
Removing image: 100% complete...done.
@& l t! P' c1 P. t" Q4 d) K12345678
9 p/ s. e$ r$ N/ A# O将new image name重命名为old image name - `1 y) F o, Z5 \
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd rename replicapool/test-v3 replicapool/csi-vol-387b2608-61f7-11eb-b9c5-0e28ddb26a3c
' t+ B, y2 _) g$ J1 4 V8 ^! W8 L8 s' L1 Y
启动pod 1 Z" W% C' j$ J. C* c
修改pod的yaml文件,将spec: replicas: 副本数由0改回原值
# a+ k5 W& ?+ h, Z# i9 h/ u1 ' _5 O7 C# [, f2 D5 y8 i3 O3 _
FAQ: 6 g$ s- h( N" F1 _6 ^( Q
rbd 删除image时,报错“rbd: image has snapshots - these must be deleted with ‘rbd snap purge’ before the image can be removed” - l. W7 k7 m1 W* x" H
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd rm replicapool/csi-vol-387b2608-61f7-11eb-b9c5-0e28ddb26a3c1 P9 v4 ^! {; p9 x1 l* ?4 b; ^6 C1 P
Removing image: 0% complete...failed. X. _! E L8 s5 V" C0 v
rbd: image has snapshots - these must be deleted with 'rbd snap purge' before the image can be removed.
G; j' E9 T/ ^123
; M2 l& }* H; I8 x6 @" G* A解决方法:执行’rbd snap purge’删掉image相关snapshots ; O6 k1 @4 I U2 z
rbd 删除image时,报错“rbd: error: image still has watchers”
5 {: V& m5 M1 ]1 J( [1 J' N; @[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd rm replicapool/csi-vol-6ee1b63a-6060-11eb-b9c5-0e28ddb26a3c# X h: |- d5 u5 X0 _# j3 v. F/ v1 u
2021-01-29T06:22:09.698+0000 7fe4677fe700 -1 librbd::image::PreRemoveRequest: 0x55a645137470 check_image_watchers: image has watchers - not removing9 W* T, k k' @, n7 A
Removing image: 0% complete...failed.
0 T8 }2 X1 t9 i/ e% A8 mrbd: error: image still has watchers. n1 _$ o+ `& w/ l, X! L% T
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.
! m3 I4 S* I2 ^$ L& e" ?12345
! p4 m$ ?: ?8 `: D( I! v3 u解决方法:删除使用image的pod(修改pod的yaml文件,将spec: replicas: 副本数改为0)
# }) E/ D0 e0 I+ z: E+ a |
|