|
|
楼主 |
发表于 2022-7-20 13:38:27
|
显示全部楼层
其他方式文档介绍::1 Q4 ] S# H! O% ]+ C3 A' G. f
创建云盘volume-id,大小为1G9 `# I1 t5 ]1 _4 |# `2 M) G
$ S+ G* b Y, o2 P/ i* {4 e4 L: @()[root@busybox-openstack-f7bcf88-hgdkz /]# rbd create volumes/volume-id --size 1G
) _0 T: Y( t% G3 N4 v% {()[root@busybox-openstack-f7bcf88-hgdkz /]# rbd ls -l volumes |grep volume-id
# ~1 X7 r/ M: h& _: m1 i: Q) X7 Y; ivolume-id 1GiB 2 3 l2 X! g1 Z4 U. M
2 x9 j2 I! D$ S/ q7 \5 [7 z. C9 L" Q
2. 先尝试进行diff store, 创建backups中的base盘
5 u4 e- I( H7 U3 A2 f# r' q
- w, Z+ S7 q" A- P4 }$ u()[root@busybox-openstack-f7bcf88-hgdkz /]# rbd create backups/volume-volume-id.backup.base --size 1G
" V) ?8 V* X5 o: e3 A()[root@busybox-openstack-f7bcf88-hgdkz /]# rbd ls -l backups6 _9 z I& M) j% _8 } f0 b
NAME SIZE PARENT FMT PROT LOCK : |* Z" S, S- o( d. ^8 P0 `1 u9 ^8 `
volume-volume-id.backup.base 1GiB 2
. ^2 W0 Q8 w6 l7 _1 Y( P6 k5 |3 s* E, c j$ f" \* e+ e" V0 I/ Q7 U% R
% O. e& {6 N& m3 q' g9 o$ [; r a3. 创建volume-id快照1,命名规则如下
z w3 ` _$ r! }/ h+ }" z: }& M2 H; L; M j3 ]" a$ C
()[root@busybox-openstack-f7bcf88-hgdkz /]# rbd snap create volumes/volume-id@backup.backup-id.snap.time1
; d" v/ j# U2 m% j5 U()[root@busybox-openstack-f7bcf88-hgdkz /]# rbd ls -l volumes |grep volume-id1 l2 o9 \: c/ f/ K
volume-id 1GiB 2 9 B; x" v& |9 h( d7 v3 M2 n
volume-id@backup.backup-id.snap.time1 1GiB 2 1 S7 V* Y3 M; n0 E/ v
) Q8 C- ?* u0 A P# d. k' G
! e: x x0 B4 F; _. \( F/ ]( b4. 导出云盘和快照1的差异10 q' j4 D- v0 {( t
$ h8 g- Z4 H5 u; ?2 p()[root@busybox-openstack-f7bcf88-hgdkz /]# rbd export-diff volumes/volume-id@backup.backup-id.snap.time1 test_diff_snap_time1
6 v0 p2 S) E- y3 \0 G- d: Y; ~& IExporting image: 100% complete...done.! ^5 P. w% r$ T' m
()[root@busybox-openstack-f7bcf88-hgdkz /]# ls# {, | x& r$ f e, m
test_diff_snap_time1
. K7 ^4 E7 ]# e; i8 @9 u9 t0 X0 c8 H0 g2 f7 L
4 d M# s* t6 L5. 将差异1导入到backups的base盘中,此时base盘生成了一个快照# f5 u) `; J' d" N
E- _6 h' {' P0 {()[root@busybox-openstack-f7bcf88-hgdkz /]# rbd import-diff test_diff_snap_time1 backups/volume-volume-id.backup.base' V& ]. I+ G' s4 Y `5 w5 G8 z0 j
Importing image diff: 100% complete...done.0 h, x# _7 t2 x; Y
()[root@busybox-openstack-f7bcf88-hgdkz /]# rbd ls -l backups! t0 u$ M+ p) z& V9 x3 |
NAME SIZE PARENT FMT PROT LOCK ) G* G/ I5 h7 s- S' c! x8 O- g
volume-volume-id.backup.base 1GiB 2
, n- P. J% @* z- C' W% z. b' ^# Uvolume-volume-id.backup.base@backup.backup-id.snap.time1 1GiB 2 7 m8 y4 n6 a4 [6 r- p/ _* @
" w3 q' }4 L v7 z+ l* ~. J" r% C# b0 \$ Z. v, q
6. 第二次做增量备份时, 创建volume-id新的快照2+ I* l, b0 Y4 c( n$ F% {
" c6 F* I! N' |; h# }' u1 ^()[root@busybox-openstack-f7bcf88-hgdkz /]# rbd snap create volumes/volume-id@backup.backup-id2.snap.time2! O1 w9 E) N# Z# {, |$ c
()[root@busybox-openstack-f7bcf88-hgdkz /]# rbd ls -l backups
Q* n# f. C; M8 L eNAME SIZE PARENT FMT PROT LOCK % ^7 j6 [" l0 I& }7 N
volume-volume-id.backup.base 1GiB 2
3 h& t, d1 J# P$ qvolume-volume-id.backup.base@backup.backup-id.snap.time1 1GiB 2 " y! s$ d4 b, M" P) l6 m
()[root@busybox-openstack-f7bcf88-hgdkz /]# rbd ls -l volumes |grep volume-id& b5 Y# [/ p! d& G) P5 |6 [" v
volume-id 1GiB 2
9 a6 g7 d: y) P ^volume-id@backup.backup-id.snap.time1 1GiB 2 ; z6 i; n. v& i) X( ?
volume-id@backup.backup-id2.snap.time2 1GiB 2
a) ?, S" \" B* Z1 f3 S; ^. H) E9 l, I
; ^+ V* j6 k$ r/ g7 F7. 导出快照1和快照2的差异22 G/ k- `8 E8 C
i) K+ G1 h' P) S: f
()[root@busybox-openstack-f7bcf88-hgdkz /]# rbd export-diff --snap backup.backup-id.snap.time1 volumes/volume-id@backup.backup-id2.snap.time2 test_diff_snap_time1_time2
: p5 v# j/ z9 {Exporting image: 100% complete...done.
" v# J% H) [" U0 E
$ b; g7 O/ G5 z8 X8. 将差异2导入backups的base盘,此时base盘又生成了一个新的快照
& [1 c" a% R+ g1 i( n! C6 X/ O1 ?: G7 Z# g
()[root@busybox-openstack-f7bcf88-hgdkz /]# rbd import-diff test_diff_snap_time1_time2 backups/volume-volume-id.backup.base6 x" }' Z1 [5 q& K
Importing image diff: 100% complete...done.
( {) H$ |0 w6 h3 k()[root@busybox-openstack-f7bcf88-hgdkz /]# rbd ls -l backups! {" ~+ [2 d8 i2 X0 ~- i
NAME SIZE PARENT FMT PROT LOCK * H2 a/ L1 S; d
volume-volume-id.backup.base 1GiB 2 * w. u9 {" D3 r" R
volume-volume-id.backup.base@backup.backup-id.snap.time1 1GiB 2
& {. } o3 s' z1 F* ovolume-volume-id.backup.base@backup.backup-id2.snap.time2 1GiB 2
: e' ]1 } c* c4 i* {! {& f2 Q5 b1 L" ^2 s/ X2 T
; [1 X3 T& X* Y, R$ r# \# I9. 删除volume-id的快照1* X6 M& n8 r# J/ b- X5 Y7 z
3 k( U& C$ @$ Z1 T8 s0 d
10. 如果diff store出现异常, 会通过full store来备份, 通过将云盘按照chunk=128M分片拷贝数据到新的云盘。
* {* y8 g* y4 T$ O4 r* M3 M
/ q# }0 l' T) {, q# W11. 备份元数据
. c2 b0 k/ a5 _4 e* v4 a3 _* k, m+ X1 I. ~' |
三 RBD恢复备份的实现:; m" u+ u: G: C5 F
1 先检查是否满足diff restore, 需要满足下面条件
- E2 ]: U' h$ W3 P* J* j. A. f
check can diff restore:
+ Y- W' J' ?4 A" f1 base exist: backups/volume-volume-id.backup.base
+ s! V; W/ H: \% w1 \2 restore point snapshot exist: backups/volume-volume-id.backup.base@backup.backup-id.snap.time12 L- F4 Q3 ^- V/ E! E1 }
3 volume file is rbd8 z, R# J3 c% d: W, E
4 backup[volume_id] != new volume_id# g2 F7 z. y) y/ z/ M5 Z( t5 ]
5 rbd volume has no extents (extend)" W* Y" F- o5 F& v4 P+ I
, Y* L/ \1 A- X ^9 R# n3 G+ [! n/ }8 {% `7 \. Y
2. 如果满足diff restore条件, 先导出对应backup-id的差异
' R0 b9 \# S0 x8 v7 T
$ w* I( i4 N8 f# E2 B7 |()[root@busybox-openstack-5c687fdc9-mpwjd /]# rbd export-diff backups/volume-volume-id.backup.base@backup.backup-id1.snap.time1 test_diff_backup_id2
( \! I# v* ~3 s2 O$ Q ?# ?; d1 YExporting image: 100% complete...done.% N3 R8 I7 j, G* L# s
7 u* c9 p( z: L5 u$ X. R& t; p4 z7 e3 q
. z$ C% ^0 x+ ^$ F7 J
3. 将对应backup-id的差异导入new-volume-id' ^; k0 N V, N' Z' z; H( p
. Z4 t( T5 H9 J5 l2 O1 G$ C) W6 u+ T()[root@busybox-openstack-5c687fdc9-mpwjd /]# rbd import-diff test_diff_backup_id2 volumes/new-volume-id
/ ]" q7 c' u+ N# n" W5 `+ l# g) CImporting image diff: 100% complete...done.' h1 f q, d3 X7 U
()[root@busybox-openstack-5c687fdc9-mpwjd /]# rbd ls -l volumes
1 H0 r0 m1 ~+ m' ^8 T# sNAME SIZE PARENT FMT PROT LOCK
4 S/ c) _4 J i0 \+ j0 V( Qnew-volume-id 1GiB 2
; {3 r3 j# |) h, w2 y" D: unew-volume-id@backup.backup-id1.snap.time1 1GiB 2 ; \2 n& y6 w4 e" z; O: y V4 W1 r
volume-id 1GiB 2
, {- c- u$ ^' Q$ u7 l; H5 Gvolume-id@backup.backup-id1.snap.time1 1GiB 2
5 Z2 f/ B7 x( o( c& L- E- M1 ?# z: L! _8 A% }
2 P, f. V/ O i7 ?# Z
4. 如果new volume的大小与备份的大小不一致,导入差异后需要resize。 f1 |# N2 M; k4 }
' C: O/ i+ l# j K1 L# }) o
()[root@busybox-openstack-5c687fdc9-mpwjd /]# rbd create volumes/new-volume-id2 --size 2G+ ~5 R$ O. B; G5 h' V4 I$ N
()[root@busybox-openstack-5c687fdc9-mpwjd /]# rbd import-diff test_diff_backup_id2 volumes/new-volume-id2
4 ?# }5 B9 H- @; J* x0 \4 ]0 j7 |Importing image diff: 100% complete...done.! t# Z9 h. H& n
()[root@busybox-openstack-5c687fdc9-mpwjd /]# rbd ls -l volumes
) v9 I& [' s' W# p5 gNAME SIZE PARENT FMT PROT LOCK ' R& f2 P1 r4 `: Q* O* [0 T% ~
new-volume-id 1GiB 2
. Q( R, W8 ?0 V$ B0 x. Pnew-volume-id@backup.backup-id1.snap.time1 1GiB 2
, {- r; j$ e- x" O: Y- unew-volume-id2 1GiB 2 6 L8 a; |2 a! j8 M; _& c; [
new-volume-id2@backup.backup-id1.snap.time1 1GiB 2
: c/ j% i) b6 j) Z$ `& y1 qvolume-id 1GiB 2
9 P& u: |0 M: Lvolume-id@backup.backup-id1.snap.time1 1GiB 2
- \+ w+ l) E: g1 z& i( \()[root@busybox-openstack-5c687fdc9-mpwjd /]# 1 g3 \" ~- V* `
()[root@busybox-openstack-5c687fdc9-mpwjd /]# rbd resize volumes/new-volume-id2 --size 2G
( v( X, m! P0 Z8 OResizing image: 100% complete...done.
/ E: n4 _& N" A3 E()[root@busybox-openstack-5c687fdc9-mpwjd /]# rbd ls -l volumes
$ k" R! n# D/ I" H; H6 fNAME SIZE PARENT FMT PROT LOCK
; x# ~, j8 b4 |% }$ K0 Gnew-volume-id 1GiB 2
, N( e( Q; |5 ^new-volume-id@backup.backup-id1.snap.time1 1GiB 2 . m, E# c, b3 H" `1 _- L
new-volume-id2 2GiB 2 : ]0 J8 z- L( E- |/ M4 A
new-volume-id2@backup.backup-id1.snap.time1 1GiB 2 9 ~8 J) l W6 S% M5 a% s7 r
volume-id 1GiB 2 + U N; p. }0 K+ R+ e& U2 h
volume-id@backup.backup-id1.snap.time1 1GiB 2 2 N6 s P6 G8 P5 |4 h
* J; I0 U7 T1 N+ T
* w3 \- M- e- |9 U+ e9 R
9 n, j6 r% J' b- ]* u5. 如果不满足diff restore条件,或者在diff restore过程中出现异常,进行full restore, 通过将云盘按照chunk=128M分片拷贝数据到新的云盘。
0 d. b2 ^' k f2 C& t4 ?6 q1 J$ o. f6 [2 z6 P9 i& C0 r
6. 恢复元数据 |
|