nova rescue原理笔记

说明:场景示例,虚机的启动盘的一个文件被误删除了导致无法再次启动了,或者 admin 的密码忘记了。Rescue 功能提供一个解决这类问题的手段。

备注:21.0.0版本前,不能rescue 一个 volume-backed instance

需要确认rescure前的云主机为runing状态,rescure途中不能进行关机,重启,挂亲等操作

前提

默认情况下,实例从提供的救援映像或新的映像启动 原始实例映像的副本(如果未提供救援映像)。根源 磁盘和可选的重新生成的配置驱动器也连接到实例 用于数据恢复。

从 21.0.0 版本开始,可以使用额外的稳定设备救援模式。 此模式现在支持卷备份实例的救援。


要执行实例救援,请使用 openstack server rescue 命令:

openstack server rescue SERVER
 

当实例运行在rescue模式时,不可执行Pause, suspend, 与stop 操作,这些行为会造成实例原始状态丢失,并且会导致无法对实例unrescue.


在运行 openstack server rescue 命令时, 实例首先执行软关闭。这意味着 客户机会先关闭操作系统再关闭电源。 关机行为由可在nova.conf文件中的shutdown_timeout字段配置。 它的值代表允许客户机操作系统完成关闭时间。

os_shutdown_timeout字段可以基于每个映像覆盖超时值 通过它是一个图像元数据 允许不同类型的操作系统指定的设置 他们需要多少时间才能彻底关闭。

要拯救从卷启动的实例,您需要使用 2.87 微版本或更高版本。

openstack --os-compute-api-version 2.87 server rescue SERVER
如果要使用特定映像来拯救实例,而不是 默认一个,使用参数:--image

openstack server rescue --image IMAGE_ID SERVER
要从普通启动盘重新启动实例,请运行以下命令 命令:

openstack server unrescue SERVER

 

执行 nova rescue 命令后的主要过程是:

(1)保存目前domain 的 xml 配置到 unrescue.xml 文件

(2)根据 image 重新生成启动盘 disk.swap (大小不受 falvor.root_disk_size 控制,尽可能小的一个文件)

(3)构造一个新的 domain 的 xml 配置,使用 disk.rescue 做启动盘,将原来的 disk 挂载到该 domain,其他的盘和volume不会被挂载

(4)将原来的 domain destroy 掉 (virt_dom.destroy)

(5)定义新的 domain (conn.defineXML(xml))

(6)启动新的 domain (domain.createWithFlags)

至此,nova rescue 的过程完成。用户可以 ssh 到新的虚机,修改 “Vdb“分区中的受损害的文件。然后执行 ”nova unrescue“命令。其主要过程是:

(1)读取之前保存的 unrescue.xml 文件

(2)将 rescued domain destroy 掉

(3)定义和启动新的domain(同上面5和6)

(4)删除 unrescue.xml 文件

注意,这时候文件夹中的 libvirt.xml 文件和新运行的 domain 的 xml 不一致,因为代码中没有将新的 domain 的xml 写到该文件。

 

参考:nova Rescue 和 Unrescue - allcloud - 博客园 (cnblogs.com)

Rescue an instance — nova 29.1.0.dev15 documentation (openstack.org)

posted @ 2024-04-16 15:24  咿呀哒喏  阅读(24)  评论(0编辑  收藏  举报