OpenStack 常见问题及解决方法
执行命令
sudo service nova-api restart
返回结果
restart: Unknown instance
有些读者可能刚开始接触Linux操作系统,对于这些简单的命令的运用还不熟悉,不知道如何解决。这个时候需要看明白错误提示,明白出错的原因,比较好的方法是使用搜索引擎搜索错误提示,明白出错的原因。
上面的问题原因是nova-api服务进程原本就没有启动,如果发出”service nova-api restart”命令重启nova-api服务进程,就会出现”未知进程”的错误提示了。
解决方法:
service nova-api start
如下面的问题:
启动rabbitmq-server服务进程
/etc/init.d/rabbimq-server restart
返回结果
Starting rabbitmq-server: FAILED - check /var/log/rabbitmq/startup_log, _err
rabbitmq-server.
从 错误提示可知,rabbitmq-server启动失败,但是没有具体的原因。这个时候可以查看rabbitmq-server服务的日志记录。结果中也 提示了“check /var/log/rabbitmq/start_log,_err”,意思为检查日志记录文件。
利用搜索引擎搜索日志记录文件中的错误记录,可能会找到解决的方法。
原因1
服务器的hostname修改过,重启之后rabbimq-server就可能不能启动了。
解决的办法:
编辑rabbitmq.conf配置文件
vi /etc/rabbitmq/rabbitmq.conf
NODENAME=rabbitmq@hostname
NODE_IP_ADDRESS=172.0.0.1
NODENAME指定使用rabbimq-server进程的用户,hostname是服务器的hostname,NODE_IP_ADDRESS指定了服务器的IP地址。
重新启动rabbitmq-server
原因2:
重启服务器后,rabbitmq-server数据库绑定旧数据
解决办法:
删除rabbitmq-server的数据库
rm –rf /var/lib/rabbitmq/mnesia
下面给出OpenStack云平台涉及到的相关服务进程的日志记录的默认存放地址:
服务进程路径或文件
nova 服务(nova-api, nova-scheduler, nova-objectstore,nova-network,nova- compute,nova-volume)/var/log/nova(每项服务有对应的日志文件,请对应日志文件的文件名进行日志观察)
glance服务(glance-api,glance-regisry)/var/log/glance(每项服务有对应的日志文件,请对应日志文件的文件名进行日志观察)
keystone服务 /var/log/keystone/keystone.log,/var/log/syslog
rabbitmq服务 /var/log/rabbitmq
mysql服务 /var/log/mysql
libvirt服务 /var/log/libvirt
swift服务 /var/log/syslog
memcached服务 /var/log/memcached.log
?网络求助
当 碰上一些无法找到错误原因的问题,通过搜索引擎搜索问题的解决办法,又或者通过登录lauchpad.net进行问题的查询。在该网站上先查询确定是否有 同样的问题已经被解决。如果问题恰好已经被解决,可以参考问题的解决方法进行解决;如果是新的问题出现,可以发帖进行问题提问。
服务进程网站求助地址
novahttps://answers.launchpad.net/nova
glancehttps://answers.launchpad.net/glance
keystonehttps://answers.launchpad.net/keystone
swifthttps://answers.launchpad.net/swift
常见错误问题类型
1.输入的命令错误
执行创建网络命令
nova-manage network create 192.168.0.0/24 1 255
返回结果
Command failed, please check log for more info
结果提示命令错误,但是旧版的官方文档是这样操作的。这种问题出现的原因就是参考了过时的安装文档导致安装失败。所以在安装部署OpenStack的时候记录安装的软件包的版本,这样在求助中说明更可以快速定位问题的原因。
解决方法:
正确的nova-manage network create命令要指定网络名称—label项,--bridge网桥名以及—bridge_interface网桥连接网卡。
nova-manage network create –label private 192.168.0.0/24 1 255 –bridge br100 –bridge_inteface eth1
2.没导入环境变量
问题1:
执行添加Keypair命令
euca-add-keypair test
返回结果
EC2_ACCESS_KEY environment variable must be set.
Connection failed
结果提示EC2_ACCESS_KEY环境变量尚未设置。这种情况在重登录服务器的时候出现,原因在于登出后原本的环境变量清空,需要重新设置环境变量。
解决办法
设置环境变量。具体添加环境变量的情况有两种:一是没有使用Keystone作为身份认证系统的Nova平台;二是使用Keystone作为身份认证系统的Nova平台,参考书本前面章节。
问题2:
执行命令
nova list
返回结果
You must provide a username, eithervia --username or via env[NOVA_USERNAME]
结果提示需要提供用户名或者设置环境变量,这种问题和问题1的出错原因是一样的。
解决办法:
设置环境变量。具体添加环境变量的情况有两种:一是没有使用Keystone作为身份认证系统的Nova平台;二是使用Keystone作为身份认证系统的Nova平台,参考书本前面章节。
3.导入错误的环境变量
执行命令查看虚拟机
euca-describe-instances
返回结果
Warning: failed to parse error message from AWS: <unknown>:1:0: syntax error
None: None
返回结果提示语法错误,即环境变量的设置错误。出现问题的原因可能是使用了Keystone身份认证系统的OpenStack平台导入了使用过去的身份认证系统的环境变量(即nova-manage project zipfile命令产生的环境变量)。
解决办法:
导入正确的环境变量。具体设置参考书本前面章节。
4.服务进程不可用
执行命令查看服务状态
nova-manage service list
返回结果
nova-compute ubuntu01-machine nova enabled XXX 2011-11-21 07:05:02
返回结果中nova-compute服务状态为不可用(XXX)。而可用的服务状态为-:)。
原因1:
nova-compute服务没有开启
解 决办法:在相应的节点上开启相应的服务。如例子的为:在ubuntu04-machine的节点上运行service nova- compute start,开启nova-compute服务。有时候配置错误的情况下nova-服务可能会在开启后自动关闭,执行 ps –ef|grep nova-compute命令查看进程中是否该服务正常运行。
原因2:
rabbitmq-server没有开启,导致不能通信。
解决办法:
开启rabbitmq-server服务进程
/etc/init.d/rabbitmq-server start
原因3:
服务器时间没有同步。
解决办法:
使用ntp服务进行服务器时间同步。具体步骤参考书本前面章节内容。
执行命令
swift –A http://172.0.0.1:5000 –U admin –K password stat –V 2
返回结果
[Errno 111] ECONNREFUSED
返回结果只提示拒绝连接,查看Swift的服务日志/var/log/swift,发现没有任何记录。根据思考,swift使用keystone作为了身份认证系统,因此很有可能是Keystone服务出错。认真搜索日志文件,发现下面信息
Mar 14 08:31:18 nova-compute-3 init: keystone main process (7584) terminated with status 255
由此可见,Keystone服务被终结,导致访问Swift失败。
解决原因:
开启Keystone服务
5.端口占用
执行命令:
开启glance-api服务
service glance-api start
返回结果:
Starting the Token Authentication component
Traceback (most recent call last):
File "/usr/bin/glance-api", line 66, in <module>
server.start(app, int(conf['bind_port']), conf['bind_host'])
File "/usr/lib/pymodules/python2.6/glance/common/wsgi.py", line 65, in start
socket = eventlet.listen((host, port), backlog=backlog)
File "/usr/lib/pymodules/python2.6/eventlet/convenience.py", line 38, in listen
sock.bind(addr)
File "<string>", line 1, in bind
socket.error: [Errno 98] Address already in use
返回的结果提示”Address already in use”。通过搜索引擎搜索,得出端口被占用的原因。出现问题应该是有其他进程占用了glance-api要使用的端口导致glance-api进程启动失败。
解决办法:
终结占用端口的进程,或者修改glance-api服务进程使用的端口。修改glance-api服务端口需要在glance-api.conf配置文件中—bind_port配置项指定。