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是对应的操作 |