做虚拟化运维的兄弟应该都有过这种经历:在 vCenter 里高高兴兴给集群开启 DRS,结果导入 license 的时候弹出一个红色报错,功能怎么都开不起来。DRS 和 license 这对组合,在 vSphere 项目里几乎是绕不开的坑,我接手过的环境里,十个 DRS 故障至少有四五个都出在 license 导入、分配或容量这个环节。这篇内容围绕 vCenter 6.7 场景下 DRS 导入 license 失败的全过程展开,核心是把“为什么失败”讲透,再给出一套可以直接照做的排查流程。不管你是刚接触 vSphere 集群的新手,还是已经运维过几百台主机的老手,遇到 DRS 灰色、导入报错、评估模式过期这类问题,都能在这里找到对应的解法。
1. DRS 和 license 到底什么关系?先把这个底层逻辑吃透
1.1 DRS 为什么需要 license:功能授权机制
很多人第一次接触 DRS 时会有一个疑问:明明 ESXi 装好了,主机也加进集群了,为什么启用 DRS 还要单独导入 license?原因很简单,DRS 不是 vSphere 的免费基础功能,它属于高级功能授权的一部分。VMware 的 license 机制本质上是一套“功能许可证”体系,每张 license key 里同时编码了两类信息:一是版本级别,决定你能用哪些功能;二是 CPU 容量,决定你能给多少台物理主机授权。
这就好比买软件会员,基础版能登录、能干活,但高级功能需要更高档位的授权才给开。vSphere 也是一样,Standard 版的 key 就算容量充足,也不会开放 DRS 功能,你必须在授权池里存在 Enterprise 或 Enterprise Plus 级别的 key,并且把主机分配到这个 key 上,DRS 才能被激活。理解了这一点,后面大部分故障原因就都能说得通了:不是主机有问题,而是主机的“会员等级”不够。
1.2 启用 DRS 的硬性条件:一台都不能少
DRS 依赖 vCenter 对集群内所有主机做资源调度,所以它有一个容易被忽略的硬性条件:集群里每一台主机都必须具备合法的、包含 DRS 功能授权的 license。不是说你给其中三台主机配了高版本 key,第四台还在用评估模式,DRS 就能照常跑。VMware 对集群功能校验是按“木桶效应”来的,只要有一台主机不满足,集群级别的 DRS 开关就可能变成灰色,或者启用时报错。
在实际环境中,一台主机被分配了 Standard key,其他主机都是 Enterprise Plus,然后整个集群 DRS 都启不来的情况,我见过不止一次。之前有个客户还跟我争,说“就一台机器小问题,DRS 照理应该能跑”,但实际上 vCenter 根本不给你开这个口子。所以在排查 DRS 相关 license 问题时,永远不要只看某台主机的状态,要把集群里所有主机的 license 分配情况整体过一遍。
1.3 vSphere 6.7 不同版本能干什么:DRS 的前置门槛
vCenter 6.7 里,vSphere 的版本划分比较细,不同版本对应的功能差异很明显。DRS 功能最低要求是 Enterprise 级别,这个门槛一定要记住。为了方便对照,我把常见版本和 DRS 的支持关系整理了一下:
| vSphere 版本 | DRS 支持情况 | 备注 |
|---|---|---|
| Essentials Kit | 有限支持 | 面向小规模环境,最多 3 台主机、每台 2 CPU,DRS 可用但限制多,一般不建议生产核心集群使用 |
| Standard | 不支持 | 有 HA、vMotion 等基础能力,但 DRS 功能未开放 |
| Enterprise | 支持 | 从这一级开始 DRS 才真正开放 |
| Enterprise Plus | 支持 | 完整高级功能,包括 Storage DRS、分布式交换机等 |
需要说明的是,这里以 6.7 的版本划分来说,到了 vSphere 7.0 之后版本线做了简化,DRS 基本集中在 Enterprise Plus 档位。你现在如果维护的还是 6.7 环境,记住“DRS 至少 Enterprise”就够了。很多导入 license 失败的案例,根子就在于公司采购时只买了 Standard 授权,却希望 DRS 能用,这属于规划层面的问题,后面技术手段再折腾也解决不了。
2. 导入 license 失败,到底失败在哪一步?报错场景拆解
2.1 导入 key 时直接报“无效许可证”
最基础的一种失败:在 vCenter 的许可证管理页面,粘贴 key 后直接提示 invalid license、无法识别。这种情况常见原因有几个,第一是 key 复制过程中多了或少了字符,第二是混入了空格,第三是把数字 0 和字母 O、数字 1 和字母 I 搞混了。VMware 的 license key 一般是五组、每组五个字符的格式,粘贴后要习惯性地检查首尾有没有多余的空格或换行符。
还有一个容易忽略的情况:key 虽然格式正确,但已经被原厂商停用或回收。比如公司退掉了部分授权、或者采购合同续费出了问题,VMware 后台会把 key 标记为 suspended,此时导入必然失败。这种时候别在 vCenter 里反复尝试,直接登录 VMware 的客户门户,核对一下这张 key 的当前状态是不是 Active,是挂起状态就要先走商务流程处理。我当时排查过一张报错 key,折腾了半小时,最后发现是商务同事提前把授权退掉了,纯纯的“线下问题线上背锅”。
2.2 key 能导入,但分配时提示容量不足
key 成功导入不代表万事大吉,下一步分配主机时才是重灾区。vSphere 的 license 容量按物理 CPU 插槽计算,不看核心数、线程数。一台双路物理机,无论如何都要消耗 2 个 CPU 授权;四路机器直接消耗 4 个。很多人习惯按“台数”去估算授权够不够,结果一台双路主机就吃掉两个授权,稍不注意容量就捉襟见肘。
我做个简单计算:你有 10 台双路 ESXi 主机,采购了 15 个 CPU 的 Enterprise key,以为“15 肯定够 10 台用”,实际上需要 10×2=20 个授权,差 5 个。这种情况下导入 key 能成功,但给主机分配时就会提示容量不足,DRS 自然也无法顺利启用。排查方法很简单:在 vCenter 许可证页面的“资产”标签里,看所有主机的 CPU 总数量,把它和授权池容量一对比,缺多少立刻暴露出来。
2.3 key 和容量都没问题,DRS 开关还是灰色
还有一种更隐蔽的情况:key 有效,容量也足够,但进入到集群配置页面,vSphere DRS 的开关就是灰的,点不动。这个我排查过很多次,原因往往不在 license 本身,而在主机状态或者功能匹配。比如集群里有主机处于断开状态、进入维护模式、或者刚加进来还没完成正常注册,都可能让 DRS 无法启用。
另外,如果授权池里同时存在多个不同版本的 key,vCenter 在自动分配时可能把主机匹配到低版本 key 上。举个例子,你有 Enterprise Plus 的授权池,但里面还躺着一张 Standard key,新主机加入集群时 vCenter 可能自动选择 Standard key,看起来主机“有 license”,实际功能等级不够,DRS 照样开不了。这种时候必须手动进入主机的 license 分配界面,把 key 切换成高版本,问题才能解除。
2.4 主机一直显示“评估模式已过期”
评估模式也是 license 导入失败里非常常见的一个分支。新装好的 ESXi 主机有 60 天评估期,期间所有功能都能用,但到期之后如果你还没导入并分配正式 license,主机就会进入“评估模式已过期”的状态,很多功能会开始受限,包括 DRS。
这里要特别注意一个操作顺序:很多新手以为把 key 导入 vCenter 就等于完成了授权。其实不是,导入只是把 key 放进了授权池,你必须再到主机层面把它“分配”出去,主机才会真正脱离评估模式。我甚至见过有管理员导入了 key,但过了一个月发现主机仍然显示评估模式过期,原因是 key 一直躺在池子里没有被绑定到任何主机上。这个细节虽然低级,但在真实环境里出现的频率高得惊人。
2.5 报错常见场景速查表
为了方便你对照排查,我把 DRS 相关 license 故障的典型现象、原因和初步动作整理成一张表:
| 故障现象 | 常见原因 | 初步排查方向 |
|---|---|---|
| 导入 key 提示无效 | 字符格式错误、key 被停用 | 检查格式;在 VMware 门户核对 key 状态 |
| 导入成功但分配失败 | license 容量不足 | 统计所有主机 CPU 总数,和授权容量对比 |
| DRS 开关灰色 | 主机未连接/维护模式;匹配到低版本 key | 检查主机状态;手动重新分配高版本 key |
| 主机显示评估模式已过期 | 60 天评估期到期,key 未分配 | 导入 key 后,在主机的许可证界面执行分配 |
| 提示 license service 不可用 | vCenter 服务异常、时间偏差 | 检查 vCenter 服务状态;核对 NTP 时间同步 |
3. 从报错到恢复:一套能落地的排查操作流程
3.1 第一步:先定位失败的是“导入”还是“启用”
接到 DRS license 故障,我的习惯是先做第一层区分:到底是导入 key 这个动作失败了,还是 key 导入成功但 DRS 功能启用失败。这两个方向排查路径完全不一样。
如果是导入动作失败,重点看 key 本身的状态和格式;如果是 key 导入成功但 DRS 启用失败,重点就要转向容量、版本匹配、主机状态、服务状态这些问题。有个简单的判断方法:打开 vCenter 的许可证页面,看 key 是否存在,是否存在“错误”或红色状态。key 在,而且状态正常,那问题大概率不在“导入”这个动作上,再往下追功能启用失败的真正原因。
我刚入行那会儿,一看到报错就去重启 vCenter 服务,结果大部分时候是白折腾的。后来学乖了,先花两分钟定位阶段,能少走很多弯路。这一步看起来简单,但能帮你节省大量无效排查时间。
3.2 第二步:算清楚环境到底需要多少个 CPU 授权
确定 key 可以正常导入后,第二步一定是算容量。这个过程直接决定后续排查方向。具体做法是:进入 vCenter 的“管理 -> 许可证 -> 资产”页面,把所有 ESXi 主机的 CPU 插槽数量列出来,相加得到总需求,然后再看授权池里各种 key 的有效容量。
我在现场排查时一般用一张表格来记录:
- 主机数量:____ 台
- 每台主机的物理 CPU 插槽数:____ 个
- 总需求:主机数量 × 每台插槽数 = ____ 个授权
- 授权池容量:Standard ____ 个 / Enterprise ____ 个 / Enterprise Plus ____ 个
只要总需求小于等于对应版本的授权容量,容量这一关就算过了。如果不足,要么联系商务加购,要么回收已经下线主机的授权。这里有个细节:vCenter 的授权容量是按“已导入许可证的总容量”算的,而不是按“已分配出去的容量”算,所以你有 10 个授权的 key 即使只分配了 6 个,别人也不能再用另外 6 个,因为 10 个里还剩 4 个未分配。计算时别把已分配和未分配搞混。
3.3 第三步:检查授权池里的 key 现状
容量算完之后,进入授权池仔细看每一张 key 的状态和版本。这里我重点关注三件事:key 有没有过期、key 的版本级别、key 的剩余容量。
举个例子,如果池子里有 16 个 Enterprise Plus 授权的 key,但已经分配出去 15 个,只剩 1 个,而你现在有 3 台新主机要加进来,这就不够用了。如果你继续把新主机加入集群并尝试启用 DRS,vCenter 就可能会把其中一台主机匹配到一张 Standard key 上,导致功能校验失败。这种问题时,光看“有没有 key”不够,必须看“每张 key 剩余多少容量”。
vCenter 的许可证页面提供筛选和排序功能,可以按“剩余容量”排序,把快满的 key 提前找出来。我在生产环境用得比较勤,尤其是集群扩容前后,这步几乎是必查项。
3.4 第四步:重新导入并分配 license 的标准操作
如果确认 key 有效、容量也够,但主机还是处于错误状态,最稳妥的操作是重新导入并分配一次。这个过程听起来简单,操作顺序有讲究,一步步来:
- 进入 vCenter Web Client,打开“菜单 -> 管理 -> 许可证 -> 许可证”。
- 点击“添加”,输入 license key,确认 key 状态变为“已导入”。
- 进入“资产”标签页,选中目标主机,点击“分配许可证”。
- 在弹窗中选择正确的 key 版本(比如 Enterprise Plus),而不是让系统自动匹配。
- 确认主机的 license 状态变成“已授权”,且到期时间显示为永久或者对应合同期限。
这里最关键的是第 4 步。我反复强调“手动选择 key 版本”,是因为自动分配机制经常把主机匹配到低版本 key 上,这在多版本 key 共存的授权池里尤其常见。不要嫌麻烦,手动点一下版本选择,能避免很多后续的隐性故障。
3.5 第五步:用 PowerCLI 做快速核验
图形界面操作完了,建议再用 PowerCLI 做一次快速核验。尤其当你管理的 ESXi 主机比较多时,用命令行批量查看要比在图形界面里一台台点开高效得多。
先连上 vCenter,然后查看所有主机对应的 license key:
Connect-VIServer vcenter.example.com Get-VMHost | Select-Object Name, LicenseKey, State输出结果里能看到每台主机的名字、分配的 license key 以及运行状态。如果发现某台主机的 LicenseKey 字段是空的,说明它还在评估模式,这种主机在 DRS 集群里就是个定时炸弹,必须马上分配 license。
批量给一批主机分配 license 的话,可以这样写:
$licKey = "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX" $hosts = Get-VMHost | Where-Object { $_.Name -like "esxi-prod-*" } $hosts | ForEach-Object { Set-VMHost -VMHost $_ -LicenseKey $licKey }执行前务必确认 $licKey 对应的高版本 key 容量足够,否则 PowerCLI 会直接报错,根本分配不进去。这个报错信息也是排查线索之一,能帮你快速判断是不是容量问题。
3.6 第六步:服务异常时别慌,按这个顺序处理
如果以上步骤全都做对了,license 页面还是提示“vSphere License Service 不可用”或者“无法连接到 license 服务”,这时候才需要怀疑 vCenter 服务本身。注意,不要一上来就重启整个 vCenter 虚拟机,那是最后手段。
先检查 vCenter 里和许可证、STS 相关的服务状态。在 VCSA(vCenter Server Appliance)上,可以 SSH 登录后执行:
service-control --status重点看 vmware-vpxd、vmware-sps 和 vsphere-ui 这三个服务是否显示为 Running。如果某个服务处于 Stopped 状态,再针对性执行重启:
service-control --restart vmware-vpxd service-control --restart vmware-sps重启之后回到图形界面重新查看许可证页面。这里还有个容易被时间问题坑到的点:vCenter 和 ESXi 主机之间的时间偏差过大,会导致 license 校验失败,报错看起来很像服务挂掉。所以排查服务状态前,先顺手核对一下 NTP 时间同步,很多时候问题的根源根本不在服务,而在系统时钟。
4. 三个真实故障案例复盘:每个都让人抓狂
4.1 案例一:容量算错了,多给两路主机直接算崩
这个案例发生在某个客户的 vCenter 6.7 环境里。客户新购了一批双路服务器,组了个 8 台主机的集群,采购了 10 个 CPU 的 Enterprise 授权,信心满满觉得够用。结果在导入 key 后,给主机逐台分配 license 时,刚好分到第 6 台就提示容量不足,后面两台主机怎么都分不上,DRS 自然也就起不来。
我过去之后先打开资产页面数了一下:8 台双路主机,总共需要 16 个授权,手里只有 10 个,差了 6 个。这种场景下没有任何技术手段能绕过容量限制,唯一能做的就是回收授权或者加购。后来查了一下库存,发现在另一套测试环境里有几台已经下线的单路旧主机,还绑着 Enterprise 授权,手动把那几台主机的 license 释放掉,再重新分配,DRS 才顺利启用。
这个案例给我最深的感触是:计算容量需求时一定要按物理 CPU 插槽数去算,而不是按主机台数算。双路机器太常见了,稍微一疏忽,容量数字就直接翻倍,坑的就是自己。
4.2 案例二:低版本 key 混进授权池,DRS 被“降级”
另一个案例就更加隐蔽。环境里有 Enterprise Plus 的授权,也有几张 Standard key,原本 Standard key 是给非核心业务的主机用的。某次新加了几台主机,管理员直接在许可证页面点了“自动分配”,图省事没有手动选择 key 版本。
结果 vCenter 把所有新主机自动匹配到了剩余容量充足的 Standard key 上,随后在集群里启用 DRS 时,开关一直是灰色,怎么都点不了。管理员一开始怀疑主机有问题,折腾了半天连接状态,都没找到原因。我登录后一眼看到主机清单里那几台新主机的 key 状态:分配的授权对应版本是 Standard,但集群里其他主机全是 Enterprise Plus。
解决过程不复杂,进入主机的许可证分配界面,把 key 手动切换成 Enterprise Plus,DRS 开关立刻恢复正常。但这个问题很有代表性,因为自动分配机制会让“有 license”和“有正确的 license”变成两码事。只要有低版本 key 存在,就必须手动盯紧关键集群的 key 分配情况。
4.3 案例三:时间没同步,license 服务看着像“挂了”
第三个案例堪称经典,发生在 VCSA 6.7 上。当时客户反馈新导入的 license key 无法生效,License 页面一直转圈,过一会儿报错提示“无法连接到 license 服务”。运维兄弟第一反应是 vCenter 的 License Service 挂了,直接重启了 vpxd 服务,结果当时似乎恢复了,但第二天问题又出现,而且更加严重,连许可证页面都很难打开。
我排查时先没看服务状态,而是对比了 vCenter 和 ESXi 主机的系统时间,发现 vCenter 的时间比主机快了 8 分钟。这个偏差其实不算特别大,但对于涉及证书令牌校验的 license 流程来说,已经足够造成失败。时间戳不对,签名校验不过,服务层不会给你任何明确提示,只会告诉你 service unavailable。
最终处理方案是配置了正确的 NTP 服务器,并手动校准了 vCenter 和所有主机的系统时间,重启了 vmware-vpxd,license 功能彻底恢复。从那之后,我在处理任何 VCSA license 问题之前,都会先检查时间情况,这个习惯帮我避免了很多无效排查。
5. 做过几十次 license 排障后,我的几条经验铁律
5.1 前置规划:把 license 当资产管
license 不是一次导入完就丢在一边的东西,它是跟硬件资产同样重要的对象。建议在采购规划阶段就做一张 license 台账,记录每张 key 的版本、CPU 容量、分配给了哪些主机、有效期是哪天。别觉得这是商务该干的事,运维不维护这张表,等你紧急扩容时发现授权不够,临时找人拉数据,那才叫被动。
具体到日常维护,每季度至少检查一次 vCenter 的许可证使用情况。重点看两个指标:一是授权池总容量还剩多少,二是有没有主机处于未分配或评估模式状态。这两个指标直接决定了你下一次扩容时需不需要额外采购授权。
5.2 分配原则:永远手动指定关键主机
我前面反复强调手动分配 key 版本,这条原则值得复述一遍。生产环境集群的 DRS 功能,依赖集群内所有主机的功能授权保持一致,自动分配机制考虑的是“谁空着就给谁”,不会替你考虑功能等级的完整性。所以对关键集群,每台主机的 license 分配都要手动确认,宁可多花几分钟点几下,也不要把命运交给自动匹配。
如果授权池里确实存在多个版本的 key,甚至可以考虑把不同版本的 key 隔离开,低版本 key 单独用于测试环境主机,生产环境的授权池只保留高版本 key,这样从源头上杜绝“降级匹配”的发生。
5.3 变更纪律:动 vCenter 前先备份状态
vCenter 这类核心组件,任何变更操作之前我都建议先做状态留底。不用做复杂的备份,打开许可证页面截几张图,把当前授权池的 key 列表和分配状态记录下来就行。别小看这个动作,在排障过程中,你能清楚地看到“改之前是什么样、改之后变成什么样”,凭这一条就能过滤掉一大半的误操作。
我还会顺手把 PowerCLI 的核验命令做成一个脚本,每次变更前跑一遍,变更后再跑一遍,输出结果一对比,问题一目了然。这比靠记忆去描述“我好像没动过那个 key”要可靠得多。
5.4 心态与工具:能服务重启就不重装系统
license 排障跟其他系统问题有一点相同:先从简单可控的层面入手,不要一上来就放大招。常规做法是先确认 key 状态和分配情况,然后检查服务状态,再检查时间同步,最后才是考虑重装或者重建 vCenter 这种大动作。
说实话,这些年我几乎没有遇到过需要重装 vCenter 才能解决的 license 故障,绝大多数问题最终都落在容量计算、版本匹配、key 状态、时间同步这四个方面。你对这几个检查点越熟练,排查就越快。下次再遇到 DRS 导入 license 失败,先别急着烦,按后面的步骤走一遍,很可能十分钟内就找到根因了。
最后说点个人感受。做虚拟化运维这些年,license 出问题的概率真的比想象中高得多,而九成故障都不是什么底层 bug,就是容量、版本、分配这三件事没对齐。我现在的习惯是,任何涉及集群变更的工作开始前,先把许可证页面截图留底,变更完再核对一次。这个习惯救了我很多次,也希望你在实际工作中用得上。