获取验证码
很多运维人员在把集群从ESXi7.0滚动升级到8.0版本后,发现原有DRS VM‑Host亲和/反亲和规则不生效,DRS不再遵守绑定约束,部分场景下DRS规则对象还出现灰色禁用。并不是升级直接删除规则,大多是DRS虚拟机主机分组(VM‑Host Groups)对象引用异常,升级前缺少备份,升级后需要重建分组与规则。本文梳理现象、根因、应急修复、PowerCLI备份脚本、升级前运维规范。
有VMware全系列产品官方资源和定制版资源需求的可以移步:
ESXi集群完成7.0→8.0滚动升级,vCenter版本同步升级完成,集群DRS状态显示正常,自动化级别没有改动
已经配置好的VM‑Host亲和、反亲和规则不再生效,DRS执行vMotion迁移时直接跳过约束,虚拟机被调度到禁止运行的主机
部分案例:规则条目还在列表,但规则自动变成禁用状态;打开规则详情,虚拟机分组、主机分组出现空引用、null对象
普通虚拟机之间的同置/反置规则(VM‑VM)大多保留正常,问题集中出现在虚拟机‑主机DRS分组规则
vCenter数据库升级迁移不会物理删除DRS规则记录,但是VM‑Host Groups(虚拟机主机分组)依赖对象MOREF引用,在跨大版本升级、滚动混合版本集群阶段,容易出现对象引用断裂。
升级过程中集群对象、主机对象内部标识发生变更,旧分组内部保存的虚拟机/主机MOREF失效,分组变成无效对象,依赖分组的DRS规则就失去约束能力。
混合7.0+8.0主机共存阶段,如果执行过维护模式、主机移除重加入集群,会加剧分组引用异常。
很多管理员只备份vCenter整机,没有单独导出DRS分组与规则清单,故障后无法快速还原配置,只能手动重建。
区分概念:VM‑VM规则不依赖VM‑Host Groups,受该问题影响很小;站点隔离、机房绑定、业务分区场景大量使用的VM‑Host规则是重灾区。
注意:不要直接判定“升级把规则删了”,优先打开【集群-配置-VM/主机规则】查看,规则条目还存在,只是底层分组对象损坏。
第一步:确认规则与分组状态
进入集群 → 配置 → 服务 → VM/主机规则,逐条打开所有VM‑Host类型规则。
检查虚拟机分组、主机分组下拉框,是否出现空白、无法选中对象、对象显示null。
如果分组已经损坏:删除旧的无效DRS规则,再删除对应的损坏VM‑Host分组。
重新新建虚拟机组、主机组,把对应虚拟机、ESXi主机重新加入分组。
新建DRS VM‑Host规则,选择重建好的分组,选择“必须在组内运行”(强制)或者“应该在组内运行”(建议),启用规则。
保存后等待3分钟DRS检测周期,观察集群事件,确认DRS开始遵守亲和约束。
升级ESXi或者升级vCenter之前,执行导出,保存CSV报表,一旦升级后分组损坏,可以对照报表重建所有规则配置。
#连接vCenter
Connect-VIServer vcenter-ip
#导出DRS普通规则(VM-VM亲和反亲和)
Get-Cluster | Get-DrsRule | Select Name,Cluster,Enabled,Type,
@{N='VM列表';E={[string]::Join(',',((Get-VM -Id $_.VMIDs).Name))}} |
Export-Csv -Encoding UTF8 DRS_Rule_Backup.csv‑NoTypeInformation
#导出DRS VM‑Host分组
Get-Cluster | Get-DrsClusterGroup | Select Name,Cluster,GroupType,
@{N='成员对象';E={[string]::Join(',',$_.Member.Name)}} |
Export-Csv -Encoding UTF8 DRS_Group_Backup.csv‑NoTypeInformation
#导出VM‑Host规则
Get-Cluster | Get-DrsVMHostRule | Select Name,Cluster,Enabled,VMGroup,VMHostGroup,Type |
Export-Csv -Encoding UTF8 DRS_VMHostRule_Backup.csv‑NoTypeInformation升级完成之后,打开三份CSV文件,对照内容重建分组与规则,避免靠记忆配置造成遗漏。
| 现象 | 根因 | 处理方式 |
|---|---|---|
| 规则还在,但是DRS不执行迁移 | 分组对象引用断裂,规则底层失效 | 删除旧分组旧规则,全部重建 |
| 规则配置正常,DRS偶尔违反 | 使用“should建议型规则”,资源不足时DRS允许打破规则 | 业务强约束改为“must强制”规则,预留足够集群资源 |
| VM‑VM反亲和规则正常,仅VM‑Host失效 | 仅VM‑Host Groups损坏 | 只重建分组与VM‑Host规则,无需改动虚拟机互斥规则 |
| 升级后规则直接消失不见 | vCenter数据库升级异常,建议核对vCenter完整备份 | 使用之前PowerCLI导出报表重建,必要时回滚vCenter备份 |
ESXi7.0滚动升级8.0正式操作前,必须使用PowerCLI导出DRS分组与规则全套配置做文档备份,不能只依赖vCenter整机备份。
滚动升级阶段,集群处于7+8混合版本状态,重点观察DRS规则事件日志,出现大量规则违规告警及时介入。
优先区分规则类型:业务强隔离、机房站点绑定场景,尽量使用Must强制规则;Should建议规则资源紧张场景会被DRS自动忽略,不要用于强约束业务。
全部主机升级完成,集群退出混合版本后,统一巡检一遍所有VM‑Host规则,确认分组成员完整、规则处于启用状态。
巡检要点:打开每一条VM‑Host规则,确认虚拟机分组、主机分组内部成员清单没有空白丢失。
Q:我直接升级vCenter,ESXi主机版本不变,会不会出现这个故障?
A:也有概率出现,vCenter大版本数据库迁移同样会操作集群对象引用,只要大量使用VM‑Host分组规则,升级前都建议导出备份。
Q:重建完规则,虚拟机不会自动迁移到符合亲和规则主机?
A:DRS默认3分钟才做一次合规检查;可以手动对虚拟机执行vMotion,强制迁移到目标主机,加速验证规则有效性。
Q:强制Must规则配置之后,虚拟机无法开机?
A:强制规则条件不满足,集群找不到符合条件主机,虚拟机拒绝启动。规划分组时保证主机资源数量充足,避免资源全部占满导致业务故障。
总结:ESXi7升级8后DRS亲和规则失效,多数不是规则被删除,而是VM‑Host Groups分组对象引用损坏。升级前PowerCLI导出分组和规则是最高效预防手段;故障发生,删除损坏分组,重新创建分组再配置DRS规则即可恢复调度约束。