一、故障描述
巡检发现,vcenter报vapi-endpoint status changed from green to yellow告警;如下图所示:
查看告警定义,黄色警示标示:Failed to connect to ad332723-9a14-41b6-820c-9af189783ed5\com.vmware.vcenter.nsxd.vapi vAPI provider。
检查:https://{vcenter}/vapiendpoint/health
二、故障分析
vapi-endpoint提供对vAPI服务的单点访问。我们还可以按照需求修改 vAPI Endpoint service的属性配置;
检查vcenter的endpoint.log,日志位置如下:
vCenter Server Appliance :/var/log/vmware/vapi/endpoint
Windows vCenter Server:C:\ProgramData\VMware\vCenterServer\logs\vapi\endpoint
会看到:
Unexpected error while initializing endpoint runtime state org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named ‘some-bean-name’ is defined
2021-07-31T17:24:42.793Z | WARN | state-manager1 | ApiInterfacesFactory | Retrieving interfaces for service 8a17038f-65
2021-07-31T17:24:42.801Z | WARN | state-manager1 | ApiInterfacesFactory | The cache does not contain entry for service 8a17038f-6504-4830-ac6b-c7e9be79a98e\com.vmware.vcenter.nsxd.vapi. The interfaces will be skipped.
2021-07-31T17:24:42.802Z | INFO | state-manager1 | HealthStatusCollectorImpl | HEALTH YELLOW Failed to connect to 8a17038f-6504-4830-ac6b-c7e9be79a98e\com.vmware.vcenter.nsxd.vapi vAPI provider.
2021-07-31T17:24:42.893Z | INFO | state-manager1 | DefaultStateManager | Invoking vcenter-shim-service-builder
vAPI Endpoint每四分钟重新配置一次,以适应/感知vCenter Server环境中的任何更改;尽管vAPI Endpoint服务遇到故障时无法再重新配置自身并报告黄色状态,但是它使用了缓存的配置(它的上一个成功配置),因此只要没有实际的重新配置需求,就仍然可以为请求提供服务而没有错误。因此,你也可以忽略它;对vAPI Endpoint 来说,触发该黄色警示,已知经验表明,当主机到远程服务器(https://vcenter-url/sts/STSService/vsphere.loca)没有路由l时就会触发;
根本原因是这是vAPI Endpoint中的一个已知问题;当vAPI Endpoint服务重新配置自身并且发生错误处理的异常时,它会进入一种状态,在该状态下,已损坏的spring bean被保存,导致每个后续的重新配置均会失败,并且该服务报告从这里开始,状态为黄色。处理不当的异常可能是:与远程服务器server-URL通讯时出错:com.sun.xml.internal.ws.client.ClientTransportException(HTTP传输错误);java.net.NoRouteToHostException主机没有路由/连接等。甚至会导致当你登录Web Client时,所有对象无法查看(即便是Administrator@vSphere.local),报错:You do not have permissions to view this object or this object does not exist;
另外当vapi-endpoint 服务发现自身注册 Lookup Service时,会连接http://localhost:8920.nsxd,当返回404错误时,就会触发服务监控状态黄色警示;
三、故障处理:
按照官方的建议,需要重新启动vAPI-endpoint服务以清除/重置错误的配置状态来恢复;实际环境中,该服务会自动重启恢复;
这是一个影响vCenter Server 6.0和vCenter Server Appliance 6.0、 vCenter 7.0.x 的已知问题。vCenter 6.0 U3使系统更加稳定,并减少了错误运行状况警报的机会。相关经验显示:vCenter 7.0.0c也会遇到该报错,在vCenter Server 7.0 Update 1已解决。
操作步骤:
1、ssh到VCSA,输入shell切到shell环境;
2、执行:service-control --status vmware-vapi-endpoint
service-control --stop vmware-vapi-endpoint
service-control --start vmware-vapi-endpoint
//或直接访问如下地址来查看服务状态:
https://hostname_or_IP/vapiendpoint/health
还可以检查下ssl证书:
#/usr/lib/vmware-vmafd/bin/vecs-cli entry list --store TRUSTED_ROOT_CRLS
【windows】:
cd C:\Program Files\VMware\vCenter Server\bin下执行:
service-control.bat --stop vapiEndpoint
service-control.bat --start vapiEndpoint
//或查看
https://hostname_or_IP/vapiendpoint/health.
四、附录
vAPI Endpoint service也会因内存不足导致的服务异常,反复重启(vcenter清单对象的内存持续消耗引起的内存泄漏);
日志中有:Unable to login to inventory service or Unable to login/logout to/from inventory service.的报错
每隔四分钟,vAPI端点服务就会触发一次重新配置,并尝试连接到所有其他vCenter服务器节点上的资源清单服务。如果失败,则在重新启动vAPI端点服务之前,不会清理某些对象的内存。这会导致每次运行时内存泄漏,最终导致内存不足。当vAPI端点内存不足时, wrapper 将重新启动服务,自动清除所有泄漏的对象。如果尚未恢复与所有vCenter Server节点的连接,则终结点将很快再次内存不足。