用Mirantis搭建了OpenStack环境,但是在instance启用虚拟机的时候显示连接超时("Connection timeout"),问题排查了一天,终于找到了原因,下面挨踢小茶来介绍一下具体有哪些因素可能会导致这种情况。
首先查看controller下/var/log/nova/nova-novncproxy.log文件,看看会有什么报错:
2015-07-15 12:28:49.341 3960 INFO nova.console.websocketproxy [req-a08c6137-5729-47ba-9d4e-2f7db78a12b7 None] 46: connecting to: 10.186.182.7:5900
2015-07-15 12:28:59.358 3960 INFO nova.console.websocketproxy [req-a08c6137-5729-47ba-9d4e-2f7db78a12b7 None] handler exception: [Errno 32] Broken pipe
看到了虚拟机尝试连接compute节点(10.186.182.7)的VNC端口(5900),但直接出现了报错。
因此先查看一下10.186.182.4的5901的联通性:
在controller下查看:
[root@node-4 ~]# telnet 10.186.182.7 5900
Trying 10.186.182.7...
Connected to 10.186.182.7.
Escape character is '^]'.
RFB 003.008
发现compute节点的5900端口是打开的,而且可以正常连接该端口。
因此重新检查controller节点和compute节点关于nova的配置文件,配置文件也没有太大问题。
在controller节点上输入“nova get-vnc-console test2 novnc”,结果如下:
+-------+-----------------------------------------------------------------------------------+
| Type | Url |
+-------+-----------------------------------------------------------------------------------+
| novnc | http://10.186.182.2:6080/vnc_auto.html?token=1a724d49-dd86-4081-aa05-64cadeac52ef |
+-------+-----------------------------------------------------------------------------------+
通过此URL去访问虚拟机,发现还是同样的报错"connection timeout"
后来在一个论坛上终于找到了解决的方案,是一个DNS引起的问题。
https://bugs.launchpad.net/mos/+bug/1409661
原因是Mirantis的Master节点没有连接到公网的地址,而默认在这个节点上会使用8.8.8.8的DNS服务器地址来做地址解析,所以如果该节点访问不了这个地址(就算连接到Internet也可能访问不了这个地址,因为8.8.8.8是Google的服务器,会被和谐掉,你懂的),就会出现DNS解析超时的情况,因此会出现如题所示的错误。解决方法有2个,一个是将8.8.8.8地址改为一个内网或者公网可以访问到DNS服务器,二是将这个地址改为127.0.0.1,此服务器会忽略DNS解析过程。具体操作步骤如下:
- dockerctl shell cobbler
- vi /etc/dnsmasq.upstream
- 更改8.8.8.8到一个内网或者公网的DNS服务器,或者改成127.0.0.1
- /etc/init.d/dnsmasq reload
然后再试试访问虚拟机的VNC Console,发现已经可以正常访问啦!
其实后来挨踢小茶发现,主要原因是因为用Mirantis部署的所有节点,都会默认使用Mirantis Master上的cobbler机器来做DNS解析,其实解决这个问题的最好方法是将所有节点的/etc/resolv.conf文件进行修改,将DNS修改为公网地址或者是内网可以访问的DNS服务器的地址!
文章评论