OpenStack配置起来还是挺麻烦的,特别是网络那块。虽然官方文档越来越清晰,但有时还是会出各种错。排错主要是看日志、看官方文档和google
以下就一些虚机相关常见的错误做一下总结(基于Icehouse版):
1.起虚机时报 'No valid host' 错误
个人觉得 No valid host 是比较简单的错,那几个单词的意思就已经告诉我们很多信息了,No valid host 原因有很多种
(1)nova compute服务异常,用openstack-status查看各个服务是否是active,若服务未正常启动,查看相应日志,比如查看/var/log/nova/compute.log
(2)nova compute启动ok,但是没有跟controller连上,在controller节点上运行nova-manage service list看看,如下:
上图有两个compute,状态都是笑脸。如果有多个compute,而有的compute不能和controller相连的话,就会显示不出来。如果确实没能和controller连上,把controller的iptables关了试试,如果有用就说明需要在iptables中开放端口,比如qpid端口5672等
(3)计算节点确实没有flavor中定义的那么多资源了,具体可以查看/var/log/nova/scheduler.log
(4)计算节点不支持kvm,修改nova.conf中的virt_type为qemu。查看是否支持kvm,执行 egrep -c '(vmx|svm)' /proc/cpuinfo 如果输出结果大于0,那么就表示支持kvm。
(5)其他,自行查看日志
2.启动虚机时,一直spawning,拿不到fixed IP
拿不到IP肯定是网络的问题,首先检查计算节点上neutron组件是否安装配置正确,然后检查nova.conf是否有如下配置:
network_api_class = nova.network.neutronv2.api.API neutron_url = http://controller:9696 neutron_auth_strategy = keystone neutron_admin_tenant_name = service neutron_admin_username = neutron neutron_admin_password = neutron_pass neutron_admin_auth_url = http://controller:35357/v2.0
3.VirtualInterfaceCreateException: Virtual Interface creation failed
(1)查看控制节点/etc/neutron/neutron.conf是否有nova相关配置
otify_nova_on_port_status_changes = True notify_nova_on_port_data_changes = True nova_url = http://controller:8774/v2 nova_admin_username = nova nova_admin_tenant_id = SERVICE_TENANT_ID nova_admin_password = NOVA_PASSWORD nova_admin_auth_url = http://controller:35357/v2.0
(2)如果是多region,查看是否在配置文件指定region
4.虚机正常启动,但fixed ip ping不通
(1)查看安全组是否开放ICMP,需要开放ICMP
(2)直接ping fixed ip肯定ping不通,需要路由。具体如下:
执行 ip netns,然后找到虚机所在子网的路由,然后再ping。
5. 虚机看似启动没问题,也显示有fixed ip,但是nova console-log显示如下:
Starting network... udhcpc (v1.20.1) started Sending discover... Sending discover... Sending discover... No lease, failing WARN: /etc/rc3.d/S40-network failed cirros-ds 'net' up at 181.07 checking http://169.254.169.254/2009-04-04/instance-id
...
具体往下看虚机信息,就能看到虚机没有真正拿到fixed ip。解决办法:
(1)在网上看到有人说执行一条命令,如下:
iptables -A POSTROUTING -t mangle -p udp --dport 68 -j CHECKSUM --checksum-fill --checksum-fill Compute and fill in the checksum in a packet that lacks a checksum. This is particularly useful, if you need to work around old applications such as dhcpclients, that do not work well with checksum offloads, but don't want to disable checksum offload in your device.
但是我执行了没用,大概错误不一样吧。
这个方法是改iptables,防火墙可能把通信挡住,建议把防火墙关掉试试。
(2)neutron在controller节点少配置了一些东东。
由于跟网络相关,自然想到是否neutron没有配置正确,仔细查看了一下。发现controller节点(/etc/nova/nova.conf)没有配置如下东东:
service_neutron_metadata_proxy=true neutron_metadata_proxy_shared_secret=METADATA_SECRET
因为这个配置在官方文档中写在 Add a Networking service->Configure network node小节,没想到其中还有关于controller节点的配置。
(3)其他neutron相关错误。比如ovs local_ip配置错误。
在配置文件/etc/neutron/plugins/ml2/ml2_conf.ini中,如果是多节点安装,local_ip不能使localhost或者127.0.0.1,必须是其他结点能访问到的IP,因为要建立GRE通道。