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

楼主 |
发表于 2022-6-17 17:23:36
|
显示全部楼层
3、 快照导出的文件导入为新的RBD image % l$ ~5 k3 }# t
快照的恢复过程使用的是刚刚上面提到的备份到本地的那些文件. 现在假如想恢复到v3那个快照的时间点,那么可以用两个方法 方法1:直接基于v3的时间点的快照做恢复 方法2:直接基于v1的时间点的数据,和后面的增量的v1-v3数据(要按顺序导入)
4 H- W* D/ m9 K4 U3.1增量导入:rbd import-diff ) u b8 K/ a0 m
#方法1:直接基于v3的时间点的快照做恢复
6 B! j) _% q) i1 U8 T#首先随便创建一个image,名称大小都不限制,因为后面恢复的时候会覆盖掉大小的信息# h3 a, _: z# ]) p
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd create replicapool/resume-v1 --size 1 |# Z/ c8 j" M
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import-diff csz-busybox-v3 replicapool/resume-v1 Importing image diff: 100% complete...done.
& S1 c! Y2 }& g; w, l4 f: M9 F, L: f[root@rook-ceph-tools-6f5694c655-hzpj5 /]#0 ~5 z# ]( I8 E4 T7 |
#方法2: 基于v1+ v1_v3数据恢复
; [. W+ B B8 b# t#首先随便创建一个image,名称大小都不限制,因为后面恢复的时候会覆盖掉大小的信息
* d- d. M. U6 b7 F[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd create replicapool/resume-v3 --size 1
0 t, _9 h" m5 ~, `[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import-diff csz-busybox-v1 replicapool/resume-v3
, i0 |- J" G4 {" |+ P4 }Importing image diff: 100% complete...done.- K7 J# n% W% f
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import-diff csz-busybox-v1-v3 replicapool/resume-v3
+ ~6 X! D5 i" t) |; o9 K. n1234567891011
9 [$ I' i, W( ^4 s7 B 实际项目当中就是,定期做快照,然后导出某个时间点快照的数据,然后导出增量的快照的数据,就可以了
% q3 @% `, U2 V' o% {' Q3.2全量导入:rbd import
; _7 @# [8 G$ y v! Z注:不用提前创建目标image,否则rbd import会报错
3 `" n E! c# W/ Q, D! Z& m0 z: Z" |[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd create replicapool/resume-full --size 1" Q/ Q- V: ]. y+ m! |
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import-diff csz-busybox-full replicapool/resume-full7 l& _" `& |' N1 N/ k8 G
rbd: invalid or unexpected diff banner
% u8 Q, `' o& y Q- m; z+ l7 N2 ~6 Nrbd: import-diff failed: (22) Invalid argument! W2 j, h @5 R
[root@rook-ceph-tools-6f5694c655-hzpj5 /]#
" J) r, o8 d- g6 v[root@rook-ceph-tools-6f5694c655-hzpj5 /]#2 w. @1 h% k/ b& c4 b
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import csz-busybox-full replicapool/resume-full
! T/ D$ R5 F o( ^rbd: image creation failed
, o( _6 q; P& ]" O4 ^$ EImporting image: 0% complete...failed.
! h% _ L( J7 W* D- a( C6 C/ Vrbd: import failed: 2021-01-29T02:11:56.790+0000 7fdfdcb4b500 -1 librbd: rbd image resume-full already exists
+ l: E- t5 H. o(17) File exists6 a7 }9 W+ I% a' l; K6 i, Y$ m( g
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd import csz-busybox-full replicapool/resume-full1, g5 f) g R1 Q( Q& U* G
Importing image: 100% complete...done.* y4 v o+ X O
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# W) H) K& {/ z
1234567891011121314
5 x5 a& }: h' n1 u+ v7 N 四、如何利用这个 实际项目当中就是,定期做快照,然后导出某个时间点快照的数据,然后导出增量的快照的数据,就可以了,例如: 今天对所有的rbd的image做一个基础快照,然后导出这个快照的数据,然后从今天开始,每天晚上做一个快照,然后导出快照时间点之间的数据,这样每天导出来的就是一个增量的数据了,在做恢复的时候,就从第一个快照导入,然后按顺序导入增量的快照即可,也可以定期做一个快照,导出完整的快照数据,以防中间的增量快照漏了,然后就是要注意可以定期清理快照,如果是做备份的模式,在导入了快照数据后,也可以清理一些本地的数据,本地数据做异地机房复制的时候也可以做一下数据的压缩,来减少数据量的传输 $ f: A3 N6 c9 w% Z: W$ M# i9 b5 F' \
客户端验证:将RBD image恢复到pod
/ f9 a8 ^$ L5 ?7 g; |% _/ a思路:将新的image name重命名rename成原来的image name
' }& |0 N! j$ n" U) e9 \$ }7 t" K/ E9 l删除旧的image $ U) Q9 z0 m4 |
# Step1:停掉pod对image的使用: Z I( u% Y7 H5 G4 v: V
修改pod的yaml文件,将spec: replicas: 副本数改为0
2 U& O& f% T% n' B" `- g* g# Step2:清空旧image的snapshots6 l: e) \- f( d
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd snap purge replicapool/csi-vol-387b2608-61f7-11eb-b9c5-0e28ddb26a3c
. l# v! x& {0 c( k) `7 PRemoving all snapshots: 100% complete...done.
4 W8 @3 l/ D0 G7 `$ ~: D# m1 V# Step3:删除旧的image
$ Y" D2 W# u1 V& x4 G# m1 I[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd rm replicapool/csi-vol-387b2608-61f7-11eb-b9c5-0e28ddb26a3c
8 o: y8 R' Y+ ]% b5 R' n" Y& nRemoving image: 100% complete...done.
& h( R( @8 Z# k; D% w! F12345678 * j4 Q( T( V/ R% Y( v/ v' U* `
将new image name重命名为old image name
4 |' f8 L; y" |; j* T/ l[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd rename replicapool/test-v3 replicapool/csi-vol-387b2608-61f7-11eb-b9c5-0e28ddb26a3c. E9 q! H3 }. S' v% {6 d
1 3 c- _, {- K* m$ Y% W9 a6 E
启动pod % n9 j) q( E3 o# J, m% K
修改pod的yaml文件,将spec: replicas: 副本数由0改回原值. e9 o" c0 w; T' M6 V/ |
1 " E! V2 u1 q1 S& r, s8 W
FAQ: ( K8 F2 M5 H6 S! N# v/ r: x2 }
rbd 删除image时,报错“rbd: image has snapshots - these must be deleted with ‘rbd snap purge’ before the image can be removed”
: p$ U4 c7 j' E' {- Y$ A9 u[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd rm replicapool/csi-vol-387b2608-61f7-11eb-b9c5-0e28ddb26a3c
% {2 {; ^& D/ y2 p$ c) YRemoving image: 0% complete...failed.
! e) ]& Y6 S2 v- [; X- `rbd: image has snapshots - these must be deleted with 'rbd snap purge' before the image can be removed.
- p3 I0 Q9 d6 n123
) l5 Z% c3 L5 E3 x# t+ S. Y解决方法:执行’rbd snap purge’删掉image相关snapshots
: |/ t% V4 r9 [) U3 o: \rbd 删除image时,报错“rbd: error: image still has watchers” , O9 N+ J; I" y. D8 V) V8 P+ K
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd rm replicapool/csi-vol-6ee1b63a-6060-11eb-b9c5-0e28ddb26a3c$ i7 n$ M/ `* ^( W; h- t7 g1 V7 R; w
2021-01-29T06:22:09.698+0000 7fe4677fe700 -1 librbd::image::PreRemoveRequest: 0x55a645137470 check_image_watchers: image has watchers - not removing
0 }: _8 {7 k' A; Y' y! L: g, WRemoving image: 0% complete...failed.
$ _- |; F) I, E; U* v/ d* Srbd: error: image still has watchers
, q- q1 \, a$ |4 JThis 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.
( C# {; |. n" P8 b7 b$ w# n12345 ( }. _7 v+ y2 c3 j) }/ `' L+ N
解决方法:删除使用image的pod(修改pod的yaml文件,将spec: replicas: 副本数改为0)+ P# Y* w' }& ~& q7 ? ~
|
|