场景:原有 OpenStack 环境的平台层面的数据库云主机数据被意外删掉,但是 ceph 上的虚拟机磁盘文件还存在,此时虚拟机上的业务还是可以正常运行,只是在 OpenStack 界面无法查看到虚拟机信息。想要恢复原来的所有云主机信息,要求机器信息和原平台保持完全一样,即界面看到的镜像、配置和 IP 不能改变。
思路:只要 ceph 存储还在,业务数据就没丢失,只需要重新创建虚拟机,然后把 OpenStack 平台上的主机 UUID 和 Ceph 的 volume uuid 重新对应起来即可。
有 3 种方法:
1、从 Ceph 上导出虚拟机磁盘文件,然后导入该磁盘文件到 OpenStack 平台做为镜像,以该镜像重新创建虚拟机。该种方案是不经过大脑思考的方案:一是导出和导入镜像效率极低,二是平台上会产生太多新镜像。
2、在原平台上恢复(操作不当易产生脏数据);
3、重新部署个新平台,从头恢复(所有数据都要重新生成)。
方案 2 和方案 3 各有优劣,下面以方案 3(新建 OpenStack 平台)为例,列举恢复的关键步骤。
单台云主机恢复步骤:
0、重新部署一套 OpenStack 环境,导入和原平台相同的基础镜像;
1、在新平台上创建和原环境同样配置的虚拟机(镜像和 flavor 一样);
2、对新建的虚拟机绑定和原环境一样的浮动 IP
nova floating-ip-associate4950b904-b0d9-49e4-b7d8-30c51e154bc4 172.17.16.93
3、在 Ceph 上,根据新环境虚拟机的 uuid 查询虚拟机磁盘文件
rbd ls volumes | grep4950b904-b0d9-49e4-b7d8-30c51e154bc4
4、重命名新环境虚拟机的磁盘文件
rbd mv volumes/4950b904-b0d9-49e4-b7d8-30c51e154bc4_diskvolumes/4950b904-b0d9-49e4-b7d8-30c51e154bc4_disk.bak
5、在 Ceph 上,根据老环境虚拟机的 uuid 查询虚拟机磁盘文件
rbd ls volumes | grep4b37fec6-c32d-493c-ad60-fdd946ed31c8
6、重命名老环境虚拟机的磁盘文件为新环境虚拟机的磁盘文件
rbd mv volumes/4b37fec6-c32d-493c-ad60-fdd946ed31c8_diskvolumes/4950b904-b0d9-49e4-b7d8-30c51e154bc4_disk
7、在新平台上硬重启虚拟机,即可完全恢复原来的虚拟机。
8、确认恢复正常后,在 Ceph 上删除掉所有老环境虚拟机对应的磁盘文件。(此步要特别慎重!)
如果要批量恢复所有记录被误删的云主机,只需要把上述步骤封装到一个脚本里,批量执行即可。
本文转自:新钛云服