RBD备份分为两种:
- 一种是全备
- 另外一种是增量备份
RBD全备
全备操作
export
命令。
这里我创建一个快照,并且将快照导出成一个单独的镜像。然后我们挂载上去使用。
查看我们所有的镜像
# rbd -p kubernetes ls
ceph-temp.img
...
查看当前快照列表
# rbd snap ls kubernetes/ceph-temp.img
SNAPID NAME SIZE PROTECTED TIMESTAMP
13 temp 10 GiB Wed Jan 17 10:50:23 2024
创建快照
# rbd snap create kubernetes/ceph-temp.img@bak_2024-01-17
执行export导出
# rbd export kubernetes/ceph-temp.img@bak_2024-01-17 /root/ceph-bak.img
Exporting image: 100% complete...done.
此时我们数据已经备份完毕。
RBD全量数据恢复
首先我们需要将原来的挂载点进行卸载
# umount /mnnt
恢复RBD备份 import
# rbd import /root/ceph-bak.img kubernetes/ceph-bak.img
Importing image: 100% complete...done.
# rbd -p kubernetes ls
ceph-bak.img
刚刚已经在rbd中可以看到对应的ceph-bak.img
文件,我们在进行挂载即可
# rbd device map kubernetes/ceph-bak.img
/dev/rbd5
# mount /dev/rbd5 /mnnt
RBD增量备份
对于增量备份,常用于ceph异地备份,或者kvm、OpenStack相关备份。可以减少空间占用大小。可以写成定时脚本,定时基于全备添加增量的备份。
RBD增量备份
增量备份使用的参数为export-diff
首先我们先创建增量的快照
[root@ceph-01 ~]# rbd device map kubernetes/ceph-bak.img #添加镜像映射
/dev/rbd1
[root@ceph-01 ~]# mount /dev/rbd1 /mnnt #挂载
[root@ceph-01 ~]# cd /mnnt/
[root@ceph-01 mnnt]# ls
1 110 122 134 146 158 17 181 193 24 36 48 6 71 83 95
10 111 123 135 147 159 170 182 194 25 37 49 60 72 84 96
100 112 124 136 148 16 171 183 195 26 38 5 61 73 85 97
101 113 125 137 149 160 172 184 196 27 39 50 62 74 86 98
102 114 126 138 15 161 173 185 197 28 4 51 63 75 87 99
103 115 127 139 150 162 174 186 198 29 40 52 64 76 88 lost+found
104 116 128 14 151 163 175 187 199 3 41 53 65 77 89 seq
105 117 129 140 152 164 176 188 2 30 42 54 66 78 9
106 118 13 141 153 165 177 189 20 31 43 55 67 79 90
107 119 130 142 154 166 178 19 200 32 44 56 68 8 91
108 12 131 143 155 167 179 190 21 33 45 57 69 80 92
109 120 132 144 156 168 18 191 22 34 46 58 7 81 93
11 121 133 145 157 169 180 192 23 35 47 59 70 82 94
接下来为rbd文件添加全量备份
# rbd snap create kubernetes/ceph-bak.img@all_bak_2024-01-17 # 创建快照
# rbd snap ls kubernetes/ceph-bak.img #查看快照
SNAPID NAME SIZE PROTECTED TIMESTAMP
15 all_bak_2024-01-17 10 GiB Wed Jan 17 15:20:08 2024
# rbd export kubernetes/ceph-bak.img@all_bak_2024-01-17 /root/ceph-bak_all_bak_2024-01-17.img #导出快照
Exporting image: 100% complete...done.
# ll /root/ceph-bak_all_bak_2024-01-17.img -h #查看快照大小,目前快照大写10个G
-rw-r--r-- 1 root root 10G Jan 17 15:21 /root/ceph-bak_all_bak_2024-01-17.img
全量备份添加完毕后,我们在创建新数据,充当增量备份.
#上面是我们之前的数据,现在我们在创建200个文件
# for i in `seq 200`;do touch $i.log;done
接下来做增量的备份 (增量备份恢复的时候也是要基于全量做备份)
# 增量备份也是要添加快照,我们在创建一个快照
# rbd snap ls kubernetes/ceph-bak.img
SNAPID NAME SIZE PROTECTED TIMESTAMP
17 all_bak_2024-01-17 10 GiB Wed Jan 17 15:24:04 2024
# rbd snap create kubernetes/ceph-bak.img@new_v1 #新new_v1快照
# rbd snap ls kubernetes/ceph-bak.img #查看所有快照
SNAPID NAME SIZE PROTECTED TIMESTAMP
17 all_bak_2024-01-17 10 GiB Wed Jan 17 15:24:04 2024
18 new_v1 10 GiB Wed Jan 17 15:25:54 2024
目前all_bak_2024-01-17
为全量的快照,new_v1
为增量备份的快照。
接下来导出快照:
# rbd export-diff kubernetes/ceph-bak.img@new_v1 /root/ceph_new_v1.img #导出增量备份文件
Exporting image: 100% complete...done.
# ls -lh /root/ceph_new_v1.img #查看增量备份文件
-rw-r--r-- 1 root root 18M Jan 17 15:26 /root/ceph_new_v1.img
可以看到增量备份文件只有大概18M
,全量备份文件为10G
对于增量备份,常用于ceph异地备份,或者kvm、OpenStack相关备份,可以减少空间占用大小。
RBD增量数据恢复
前面已经说了RBD的增量备份,增量备份完成我们就需要考虑如何进行增量恢复数据
首先RBD增量数据恢复需要安装顺序进行恢复,即v1,v2,v3,v4 按照顺序进行恢复
即如果全量数据有影响,首先恢复全量数据
再恢复增量v1、增量v2、增量v3 以此类推
数据恢复可以恢复新的镜像中,也可以在原有的镜像恢复
恢复到老的镜像名称中
下面我们将RBD增量备份
生成的.log
文件删除,然后使用import-diff
命令实现增量恢复。
我这里演示的是在全量数据没有受影响的情况下,只删除增量备份前的数据进行恢复
# 前往挂载点,删除*.log文件
[mnnt]# rm -rf *.log
执行增量恢复
# rbd -p kubernetes ls #确认需要恢复镜像
kubernetes-rbd.img
ceph-bak.img
ceph-temp.img
ceph-test-01.img
ceph-test-02.img
ceph-test-03.img
ceph-trash.img
# rbd snap ls kubernetes/ceph-bak.img #查看镜像快照
SNAPID NAME SIZE PROTECTED TIMESTAMP
10 all_bak_2022-03-10 10 GiB Mon Mar 14 14:04:33 2022
11 new_v1 10 GiB Mon Mar 14 14:09:20 2022
#我刚刚已经把new_v1备份前的数据删除,也就是目前是缺少new_v1的快照数据
使用import-diff
恢复到kubernetes/ceph-bak.img
镜像中
目前的文件夹:
# ls /mnnt/
1 110 122 134 146 158 17 181 193 24 36 48 6 71 83 95
10 111 123 135 147 159 170 182 194 25 37 49 60 72 84 96
100 112 124 136 148 16 171 183 195 26 38 5 61 73 85 97
101 113 125 137 149 160 172 184 196 27 39 50 62 74 86 98
102 114 126 138 15 161 173 185 197 28 4 51 63 75 87 99
103 115 127 139 150 162 174 186 198 29 40 52 64 76 88 lost+found
104 116 128 14 151 163 175 187 199 3 41 53 65 77 89 seq
105 117 129 140 152 164 176 188 2 30 42 54 66 78 9
106 118 13 141 153 165 177 189 20 31 43 55 67 79 90
107 119 130 142 154 166 178 19 200 32 44 56 68 8 91
108 12 131 143 155 167 179 190 21 33 45 57 69 80 92
109 120 132 144 156 168 18 191 22 34 46 58 7 81 93
11 121 133 145 157 169 180 192 23 35 47 59 70 82 94
恢复的时候我们需要把快照名称删除
# rbd snap rm kubernetes/ceph-bak.img@new_v1
Removing snap: 100% complete...done.
# rbd snap ls kubernetes/ceph-bak.img
SNAPID NAME SIZE PROTECTED TIMESTAMP
17 all_bak_2024-01-17 10 GiB Wed Jan 17 15:24:04 2024
# 如果不删除快照名称,会提示我们恢复的快照已经存在
# rbd import-diff /root/ceph_new_v1.img kubernetes/ceph-bak.img #执行恢复
Importing image diff: 100% complete...done.
# rbd snap ls kubernetes/ceph-bak.img
SNAPID NAME SIZE PROTECTED TIMESTAMP
17 all_bak_2024-01-17 10 GiB Wed Jan 17 15:24:04 2024
22 new_v1 10 GiB Wed Jan 17 15:40:13 2024
# 接下来我们重新mount
[root@ceph-01 ~]# umount -lf /mnnt/
[root@ceph-01 ~]# mount /dev/rbd6 /mnnt
[root@ceph-01 ~]# cd /mnnt/
可以看到,删除的.log
都回来啦:
# ls /mnnt
1.log 11.log 120.log 131.log 142.log 153.log 164.log 175.log 186.log 197.log 27.log 38.log 49.log 6.log 70.log 81.log 92.log
10.log 110.log 121.log 132.log 143.log 154.log 165.log 176.log 187.log 198.log 28.log 39.log 5.log 60.log 71.log 82.log 93.log
100.log 111.log 122.log 133.log 144.log 155.log 166.log 177.log 188.log 199.log 29.log 4.log 50.log 61.log 72.log 83.log 94.log
101.log 112.log 123.log 134.log 145.log 156.log 167.log 178.log 189.log 2.log 3.log 40.log 51.log 62.log 73.log 84.log 95.log
...
恢复到新的镜像名称中
目前我们将ceph-bak.img镜像做了全备和增量备份,我们现在需要将这块镜像恢复到一个名为ceph-bak-new.img中
# rbd snap ls kubernetes/ceph-bak.img
SNAPID NAME SIZE PROTECTED TIMESTAMP
17 all_bak_2024-01-17 10 GiB Wed Jan 17 15:24:04 2024
26 new_v1 10 GiB Wed Jan 17 15:44:44 2024
# 导出文件我们依旧采用之前的
# ll -h /root/ceph-bak_all_bak_2024-01-17.img
-rw-r--r-- 1 root root 10G Mar 14 14:05 /root/ceph-bak_all_bak_2022-03-10.img
# ll -h /root/ceph_new_v1.img
-rw-r--r-- 1 root root 18M Jan 17 15:43 /root/ceph_new_v1.img
开始恢复数据,需要先恢复全量数据
# rbd import /root/ceph-bak_all_bak_2024-01-17.img kubernetes/ceph-bak-new.img #恢复全备文件
Importing image: 100% complete...done.
# 接下来开始恢复增量备份
# rbd import-diff /root/ceph_new_v1.img kubernetes/ceph-bak-new.img
Importing image diff: 100% complete...done.
此时我们可以看一下新镜像的快照
# rbd snap ls kubernetes/ceph-bak-new.img
SNAPID NAME SIZE PROTECTED TIMESTAMP
27 new_v1 10 GiB Wed Jan 17 16:20:19 2024
# 这里只包含一个增量的备份,因为这个系统是基于全量备份,所以看不到全量的镜像
接下来我们进行映射挂载
# rbd device map kubernetes/ceph-bak-new.img
/dev/rbd2
# mkdir /new
# mount /dev/rbd2 /new
数据如下
# ls /new
1.log 11.log 120.log 131.log 142.log 153.log 164.log 175.log 186.log 197.log 27.log 38.log 49.log 6.log 70.log 81.log 92.log
10.log 110.log 121.log 132.log 143.log 154.log 165.log 176.log 187.log 198.log 28.log 39.log 5.log 60.log 71.log 82.log 93.log
100.log 111.log 122.log 133.log 144.log 155.log 166.log 177.log 188.log 199.log 29.log 4.log 50.log 61.log 72.log 83.log 94.log
101.log 112.log 123.log 134.log 145.log 156.log 167.log 178.log 189.log 2.log 3.log 40.log 51.log 62.log 73.log 84.log 95.log
...
我们可以看一下挂载点,数据是一模一样的:
# df -h
Filesystem Size Used Avail Use% Mounted on
...
/dev/rbd1 9.8G 37M 9.2G 1% /mnnt # 旧镜像
/dev/rbd2 9.8G 37M 9.2G 1% /new # 新镜像
# rbd device ls
id pool namespace image snap device
1 kubernetes ceph-bak.img - /dev/rbd1 #旧
2 kubernetes ceph-bak-new.img - /dev/rbd2 #新