转载请联系:郭晋兵 guojb@cloudbin.cn
(本文采用关闭虚拟机的安全备份方法)
本文主要介绍基于ceph的云主机如何进行关机备份恢复。 备份前关闭虚拟机可以保持数据一致性。
一、备份前的准备
- 登录虚拟机,关闭应用
- 登录虚拟机,关闭要备份的虚拟机。Windows用关机按钮,Linux用#shutdown -r now命令
- 检查虚拟机状态是关机的
- 从网页登录检查: http://192.168.1.36

- 从后台命令登录检查

- 断开要备份的云硬盘的映射关系


- 记录云主机的UUID


- 记录云硬盘的UUID


二、备份云主机系统盘
在本项目的环境中,虚拟机所有的硬盘都在ceph存储上,所以每块硬盘的备份方法一致。
- 登录后台,查看ceph存储池


可以看到,我们要备份的硬盘分布在compute和volumes两个池中。
compute 11 241G 3.62 1584G 61956 //云主机系统盘池
volumes 4 206G 3.10 1584G 52965 //云硬盘池
- 通过云主机的UUID查找系统盘在compute中的位置。
# rbd -p <pool> ls |grep <instance-ID>
比如OA云主机的UUID是c0c662a3-5c65-4795-b76f-6497778f70b0

找到云主机在ceph的中的位置后,通过rbd命令进行导出,导出时要指定目录和数据导出后的镜像名称,方便以后查找:
rbd export -p <pool> <instance-ID_disk> /<dir>/<file>
注意,导出前要检查可用空间,导出目录要选择在存储上,以免系统空间不够导致备份失败。


三、备份云硬盘
- 主机备份完毕后,开始备份云硬盘,云硬盘在备份时要先进行卸载;
参见第一节的卸载云硬盘方法。卸载后,检查如下:

- null
- 通过云主机的UUID查找系统盘在volumes中的位置。
# rbd -p <pool> ls |grep <instance-ID>
比如OA云主机的UUID是c0c662a3-5c65-4795-b76f-6497778f70b0

- 找到云硬盘在ceph的中的位置后,通过rbd命令进行导出,导出时要指定目录和数据导出后的镜像名称,方便以后查找:
rbd export -p <pool> <instance-ID_disk> /<dir>/<file>
注意,导出前要检查可用空间,导出目录要选择在v5000存储上,以免系统空间不够导致备份失败。

四、备份虚拟机配置
- 备份虚拟机的name、flavor、network等配置信息。可以从Horizon截图或者后台命令导出。

五、后续操作
- 完整性校验:
md5sum -c <file.md5sum>
- 压缩备份的文件。因为备份文件是稀疏文件,有很大的压缩比, 可以转换为qcow2格式保存。
Qemu-img convert -O qcow2 input output
六、恢复虚拟机
- 恢复虚拟机之前,要查看目前虚拟机的状态
- 虚拟机正常启动。挂载云硬盘,启动虚拟机。
- 虚拟机配置还在,可以开关机,但是数据损坏或者不需要保留。这种情况只需要恢复数据盘,做数据覆盖。直接跳到第六节。
- 虚拟机配置损坏,不能开关机。这种情况需要按照备份的配置重新创建虚拟机和云硬盘,然后做数据覆盖。在后端为ceph的集群中,创建云主机和云硬盘,为了保证一致性,新创建的云主机和云硬盘的name、flavor、network等配置要尽量相同;
- 解压做备份,验证md5
Qemu-img convert -O raw input output
md5sum -c <file.md5sum>
- 在ceph中找到虚拟机系统盘和云硬盘相应的位置;
rbd -p <poolname> ls |grep <instance-ID>
rbd -p <poolname> ls |grep <volume-ID>
- 找到新创建的云主机和云硬盘对应的磁盘后,将其删除:
rbd -p <poolname> rm <instance-ID/volume-ID>
- 然后将迁移过来的云主机和云硬盘镜像,替换为已删除的新创建的云主机和云硬盘的磁盘名称将其导入:
rbd import -p <pool name> <instance-ID/volume-ID> <(new)nstance-ID/volume-ID>

参考
- https://docs.openstack.org/cinder/latest/admin/blockstorage-backup-disks.html
感谢Suo Guang Yu和Zhao Jie的支持。
2018.12.10