在openstack的测试中,经常发现虚拟机状态不匹配的情况。一般情况下dashboard上和数据库中的信息是一致的,在虚拟机所在的计算节点使用virsh查看到的状态会和数据库中的不一致。
请帮忙讲解一下这个里面有什么机制,或者虚拟机信息在数据库中的更新这块如何在源码里面追踪OpenStack虚拟机

解决方案 »

  1.   

    以前用过kvm虚拟机的都应该知道,virsh是使用libvirt库开发的一套管理虚拟机包括虚拟资源的软件。
    openstack里面应该也是直接调用libvirt库的python实现来维护自己的数据库的。至于dashboard,那就是使用openstack的api,自然就是从opentack自己的数据库里面取数据的。这个是我的理解,因为不是搞开发的,没读过太多openstack源代码,只是从经验上来猜测。
      

  2.   

    嗯。对虚拟机的操作确实是通过libvirt来执行的,在虚拟机状态这部分,openstack跟libvirt的同步好像还不是很完善,准备到源码里看看细节。
      

  3.   

    我的理解是,openstack和virsh是同一概念上的东西,他们都是利用了libvirt库来封装的软件,只能说openstack和virsh不同步,当然,他们是两个东西,也没必要同步吧。
      

  4.   

    virsh的状态和libvirt报告的是一回事。libvirt的状态经过简单抽象变成power_state. power_state会定期向数据库更新。
    代码在 nova.compute.manager.ComputeVirtAPI._sync_power_states