1 OpenStack虚拟机三种操作

 1.1 挂起和恢复(suspend和resume)

挂起:

openstack中的挂起(suspend)操作是将虚拟机的内存保存到磁盘中,会释放虚拟机在宿主机中的资源。调用libvirt中的方法是managedSave(0)方法,会将虚拟机的内存信息保存到/var/lib/libvirt/qemu/save/目录下。如果虚拟机再次启动的时候,会自动从该目录下,用内存文件启动;启动完成之后,该文件会自动消失。

恢复:

openstack中对挂起的虚拟机进行恢复的时候,直接调用libvirt中的lanch方法启动虚拟机。

1.2 暂停(pause)和取消暂停(unpause)

暂停:

openstack中的暂停,是直接调用libvirt中的suspend方法,该方法是将内存信息放到宿主机中的内存中。

取消暂停:

openstack中的取消暂停,是直接调用libvirt中的resume方法,将宿主机中的内存信息恢复到虚拟机中。

1.3 搁置(shelve)和取消搁置(unshelve)

搁置(shelve):

搁置虚拟机的目的是:

将长时间不适用的虚拟机从底层释放,从而可以节约服务器资源。

使用的场景是:对于一些长时间不使用的虚拟机,即使处于关机状态,仍然会占用着集群资源,在公有云上,用户欠费时间很长,但又没有及时主动删除虚拟机,导致一直占据主机资源。此时可以通过shelve(搁置)操作临时释放资源。

一般分为两种情况:

(1) 如果虚拟机是从glance image创建的(即:boot from volume),则先给虚拟机创建一个快照并上传到glance中的images池中,然后把虚拟机占用的资源从openstack集群中删除。

(2) 如果虚拟机从cinder colume后端创建的(boot from volume),则删除虚拟机占用的物理资源,但是不会删除磁盘,只是把磁盘的状态变为保留(reserved)。

取消搁置(unshelve):就是用原来搁置打的快照重新创建一个虚拟机,但是这会经过重新调度的流程,即不一定会创建到原有的宿主机中。

2. 三种操作比较

openstack和libvirt方法比较

openstack概念

libvirt方法

挂起(suspend)

managedSave(0)

恢复(resume)

lanch

暂停(pause)

susend

取消暂停(unpause)

resume

搁置(shelve)

取消搁置(unshelve)

可以看出,openstack中的概念和libvirt中的方法,有点相反。libvirt中的suspend不会将虚拟机内存保存到磁盘中的,只有manageSaved方法才会将内存信息保存到磁盘中。

libvirt中内存保存方法比较:

save()

虚拟机内存到磁盘,之后虚拟机变为shutdown状态。该方法必须指定保存路径

restore()

和save()方法配合使用,是特定内存文件启动虚拟机,传入的参数是内存文件的路径。

managedSave

该方法和save()方法类似,区别在于保存到/var/lib/libvirt/qemu/save路径下,之后虚拟机为shutdown状态;若虚拟机再次启动时,会主动从该文件启动。

suspend

搁置虚拟机,只不过不会保存内存信息到磁盘中

unsuspend

取消搁置,和suspend是对应的操作