如何解决 VMware ESXi 上的 503 服务器不可用连接错误?

如何解决 VMware ESXi 上的 503 服务器不可用连接错误?

我有一台 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

相关内容