美文网首页Ovirt程序员
【Ovirt 笔记】出现 external VM 情况分析

【Ovirt 笔记】出现 external VM 情况分析

作者: 58bc06151329 | 来源:发表于2017-04-25 23:13 被阅读5次

    分析整理的版本为 Ovirt 3.4.5 版本。

    出现场景:

    1. 一般出现在迁移过程中,迁移接近完成时,在源主机上准备删除对应的 .recovery 文件,此时主机上出现重启,或者断电等,导致 vdsm 上的 .recovery 文件没有删除。
      • 但是尝试直接拷贝 .recovery 到另一台主机上,没有出现 externalVm 情况。
    2. 另一种情况是,强制删除数据中心,主机挂到另外的数据中心中,主机上还有运行的 vm,并没有关掉,此时也会出现对应的 externalVm

    实现原理

    • 定时执行 VdsUpdateRunTimeInfo
    • 变量 _runningVms:通过 List 或者 getAllVmStats 获取 vdsm 上运行的 VM。
    • 变量 _vmDict:数据库的 VM,需要运行在指定的主机上。
    • 变量 _externalVmsToAdd 记录 external 的 VM。
    • 追踪 vm 状态 的线程会定时执行方法:refreshVmStats

    调用 processExternallyManagedVms 方法。

    • 首先遍历 _runningVms,根据 id 在 vm_Dict 中查找,如果没有查找到,则接着在数据库中在 query 一次,还是没有就加入到 vmsToQuery 队列 。
    • 而后通过带参数的 list(String isFull, String[] vmIds),查询 vmsToQuery 队列中 vm 列表的详细信息。
    • 根据返回信息值,组装新的 vmStatic 对象,而后加入到 _externalVmsToAdd 列表 。
    • 最后在 saveDataToDb 方法中,通过 AddVmFromScratchCommand 将这些虚拟机加入到数据库中。

    解决方案

    • 删除主机上的 QEMU 进程。
    • 删除对应 ID 的 externalVm .recovery 文件。
    • 然后在 engine 界面上删除 external 虚拟机。

    相关文章

      网友评论

        本文标题:【Ovirt 笔记】出现 external VM 情况分析

        本文链接:https://www.haomeiwen.com/subject/fkdpzttx.html