OpenStack 经典面试题"nova boot 失败怎么排查",但生产环境的失败往往更狡猾,因为可能是任何子系统的错。本文是我处理过的 7 类典型根因,按发生频率排序。

0. 万能起手式

openstack server show <uuid>
openstack server event list <uuid>
openstack server event show <uuid> <req-id>

event show 里的 traceback 是定位关键,一定先看这个再去翻日志。

如果 event 信息不够,按子系统翻:

# nova-compute(最常用)
tail -200 /var/log/nova/nova-compute.log | grep -i "ERROR\|TRACE"

# nova-scheduler(调度失败 NoValidHost)
tail -200 /var/log/nova/nova-scheduler.log

# neutron-server(网络绑定失败)
tail -200 /var/log/neutron/neutron-server.log

1. NoValidHost — 调度找不到节点

最常见。可能原因:

  • 资源不够openstack hypervisor list --long 看 CPU/RAM 剩余
  • 超分被打满cpu_allocation_ratio / ram_allocation_ratio 已经被吃满
  • filter 把节点排除了AvailabilityZoneFilter / AggregateInstanceExtraSpecsFilter 经常是元凶
  • PCI 设备/SR-IOV 不匹配

排查:scheduler 日志开 DEBUG,看 Filter X returned 0 hosts

2. PortBindingFailed — 端口绑定不到节点

nova-compute.log: PortBindingFailed: Binding failed for port xxx

90% 是 OVS agent / Linuxbridge agent 在目标节点上挂了,或者 bridge_mappings 没配对:

openstack network agent list
# 重点看 alive=True / state=UP

另一个坑:vnic_type=direct(SR-IOV)但目标节点没 sriov-agent。

3. 镜像问题

  • 镜像格式不对qcow2 但 backend 是 LVM,需要转换
  • 镜像 size 没设:从 Glance 拉下来还要校验,size 不对会 hang
  • HTTPS 自签证书:nova-compute 拉镜像时 SSL 校验失败

排查:glance image-show <uuid>checksumstatus=active

4. Cinder 挂卷超时

带 volume boot 的 instance 经常这里出事:

Block Device Mapping is Invalid
  • iSCSI/RBD 挂载失败:去 cinder-volume.log
  • 卷状态 errorcreating 卡住:openstack volume showattachments
  • 多路径配置缺失:/etc/multipath.conf 没配

5. DHCP / metadata 拿不到

虚机起来了,但进系统后 IP 拿不到、SSH key 没注入:

  • DHCP agent 死了neutron-dhcp-agent 状态
  • metadata-agent 路径不通:检查 neutron-ns-metadata-proxy 进程
  • config_drive 没启用:对老镜像或者 cloud-init 没装的,建议强制 config_drive=True

6. Libvirt / Hypervisor 层

罕见但很烦:

  • KVM 模块没加载(modprobe kvm_intel / kvm_amd
  • CPU model 不兼容(迁移过来的虚机,目标节点 CPU flag 不够)
  • qemu-kvm 版本和 libvirt 版本不匹配

定位看 /var/log/libvirt/qemu/<instance>.log,最直接。

7. quota 满了

QuotaError: Quota exceeded for cores

简单粗暴:

openstack quota show <project>
openstack quota set --cores 200 <project>

但注意 quota 是 per-project 的,admin 看的是自己 project 的 quota,不是用户的。

我自己的 checklist

新环境出问题,按这个顺序看,95% 五分钟内定位:

  1. server event show 抓 traceback
  2. 看是不是调度问题(NoValidHost)→ scheduler 日志
  3. 看 hypervisor 资源水位 → hypervisor list --long
  4. 看 neutron agent 是不是都活着
  5. 看 nova-compute 日志最近 1 分钟的 ERROR
  6. 看 libvirt qemu 日志(最后兜底)

教训一句话:OpenStack 出问题 80% 在 neutron 和 scheduler,先排这两个能省 80% 的时间。

标签: none

添加新评论