首页 > 其他分享 >OpenStack跨CPU热迁移失败处理

OpenStack跨CPU热迁移失败处理

时间:2022-11-30 12:55:18浏览次数:46  
标签:cpu nova CPU host OpenStack 迁移 libvirt model

1. 注释libvirt的CPU检测代码

  • 所有计算节点

vim /usr/lib/python3/dist-packages/nova/virt/libvirt/driver.py
'''
9342         #try:
9343         #    if not instance.vcpu_model or not instance.vcpu_model.model
9344         #        source_cpu_info = src_compute_info['cpu_info']
9345         #        self._compare_cpu(None, source_cpu_info, instance)
9346         #    else:
9347         #        self._compare_cpu(instance.vcpu_model, None, instance)
9348         #except exception.InvalidCPUInfo as e:
9349         #    raise exception.MigrationPreCheckError(reason=e)
'''

2. 更改CPU配置

  • openstack 默认情况下virt_type使用的是"kvm"。该模式一下,CPU model支持如下是那种配置
    • host-passthrough:libvirt 令 KVM 把宿主机的 CPU 指令集全部透传给虚拟机。因此虚拟机能够最大限度的使用宿主机 CPU 指令集,故性能是最好的。但是在热迁移时,它要求目的节点的 CPU 和源节点的一致。
    • host-model: libvirt 根据当前宿主机 CPU 指令集从配置文件 /usr/share/libvirt/cpu_map.xml 选择一种最相配的 CPU 型号。在这种 mode 下,虚拟机的指令集往往比宿主机少,性能相对 host-passthrough 要差一点,但是热迁移时,它允许目的节点 CPU 和源节点的存在一定的差异。
    • custom:这种模式下虚拟机 CPU 指令集数最少,故性能相对最差,但是它在热迁移时跨不同型号 CPU 的能力最强。此外,custom 模式下支持用户添加额外的指令集。该模式下,需要同时配置cpu_model选项。该选项的值,参考/usr/share/libvirt/cpu_map.xml。

2.1 方案1

  • host-passthrough模式
vim /etc/nova/nova-compute.conf
[libvirt]
virt_type=kvm
cpu_mode=host-passthrough

2.2 方案2

  • host-model模式
vim /etc/nova/nova-compute.conf
[libvirt]
virt_type=kvm
cpu_mode=host-model

2.3 方案3

  • custom模式。由于我们使用的是Gold 6230CPU,采用的是Skylake-SP核心,所以我们测试的时候cpu_model选择Skylake-Server。
vim /etc/nova/nova-compute.conf
[libvirt]
virt_type=kvm
cpu_mode=custom
cpu_model=Haswell
  • 这里主要采用方案2,如果不成功则用方案3

3. 注意点

  • 1. 跨CPU可能会导致迁移过去发生错乱,导致实例启动不了,使用硬重启即可处理

  • 2.采用冷迁移则不会出现以上问题

标签:cpu,nova,CPU,host,OpenStack,迁移,libvirt,model
From: https://www.cnblogs.com/wsxier/p/16938082.html

相关文章