4. vMotion兼容性检查与前置条件
vMotion 能否成功,并不取决于迁移向导点得有多快,而取决于源主机、目标主机、虚拟机以及共享存储之间是否满足一组硬性兼容条件。只要其中任意一项不成立,迁移就会在预检查阶段被拒绝,或在切换瞬间失败。本节围绕四类前置条件展开:CPU 兼容性、EVC 基线、虚拟机硬件版本、主机与存储兼容性验证,并给出可执行的检查方法与判断依据。
一、CPU 兼容性:vMotion 的第一道门槛
vMotion 在切换瞬间,虚拟机的运行状态(寄存器、内存、设备状态)要从源主机的物理 CPU 迁移到目标主机的物理 CPU 上继续执行。因此目标主机的 CPU 必须能够提供源主机 CPU 已经暴露给虚拟机的全部指令集特性。若源主机 CPU 支持某条指令(如 AVX2、AES-NI、SSE4.2),而目标主机不支持,虚拟机在目标主机上继续运行时就会触发非法指令异常,导致迁移失败或虚拟机崩溃。
判断 CPU 兼容性的核心依据是 vSphere 的“CPU 兼容性掩码”。ESXi 会为每台主机生成一组 CPU 特性掩码,vCenter 在迁移前会比较源与目标主机的掩码。当目标主机缺少源主机已暴露的特性时,迁移被阻止,并给出类似“目标主机缺少 CPU 特性”的提示。实际工程中,同一集群内混用不同代际 CPU(如 Intel Haswell 与 Skylake、AMD EPYC 7002 与 7003)是最常见的兼容性冲突来源。
检查方法:在 vSphere Client 中选中主机 →“配置”→“处理器”,查看 CPU 型号与特性;或使用命令行查看主机 CPU 信息:
[root@esxi01:~] esxcli hardware cpu list
CPU:0
Id: 0
Family: 6
Model: 85
Stepping: 7
Brand: Intel(R) Xeon(R) Gold 6248 CPU @ 2.50GHz
...
[root@esxi01:~] vim-cmd hostsvc/hosthardware | grep -i cpuFeature
更直接的方式是使用 vCenter 的“CPU 兼容性”对比功能:选中源主机与目标主机,右键选择“比较 CPU 兼容性”,系统会列出两者共有的特性与差异特性,差异项即为迁移风险点。
二、EVC 基线:让异构 CPU 在集群内“说同一种语言”
EVC(Enhanced vMotion Compatibility)通过向虚拟机屏蔽高于基线级别的 CPU 特性,使集群内不同代际的 CPU 对外表现出一致的指令集。例如,将集群 EVC 基线设为“Intel Haswell”,则即使集群中有 Skylake 主机,虚拟机也只能看到 Haswell 级别的特性,从而保证任意两台主机之间都能互相迁移。
EVC 的关键约束是:基线只能向下兼容,不能向上。若集群中有一台主机不支持所选基线,该主机无法加入集群。因此 EVC 基线应设置为集群中“最老一代 CPU”所支持的级别。常见基线包括 Intel Nehalem、Westmere、Sandy Bridge、Ivy Bridge、Haswell、Broadwell、Skylake,以及 AMD 的 Opteron Gen 1、Bulldozer、Piledriver、Zen 等。
启用 EVC 后,虚拟机在迁移时不再因 CPU 特性差异被拒绝,但代价是较新 CPU 的高级指令集对虚拟机不可见,可能影响加密、压缩、AI 推理等依赖新指令的工作负载性能。因此 EVC 是“兼容性优先”的取舍,需结合业务对性能的敏感度决定。
检查方法:在集群 →“配置”→“VMware EVC”中查看当前基线;若集群未启用 EVC,则需逐台主机比较 CPU 兼容性。启用 EVC 前,必须确保所有主机处于维护模式或已关闭虚拟机,因为 EVC 变更需要重启主机或虚拟机才能生效。
三、虚拟机硬件版本:迁移能力的“版本契约”
虚拟机硬件版本(VM Hardware Version,vmx-XX)决定了虚拟机支持的功能集,也决定了它能否在目标主机上运行。目标主机的 ESXi 版本必须支持该虚拟机硬件版本。例如,硬件版本 vmx-19 需要 ESXi 7.0 及以上;vmx-20 需要 ESXi 7.0 U2 及以上;vmx-21 需要 ESXi 8.0 及以上。若目标主机 ESXi 版本过低,迁移会被拒绝。
此外,硬件版本还影响 vMotion 的可用特性。例如,硬件版本 9 及以上支持 vMotion 期间的多队列、硬件版本 11 及以上支持 vGPU 迁移等。在跨版本迁移场景中,建议先确认源与目标主机的 ESXi 版本,再核对虚拟机硬件版本是否在目标主机支持范围内。
检查方法:在虚拟机 →“摘要”中查看“虚拟机硬件版本”;或使用 PowerCLI 批量查询:
Get-VM | Select-Object Name, HardwareVersion, @{N='Host';E={$_.VMHost.Name}} | Format-Table -AutoSize
若硬件版本过高,可通过“升级虚拟机兼容性”调整,但升级后无法回退,且需虚拟机重启。因此升级前应确认目标主机版本,避免升级后反而无法迁移到旧主机。
四、主机与存储兼容性验证
主机层面的兼容性还包括:目标主机是否在 vCenter 中处于“已连接”状态、是否处于维护模式、是否具有足够的 CPU 与内存资源、是否启用了 vMotion 所需的 VMkernel 端口。vMotion 流量默认走 VMkernel 的 vMotion 服务,源与目标主机的 vMotion VMkernel 接口必须互通,且带宽满足迁移需求。
存储兼容性则要求源与目标主机都能访问虚拟机所在的存储。对于共享存储(FC、iSCSI、NFS、vSAN),只要两台主机都挂载了同一数据存储,迁移时无需复制磁盘文件,仅传输内存状态,速度最快。若使用本地存储,则必须使用 Storage vMotion 或共享存储迁移,否则无法迁移。此外,目标主机必须支持数据存储的格式(VMFS 版本、NFS 版本、vSAN 版本),且存储策略在目标主机上可满足。
检查方法:在迁移向导的“兼容性检查”页面,vCenter 会自动列出所有不满足的条件,包括 CPU、EVC、硬件版本、存储、网络、资源等。也可使用命令行验证 vMotion 网络连通性:
[root@esxi01:~] vmkping -I vmk1 192.168.100.12
PING 192.168.100.12 (192.168.100.12): 56 data bytes
64 bytes from 192.168.100.12: icmp_seq=0 ttl=64 time=0.312 ms
其中 vmk1 为 vMotion VMkernel 接口,192.168.100.12 为目标主机 vMotion 地址。若 ping 不通,需检查 VMkernel 端口、VLAN、路由与防火墙规则。
上图把四类前置条件与迁移路径放在同一视图中:源主机与目标主机通过 vMotion 网络互通,虚拟机磁盘位于双方均可访问的共享存储上,CPU 特性、EVC 基线与硬件版本三项必须同时满足,迁移才能进入内存传输阶段。任何一项不满足,vCenter 都会在兼容性检查页面给出明确提示,工程人员应据此逐项排查,而不是反复重试迁移向导。