我有一台 VMware ESXi 服务器,已经运行了近 200 天。过去几天,当我尝试使用 VMware vSphere Client 连接它时,无法连接。输入用户名和密码后,我看到小旋转轮和状态行显示“正在连接...”,然后是“正在加载库存...”,然后我收到一条错误消息:
服务器“my.host.name”无法解释客户端的请求。(远程服务器返回错误:(503)服务器不可用
对服务器“my.host.name”上对象“ServiceInstance”的“ServiceInstance.RetrieveContent”调用失败。
我可以通过 SSH 连接到 VMware ESXi 服务器。所有虚拟机似乎都正常运行,因此我想提前知道是否需要关闭它们进行维护!!!如果您的答案中提出的方法会干扰正在运行的虚拟机,请明确说明,以便我做好停机准备。谢谢!
如何解决 VMware ESXi 上的此错误情况?
(我想发布版本号,但我不知道如何在没有 vSphere 控制台的情况下获取它!)
编辑:在我提出这个问题大约一个月后,服务器莫名其妙地自行重启了。我不知道它是崩溃了还是发生了什么……但重启后,这个问题就消失了。所以除非问题再次出现(我希望不会再次出现),否则我无法测试/确认任何答案!
答案1
您需要重新启动 vmware 管理服务。幸运的是,这很容易(因为您有 SSH 访问权限)并且对虚拟机没有影响。
简而言之,通过 SSH 连接到 esx 框架,root
然后运行以下两个命令之一(取决于它是否是 esx/i):
对于 ESX:
service mgmt-vmware restart
对于 ESXi:
/sbin/services.sh restart
答案2
我通过卸载 widecap 解决了这个问题 ServiceInstance.RetrieveContent 错误
答案3
此 VMware 知识库文章似乎与您描述的症状相符。从 ESXi 服务器的角度验证您的 DNS 是否已启动并正在运行。
选项 2:您能否验证您的 vCenter Server 是否已启动并且服务是否已启动?
答案4
在我的 vCenter 6.5 设备上,vpxd
服务核心转储并产生此错误。
迄今为止唯一的解决方法/解决方案:阻止访问 ESX 主机,直到所有 vCenter 服务启动为止。
现在,vCenter 上的 shell 脚本/systemd 单元在启动时创建 iptables 防火墙/数据包过滤规则。一旦 vCenter 服务启动并且平均负载降至 0.5 以下,脚本就会删除 iptables 规则。现在,vCenter 才能够“看到”ESX 主机,并且暂时可以正常工作。如果问题再次出现,我会重新启动 vCenter。
shell脚本:
#!/bin/bash
# /usr/local/bin/block-esx-access-on-boot.sh
export ESX_HOSTS="ESX1-IP,ESX2-DNS,ESX3-IP"
export LOAD_THRESHOLD="0.5"
sleep 5
LOAD="$(cut -d' ' -f1 /proc/loadavg)"
echo "Waiting for 1min loadavg ${LOAD} > ${LOAD_THRESHOLD} ..."
while [ "$(echo "${LOAD} > ${LOAD_THRESHOLD}" | bc)" == "0" ] ; do
echo "Waiting for 1min loadavg ${LOAD} > ${LOAD_THRESHOLD} ..."
sleep 3
LOAD="$(cut -d' ' -f1 /proc/loadavg)"
done
echo "Blocking outgoing transfers to ${ESX_HOSTS}"
iptables -A OUTPUT -d ${ESX_HOSTS} -j DROP
iptables -L OUTPUT
while [ "$(echo "${LOAD} < ${LOAD_THRESHOLD}" | bc)" == "0" ] ; do
echo "Waiting for 1min loadavg ${LOAD} < ${LOAD_THRESHOLD} ..."
sleep 60
LOAD="$(cut -d' ' -f1 /proc/loadavg)"
done
echo "Allowing outgoing transfers to ${ESX_HOSTS}"
iptables -D OUTPUT -d ${ESX_HOSTS} -j DROP
iptables -L OUTPUT
systemd 单元:
# /etc/systemd/system/block-esx-access-on-boot.service
[Unit]
Description=Block ESX Access on Boot
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/block-esx-access-on-boot.sh
[Install]
WantedBy=multi-user.target
https://gist.github.com/quatauta/a1ac390633006996fbc547da9bd01ef9