vCenter UI 无法加载修复指南
问题描述
vCenter Server UI (https://) 无法加载,页面一直转圈或无响应。
问题原因
经排查发现以下三个问题:
- Hostname配置错误 - hostname 为
localhost,与 PNID <YOUR-IP-ADDRESS> 不匹配,导致 SSO 验证失败
- VMware服务被masked - 几乎所有 vmware-* 服务被 systemd masked,无法启动
- vmon残留进程 - vmware-vmon 服务有残留进程未清理,导致服务重启失败
修复步骤
前置条件
通过 SSH 登录 vCenter Server:
1 2 3
| ssh root@<YOUR-IP-ADDRESS>
shell
|
步骤1: 修复 Hostname 配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| hostname cat /etc/hostname /usr/lib/vmware-vmafd/bin/vmafd-cli get-pnid --server-name localhost
echo "<YOUR-IP-ADDRESS> vcenter.local vcenter" >> /etc/hosts
hostnamectl set-hostname <YOUR-IP-ADDRESS>
cat /etc/hosts hostname
|
步骤2: 取消服务 Mask 状态
1 2 3 4 5 6 7 8 9 10
| systemctl list-unit-files | grep masked | grep vmware
for svc in $(systemctl list-unit-files | grep masked | grep vmware | awk '{print $1}'); do systemctl unmask "$svc" 2>/dev/null done
systemctl daemon-reload
|
步骤3: 清理 vmon 残留进程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| systemctl stop vmware-vmon
sleep 3
pkill -9 -f vmon pkill -9 -f pluginrunner
ps aux | grep -E "vmon|pluginrunner" | grep -v grep
rm -f /var/run/vmon.pid /run/vmon.pid
systemctl reset-failed vmware-vmon
|
步骤4: 启动服务
1 2 3 4 5 6 7 8 9 10 11 12 13
| systemctl start vmware-vmon
systemctl status vmware-vmon
watch -n 10 'service-control --status'
sleep 180 service-control --status
|
步骤5: 验证修复结果
1 2 3 4 5 6 7 8 9 10 11 12 13
| service-control --status
curl -k -s -o /dev/null -w "HTTP Code: %{http_code}\n" https://localhost/ui/
curl -k -s https://localhost/ui/login | head -5
|
快速修复脚本
将以下内容保存为脚本一键执行:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| #!/bin/bash
echo "=== 步骤1: 修复 Hostname 配置 ===" grep -q "<YOUR-IP-ADDRESS>" /etc/hosts || echo "<YOUR-IP-ADDRESS> vcenter.local vcenter" >> /etc/hosts hostnamectl set-hostname <YOUR-IP-ADDRESS>
echo "=== 步骤2: 取消服务 Mask ===" for svc in $(systemctl list-unit-files | grep masked | grep vmware | awk '{print $1}'); do systemctl unmask "$svc" 2>/dev/null done systemctl daemon-reload
echo "=== 步骤3: 清理残留进程 ===" systemctl stop vmware-vmon 2>/dev/null sleep 3 pkill -9 -f vmon 2>/dev/null pkill -9 -f pluginrunner 2>/dev/null rm -f /var/run/vmon.pid /run/vmon.pid systemctl reset-failed vmware-vmon
echo "=== 步骤4: 启动服务 ===" systemctl start vmware-vmon
echo "=== 等待服务启动 (3分钟) ===" sleep 180
echo "=== 步骤5: 检查状态 ===" service-control --status
echo "=== 测试 UI 访问 ===" curl -k -s -o /dev/null -w "HTTP Code: %{http_code}\n" https://localhost/ui/
echo "=== 修复完成 ===" echo "请访问: https://<YOUR-IP-ADDRESS>/ui"
|
服务依赖关系
vCenter 服务启动顺序(由 vmware-vmon 管理):
1 2 3 4 5 6 7 8 9 10 11
| lwsmd, vmafdd, vmdird, vmcad ↓ vmware-vpostgres (PostgreSQL数据库) ↓ lookupsvc (服务注册) ↓ vmware-stsd (SSO认证) ↓ vmware-vpxd (vCenter核心) ↓ vsphere-ui (Web界面)
|
常见问题
Q1: 服务启动后 UI 还是无法访问?
等待更长时间(5-10分钟),vsphere-ui 启动较慢。检查:
1 2
| service-control --status vsphere-ui netstat -tlnp | grep 5090
|
Q2: 某个服务一直 StartPending?
查看该服务日志:
1
| tail -100 /var/log/vmware/<服务名>/*.log
|
Q3: vmon 又无法启动了?
重复步骤3清理残留进程,确保没有遗留的 vmon 或 python 进程。
Q4: 如何查看服务启动错误?
1 2
| journalctl -u vmware-vmon -n 100 --no-pager tail -100 /var/log/vmware/vmon/vmon.log
|
注意事项
- 不要直接重启虚拟机 - 可能导致数据库损坏
- 服务启动需要时间 - 完整启动约需5-10分钟
- Hostname 必须与 PNID 一致 - 否则 SSO 会持续失败
- vmon 是核心服务管理器 - 修复 vmon 是解决问题的关键
参考信息
- vCenter版本: 8.0.3
- IP地址:
- 关键日志位置:
/var/log/vmware/vmon/vmon.log
/var/log/vmware/vsphere-ui/logs/vsphere_client_virgo.log
/var/log/vmware/sso/