vCenter UI 无法加载修复指南

vCenter UI 无法加载修复指南

问题描述

vCenter Server UI (https://) 无法加载,页面一直转圈或无响应。

问题原因

经排查发现以下三个问题:

  1. Hostname配置错误 - hostname 为 localhost,与 PNID <YOUR-IP-ADDRESS> 不匹配,导致 SSO 验证失败
  2. VMware服务被masked - 几乎所有 vmware-* 服务被 systemd masked,无法启动
  3. vmon残留进程 - vmware-vmon 服务有残留进程未清理,导致服务重启失败

修复步骤

前置条件

通过 SSH 登录 vCenter Server:

1
2
3
ssh root@<YOUR-IP-ADDRESS>
# 输入密码后,输入 shell 进入 bash 环境
shell

步骤1: 修复 Hostname 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 1. 查看当前配置
hostname
cat /etc/hostname
/usr/lib/vmware-vmafd/bin/vmafd-cli get-pnid --server-name localhost

# 2. 添加 hosts 记录
echo "<YOUR-IP-ADDRESS> vcenter.local vcenter" >> /etc/hosts

# 3. 设置正确的 hostname (与 PNID 一致)
hostnamectl set-hostname <YOUR-IP-ADDRESS>

# 4. 验证配置
cat /etc/hosts
hostname

步骤2: 取消服务 Mask 状态

1
2
3
4
5
6
7
8
9
10
# 1. 检查被 masked 的服务
systemctl list-unit-files | grep masked | grep vmware

# 2. 取消所有 vmware 服务的 mask
for svc in $(systemctl list-unit-files | grep masked | grep vmware | awk '{print $1}'); do
systemctl unmask "$svc" 2>/dev/null
done

# 3. 重载 systemd 配置
systemctl daemon-reload

步骤3: 清理 vmon 残留进程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 1. 停止 vmon 服务
systemctl stop vmware-vmon

# 2. 等待几秒
sleep 3

# 3. 强制杀掉所有残留进程
pkill -9 -f vmon
pkill -9 -f pluginrunner

# 4. 确认进程已清理
ps aux | grep -E "vmon|pluginrunner" | grep -v grep

# 5. 删除 PID 文件
rm -f /var/run/vmon.pid /run/vmon.pid

# 6. 重置 systemd 失败状态
systemctl reset-failed vmware-vmon

步骤4: 启动服务

1
2
3
4
5
6
7
8
9
10
11
12
13
# 1. 启动 vmon 服务 (会自动启动其他依赖服务)
systemctl start vmware-vmon

# 2. 检查 vmon 状态
systemctl status vmware-vmon

# 3. 等待服务启动 (约3-5分钟)
# 可以用以下命令监控服务启动进度
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
# 1. 检查所有服务状态
service-control --status

# 2. 确认关键服务运行中
# 必须运行: vmware-vmon, vmware-vpostgres, vmware-stsd, vmware-vpxd, vsphere-ui

# 3. 测试 UI 访问
curl -k -s -o /dev/null -w "HTTP Code: %{http_code}\n" https://localhost/ui/
# 返回 200 表示成功

# 4. 测试登录页面
curl -k -s https://localhost/ui/login | head -5
# 返回 HTML 内容表示正常

快速修复脚本

将以下内容保存为脚本一键执行:

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
# vCenter UI 修复脚本

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

注意事项

  1. 不要直接重启虚拟机 - 可能导致数据库损坏
  2. 服务启动需要时间 - 完整启动约需5-10分钟
  3. Hostname 必须与 PNID 一致 - 否则 SSO 会持续失败
  4. 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/
评论

:D 一言句子获取中...