
vCenter Server 6.0 的坑我踩过不少但像“VMware Inventory Service”和“VMware VirtualCenter Server”也就是大家常说的 virtualvcenter 服务两兄弟同时趴窝的还真值得专门写一篇。这种故障最麻烦的地方在于表面看是两个服务起不来实际上往往是同一个底层原因在作怪而且排查路径如果不对绕一天都摸不到头绪。这篇文章我就以 vCenter Server 6.0Windows 版为例从服务依赖关系讲起把排查思路、日志位置、修复手段和几个真实案例一次性说清楚。无论你是刚接手环境的新人还是已经被这个问题折磨几天的老运维按着这个思路走大概率能省下半天时间。1. 问题现象与服务架构梳理1.1 故障的具体表现先说现象。登录 vCenter Server 所在的 Windows 服务器打开服务管理器你会看到这样的列表VMware VirtualCenter Servervpxd启动后自动停止或者一直处于“正在启动”状态。VMware vCenter Inventory Servicevminventory状态同样是停止手动启动时可能直接报错“服务没有及时响应启动或控制请求”。伴随的还有 VMware vCenter Management Webservicesvsphere web client 的服务端也不正常因为 vpxd 挂了Web Client 后端连不上登录 9443 端口时要么直接超时要么报了 503 Service Unavailable。这个组合很典型vpxd 是 vCenter 的核心闹钟Inventory Service 是给它提供库存资源和清单查询的“数据中转站”Management Webservices 又依赖前两者。所以这三个几乎会同步瘫痪。你还会发现用 vSphere Client老版本 C# 客户端连接时报的是“无法连接到 vCenter Server请检查网络连接或服务是否运行”而用 Web Client 登录则卡在登录页转圈最后超时。我之前在客户现场碰到过一模一样的场景当时第一反应是重启服务结果窗口弹出一句“依赖服务或组无法启动”这才意识到问题出在更底层。所以遇到这类故障先别急着点“启动”而是要看依赖关系。1.2 vCenter 6.0 各服务的依赖关系vCenter Server 6.0 虽然是 Windows 上的一个应用套件但内部是微服务架构的思路各个服务之间有一长串依赖链。我按启动顺序和依赖方向给你理一下VMware vCenter Authentication Servicevmware-sso / vmafdd负责 SSO 认证是整个栈最底层的服务之一它起不来后面全白搭。VMware vCenter Certificate Servicevmcad负责证书签发和管理。VMware vCenter Inventory Servicevminventory依赖上面的证书服务和 SSO它维护着整个环境的清单数据包括主机、虚拟机、模板、资源池等。VMware VirtualCenter Servervpxd依赖 SSO、Inventory Service 以及数据库vPostgres 或外部 SQL Server/Oracle可以说是“总装配线”。VMware vCenter Management Webservices / vSphere Web Client 服务依赖 vpxd提供 Web 管理界面接口。如果把 vCenter 比作一个餐厅SSO 是门禁保安证书服务是前台确认来宾身份的员工Inventory Service 是菜单和库存台账vpxd 是后厨总厨三者的关系是一环扣一环。Inventory Service 没起来vpxd 就找不到“库存台账”自然拒绝开工而 Web Client 又等着 vpxd 上菜所以三个一起停。理解了这条依赖链你就能明白为什么排错要从底层向上排查而不是反复手动点击服务启动按钮。2. 根因定位与排查思路2.1 常见根因分类根据我这些年的经验vCenter 6.0 上 Inventory Service 和 vpxd 无法启动主要有这几类根因数据库相关vPostgres 服务未运行、数据库文件损坏、连接超时、数据库磁盘空间满。证书相关Machine SSL 证书过期、SSO 证书不受信任、sts 证书轮换异常。证书过期是最常见的“隐形杀手”因为 vCenter 装好后你可能两年都没重启过一重启才发现证书已经过期很久了。磁盘空间不足C 盘被日志塞满服务启动时写不了日志直接失败。vCenter 6.0 的日志默认写在 C:\ProgramData\VMware\vCenterServer\logs时间久了几个子目录能膨胀到几十 GB。服务账户问题服务登录账户密码过期或者在域环境中账户被锁定服务无法以正确的身份启动。端口或网络异常端口被占用或者服务器防火墙把服务间的内部通信端口挡了。2.2 排查工具与入口不要一上来就重装 vCenter那是最后手段。先准备这几个工具服务管理器services.msc看服务状态和“恢复”选项卡。事件查看器eventvwr.msc看 Windows 应用程序和系统日志里与 VMware 相关的 Error 事件这里往往有服务启动失败时 Windows 记录的最底层信息。vCenter 日志目录C:\ProgramData\VMware\vCenterServer\logs\下面的子目录对应不同服务比如 vmware-inventory-service、vpxd、vsphere-client。命令行工具用 sc query 可以快速刷新服务状态用 netstat -ano 查端口占用用 wmic 查磁盘剩余空间。我的习惯是“先日志、后配置、再服务”。日志是服务留给我们的第一手线索比瞎猜靠谱得多。比如 vpxd.log 里如果出现数据库连接超时那就直奔数据库如果出现证书错误再去折腾证书。3. 实操排查与修复步骤3.1 检查服务状态与依赖顺序第一步是把服务列表里所有 VMware 开头且当前不是 Running 的服务都列出来用命令行操作比图形界面更快sc query state all | findstr /i VMware看与 vCenter 相关的这些服务是不是都在运行重点确认VMware vCenter Authentication Service如果叫 VMware vCenter SSO Service 之类注意对应版本VMware vCenter Certificate ServiceVMware vCenter Inventory ServiceVMware VirtualCenter ServerVMware eDiscovery 服务不用管如果 SSO 或证书服务有任何一个没有运行先手动试试能不能启动。启动失败的话去看事件查看器里对应的错误。如果是“服务登录失败”基本就是账户问题如果是“端口被占用”用 netstat 查端口。3.2 查看日志定位失败原因日志是我在整个排查过程中最依赖的东西。vCenter 6.0 的日志按服务分了目录你最需要关注这两个Inventory Service 日志目录C:\ProgramData\VMware\vCenterServer\logs\vmware-inventory-service\主要看 error.log 和 最新的 vmware-inventory-service.log如果里面有类似Caused by: com.vmware.vim.vmomi.core.exception.NotAuthenticatedException说明是认证或证书链路出了问题如果是java.sql.SQLException: Connection refused那问题在数据库连接而不是服务本身。vpxd 日志目录C:\ProgramData\VMware\vCenterServer\logs\vpxd\看 vpxd.log 尾部重点搜 ERROR、Exception、Failed 等关键字。vpxd 起来时会有一长串初始化过程走到哪一步失败日志会写得很清楚。还有一个容易被忽略的文件C:\ProgramData\VMware\vCenterServer\logs\vsphere-client\logs\ 目录下的日志。如果 Web 客户端登录报错这里能看到登录认证回调失败的具体原因。我的建议是用 tail 或 notepad 打开日志文件按时间倒序看别从开头一点一点读那样太浪费时间。先看最后一个启动尝试对应的日志片段通常错误就藏在最后几十行。3.3 数据库连接与账户校验如果日志里出现数据库连接相关错误需要检查 vCenter 使用的是内置数据库还是外部数据库。对于嵌入式 vPostgres 数据库在服务列表里找到类似 VMware vPostgres 的服务6.0 中一般叫 VMware vPostgres 或 PostgreSQL Database Server确认它正在运行。如果它没运行手动启动它。启动失败时去 vPostgres 的数据目录看看磁盘空间wmic logicaldisk get caption,freespace,size注意检查 C 盘和存放数据库文件的盘剩余空间建议保持在 5GB 以上否则数据库起不来或者起来后频繁刷错。对于外部 SQL Server 或 Oracle重点确认数据库服务是否正常运行。vCenter 使用的数据库账号密码是否还有效。如果密码过期vpxd 连接不上数据库就会表现为服务“启动后又停止”。网络层面vCenter 服务器到数据库服务器的连通性是否正常端口是否通。SQL Server 默认 1433Oracle 默认 1521。有时候数据库相关问题的隐蔽性很强比如数据库服务器磁盘满了连接建立会超时。所以不要只盯着 vCenter 这一台机器数据库那台机器也要看磁盘、日志、会话数都要检查。3.4 磁盘空间与证书检查磁盘和证书是两个容易被忽略但命中率极高的点。先看磁盘。vCenter 6.0 的日志目录增长极快尤其 Inventory Service 开了 debug 级别的话按小时就能吃满 C 盘。检查方法很简单直接看 Windows 系统盘剩余空间。如果不足 10%大概率就是这里出问题了。定位占用大户可以用下面这个命令检查常见的几个目录大小dir C:\ProgramData\VMware /s | find File(s)清理时优先处理日志目录里的旧日志比如保留最近 7~15 天的压缩或转移到其他盘符。重启服务后如果恢复正常说明磁盘满就是元凶。再看证书。vCenter 6.0 使用机器 SSL 证书和 SSO 证书它们有有效期。证书过期后Inventory Service 与 SSO 服务通信时校验失败服务自然起不来。检查证书过期最简单的方式在 Windows 上打开“运行”输入 mmc添加“证书”管理单元选择“计算机账户”在“个人”-“证书”目录里找到 VMware 相关的证书比如主机名相关的 machine SSL 证书看“有效期到”这一项。如果确实过期了就需要用 vCenter 的证书管理工具续期或替换。vCenter 6.0 的 Certificate Manager 工具位于C:\Program Files\VMware\vCenter Server\VMware\vCenter Server\bin\software\certificate-manager.bat运行后选择选项“Replace Machine SSL Certificate”按提示生成新的自签名证书如果环境有企业 CA 也可以选择签名请求完成后重启相关服务。注意这个操作可能要求先备份证书目录老规矩动证书之前一定先做备份。4. 典型故障案例与解决记录4.1 案例日志目录占满磁盘导致服务起不来某次客户报障说 vCenter 无法登录服务全停。我远程上去一查C 盘剩余 0 字节。再看 C:\ProgramData\VMware\vCenterServer\logs 目录vmware-inventory-service 和 vpxd 两个子目录加起来占了大概 60GB里面全是没做过轮转的历史日志。这种场景的修复本身不难清理掉老日志释放至少 10~20GB 空间然后按正确顺序启动服务先 SSO、证书服务再 Inventory Service最后 vpxd 和 Web Client 服务服务就全起来了。但这里我要多说一句清理日志只是治标。根因往往是 vCenter 运行了很久日志轮转策略失效或者某个服务异常导致日志持续暴涨。你清理完以后最好把日志保留策略调一下比如设置每周自动清理超过 1GB 的旧日志避免下次再爆盘。4.2 案例证书过期导致 Inventory Service 崩溃另一个客户环境vCenter 装了 3 年多期间从没重启过某天机房断电重启后vCenter 再也起不来了。排查时发现 Inventory Service 日志里有大量 TLS 握手失败和证书验证错误用 mmc 一查Machine SSL 证书已经过期两个月。这是典型的“不重启没事一重启全暴露”的案例。解决方案是用 Certificate Manager 工具重新生成机器 SSL 证书。我先备份了原证书然后运行 certificate-manager.bat选择 Replace Machine SSL Certificate输入 SSO SOAP 的账号密码默认 administratorvsphere.local选生成自签名证书过程大概几分钟。之后重启所有相关服务系统恢复正常。证书过期这个坑我想强调两点一是 vCenter 6.0 自签名证书默认有效期不长建议在生产环境里做一个证书到期提醒二是如果你手动替换过证书要注意同步更新 SSO 里的证书信任关系否则即使启动成功Web Client 也可能报认证错误。4.3 案例外部 SQL Server 账户密码过期还有一次vCenter 用的是外部 SQL Server排查时 vpxd.log 中频繁出现“Login failed for user”的报错。查了 SQL Server 那边发现 vCenter 专用的数据库用户密码过期了SQL Server 登录属性里勾了“强制密码过期”。处理方法很简单重置该用户的密码然后在 vCenter 的数据库配置里更新对应连接串中的密码。vCenter 的数据库配置文件在C:\ProgramData\VMware\vCenterServer\cfg\vmware-vpx\vpxd.cfg修改文件里的 db password 字段改完重启 VMware VirtualCenter Server 服务。如果你是外部 SQL Server 环境这里我补充一个建议把 SQL Server 登录的密码过期策略关掉或者定时和业务方确认密码变更计划防止服务某天突然连不上。4.4 问题速查参考表现象/日志关键词可能原因快速处理NotAuthenticatedException、TLS 校验失败证书过期或证书信任链断裂用 Certificate Manager 续期或替换机器 SSL 证书Connection refused、Login failed for user数据库服务未启动或账号密码错误确认数据库运行状态更新 vpxd.cfg 密码校验数据库账号磁盘空间满、Failed to write logC 盘爆满日志未轮转清理日志目录释放空间调整日志保留策略服务登录失败、密码过期服务账户被锁定或密码过期检查 services.msc 中对应服务的登录账户更新密码端口占用、Address already in use端口被其他进程占用netstat -ano 定位 PID终止占用进程或调整配置5. 预防与日常维护建议5.1 监控与告警这类故障想要彻底避免靠人肉巡检是不现实的。我建议至少在 vCenter 服务器上做三件事磁盘空间监控。监控 C 盘和数据库盘低于 20% 就要告警。可以写一段简单的 PowerShell 脚本每天检查可用空间低于阈值输出告警或发邮件。$freeSpace (Get-WmiObject win32_logicaldisk -Filter DeviceIDC:).FreeSpace / 1GB if ($freeSpace -lt 20) { Write-Warning C盘剩余空间不足20GB }服务状态监控。把 vCenter 依赖的核心服务vmafdd、vmcad、vminventory、vpxd、vSphere Client 服务全部纳入监控一旦有服务不在 Running 状态立刻触发通知。证书有效期监控。写一个简单的脚本读取 LocalMachine\My 下的 VMware 证书确认有效期是否接近结束提前 30 天告警。这一步能防住绝大多数重启后起不来的事故。5.2 备份与升级建议vCenter 6.0 已经是很老的版本了如果你还在生产环境用建议尽早规划升级到 6.5/6.7 或更高版本。新版在服务稳定性、日志管理和证书管理上都有明显提升能少踩很多坑。在升级或大动作之前不要忘了备份 vCenter 的配置和数据库。vCenter 6.0 自带 VAMI 界面的备份如果开启了或者你可以通过 vSphere Management Assistant 方式导出配置。最保险的方式是备份 vCenter 数据库 备份 C:\ProgramData\VMware\vCenterServer\cfg 目录 记录服务账户信息。有了这三样即使真出大事你也能快速恢复。5.3 服务启动的正确顺序最后分享一个看起来基础但很实用的细节vCenter 6.0 重启后服务启动顺序不对会导致部分服务启动失败。虽然 Windows 服务管理器里配置了依赖关系但现实中经常出现“依赖判定失效”的情况。我个人的习惯是在服务器重启后等几分钟让服务管理器自动拉起一轮然后按顺序检查VMware vCenter Authentication ServiceVMware vCenter Certificate ServiceVMware vCenter Inventory ServiceVMware VirtualCenter ServerVMware vCenter Management Webservices / vSphere Web Client 服务如果某一步没有自动起来就手动启动这一步再等对应的下一步。千万别从中间开始启动比如直接手动启动 vpxd它等不到 Inventory Service 就可能报错退出然后你以为服务有问题实际上只是启动顺序乱了。我在实际运维中踩过不少次服务的坑最深刻的体会是遇到这种多服务集体罢工的故障第一反应永远不应该是重装系统或重装 vCenter而是按依赖链一层层扒。日志、磁盘、数据库、证书、账户这几个检查点都过一遍基本就能锁定真凶。特别是“日志清理”和“证书续期”这两招至少能解决我遇到过的一半以上案例。这个内容后续还可以这样扩展如果你手头环境是 vCenter Server ApplianceVCSALinux 版排查思路和 Windows 版有所区别比如它的服务不是 Windows 服务而是一堆 systemctl 管理的进程日志在 /var/log/vmware/vpxd 等目录。但底层的依赖链和根因分类是相通的把这个思路迁移过去也能少走弯路。希望这篇经验总结能帮你缩短故障时间少熬几个夜。