排查计算服务是否异常
排查项目:
nova-api
nova-compute
nova-novncproxy
nova-consoleauth
libvirt
查看虚拟机的状态
检查虚拟机是否是运行状态。
如果不是运行状态,启动虚拟机后再次重试VNC登陆。
查看获取URL
通过如下命令确认获取URL是否成功:
nova get-vnc-console 35818330-8966-4966-9f73-b431ab1b2998 novnc
如果获取失败,则查看虚拟机所在计算节点的nova-compute日志,分析失败的原因。
zgrep req-35818330-8966-4966-9f73-b431ab1b2998 /var/log/nova/nova-compute.log*
Token是否过期
VNC URL中的token有个自动老化过期的机制,所以如果登陆不上了,请做如下操作。
如果是在Portal上操作,请关闭当前的vnc窗口,重新打开。
如果通过命令行方式登陆,则重新通过以下命令,获取URL重新尝试登陆:
nova get-vnc-console 35818330-8966-4966-9f73-b431ab1b2998 novnc
排查浏览器原因
尝试以下操作后,重新尝试使用VNC,检测故障是否解决:
清理浏览器的缓存,关闭浏览器,然后再次打开浏览器登陆VNC;
更换浏览器。一般对于Firefox和chrome浏览器都支持,IE浏览器最好IE10以上。
排查配置问题
检查虚拟机所在计算节点的nova.conf配置文件vnc相关的参数是否配置正确。形如下文:
vncserver_proxyclient_address = 192.168.1.15
novncproxy_base_url = [http://10.127.2.31:6080/vnc_auto.html]
其中:
vncserver_proxyclient_address 配置当前计算节点的内部IP地址;
novncproxy_base_url 配置的端口为6080,IP地址为外部可访问的IP地址。
一般可以配置成控制节点的外部IP地址。因为控制节点部署了nova-novncproxy服务;
排查网络故障
检查控制节点和计算节点之间的网络是否存在问题。
在所有的控制节点上ping 虚拟机所在计算节点的IP地址;
如果不通,则需要定位物理网络不通的原因。
VNC端口被防火墙禁止
虚拟机分配的vnc port 范围默认为5900-5999,所以该范围端口需要防火墙放开。
可以通过iptables –S 命令查看防火墙规则:
如果是白名单,看是否开放了此端口范围;
如果没有放开,需要增加这个端口范围的规则。命令如下:
iptables -A INPUT -p tcp -mmultiport --dports 5900:5999 -m comment --comment "001 nova computeincoming nova_compute" -j ACCEPT
日志排查
如果通过以上方法无法解决问题。则需要通过查看vnc的相关日志来查看。涉及以下两个服务的日志:
nova-novncproxy 控制节点 /var/log/nova/nova-novncproxy.log* 负责建立VNC连接
nova-consoleauth 控制节点 /var/log/nova/ nova-consoleauth.log* 负责Token有效性验证