文章背景图

OpenStack 运维排障指南:实例创建失败、网络不通与卷挂载异常

2026-07-25
3
-
- 分钟

OpenStack 故障往往跨越多个服务。一个实例处于 ERROR,可能来自配额、调度、镜像、网络、存储、计算节点或消息队列。有效的排障方法不是同时重启所有服务,而是先确定请求停在哪一层,再围绕 request ID 串联证据。

## 1. 先保存基本信息

```bash

openstack server show VM_NAME -f yaml

openstack server event list VM_NAME

openstack port list --server VM_NAME

openstack volume list --server VM_NAME

openstack console log show VM_NAME

```

记录实例 ID、项目、状态、task_state、power_state、host、instance_name、镜像、flavor、端口、卷、错误信息和最近变更。不要在收集证据前删除实例或强制改状态。

## 2. 使用 Request ID 串联日志

OpenStack API 响应和实例事件通常包含 request ID。先从客户端增加调试输出或查看 server event,再在 nova-api、nova-scheduler、nova-conductor、nova-compute、neutron-server、cinder 和 glance 日志中查询同一个 ID。

```bash

openstack --debug server create ...

openstack server event list VM_NAME

```

日志路径随容器化部署、发行版和运维框架不同。不要假设所有服务都位于 /var/log,应先确认部署方式和日志平台。

## 3. 实例创建失败的分层排查

### API 与配额

症状:请求立即失败、401/403、Quota exceeded、资源引用不存在。

检查:

```bash

openstack token issue

openstack quota show

openstack flavor show FLAVOR

openstack image show IMAGE

openstack network show NETWORK

```

### 调度与 Placement

症状:NoValidHost,实例很快进入 ERROR。

检查:

```bash

openstack compute service list

openstack hypervisor list --long

openstack resource provider list

openstack resource provider inventory list RP_UUID

openstack resource provider allocation show CONSUMER_UUID

```

确认资源库存、allocation、主机聚合、可用区、extra specs、NUMA、Huge Page、CPU pinning 和 PCI/SR-IOV 约束。hypervisor 显示有空闲资源,不代表所有调度条件都满足。

### 计算节点与虚拟化

症状:实例已经调度到主机,但 Spawn failed、libvirt error 或卡在 BUILD。

检查:

```bash

openstack server show VM_NAME -c OS-EXT-SRV-ATTR:host \

-c OS-EXT-SRV-ATTR:instance_name

openstack compute service list --host COMPUTE_HOST

systemctl status nova-compute

virsh list --all

```

继续检查 nova-compute、libvirt、qemu、容器运行时、磁盘空间、权限、镜像缓存、KVM 模块和消息队列连接。

## 4. 网络不通的排查顺序

1. 实例系统是否正确识别网卡、MAC 和 IP。

2. Neutron Port 是否 ACTIVE,fixed IP 与 MAC 是否一致。

3. Port 的 binding host、vnic_type 和 profile 是否正确。

4. 安全组入口与出口规则是否允许流量。

5. DHCP、Metadata、L2 agent、OVN/OVS 控制面是否正常。

6. 子网网关、Router 和 Floating IP 关联是否正确。

7. 物理网桥、physnet、VLAN Trunk、MTU 和上联交换机是否一致。

常用命令:

```bash

openstack port show PORT_ID -f yaml

openstack security group rule list SECURITY_GROUP

openstack network agent list

openstack router show ROUTER

openstack floating ip show FLOATING_IP

```

在计算节点检查 tap、vnet、OVS/OVN 端口和 libvirt 网卡映射时,必须先通过实例属性确认正确主机和 instance_name。不要根据 VM 名称猜测底层设备。

## 5. SR-IOV 端口不通

除了普通网络检查,还要确认:

- BIOS 和 IOMMU 已启用,内核启动参数正确。

- PF/VF 数量、驱动和链路状态正常。

- sriov-nic-agent Alive,physical_device_mappings 正确。

- 端口 binding:vnic_type=direct,绑定到预期计算节点。

- VLAN、MAC、spoof check、trusted mode 与交换机配置一致。

- NUMA、PCI alias 或 Placement 资源没有冲突。

Guest 修改 MAC 可能导致 SR-IOV agent 把端口标记为 DOWN。先对照 Neutron 记录与 VF 实际 MAC,再判断是否允许 guest 改动。

## 6. 控制台能打开但 SSH 不通

优先检查:

- 系统是否完成启动,cloud-init 是否失败。

- SSH 服务是否监听。

- SSH Key 是否注入正确,用户名称是否匹配镜像。

- 安全组是否放行 TCP 22 和正确来源网段。

- 路由、Floating IP、NAT 和上游 ACL 是否正确。

- 镜像内部防火墙、SELinux 和网卡配置是否阻断。

不要为了排障长期开放全部端口或使用镜像内固定弱密码。

## 7. 卷挂载与分离异常

控制面检查:

```bash

openstack volume show VOLUME_ID -f yaml

openstack volume attachment list --volume-id VOLUME_ID

openstack server volume list VM_NAME

openstack volume service list

```

底层检查应根据 Ceph RBD、iSCSI、FC、NVMe-oF 等后端执行。重点对照:Cinder 状态、Nova attachment、计算节点设备映射、libvirt XML 和存储后端连接。

卷卡在 in-use 不等于设备仍在使用,也不能直接把数据库改成 available。先确认 guest 已卸载、实例已停止写入、libvirt 不再引用设备、后端映射已断开,再使用受支持的 attachment 修复或状态管理命令。

## 8. 镜像启动失败

常见原因:

- 实际格式与 disk_format 元数据不一致。

- 镜像缺少 VirtIO 驱动或 bootloader。

- 文件损坏、校验不一致或 Glance 后端不可达。

- 镜像属性与 flavor、架构、固件模式不匹配。

- 计算节点缓存损坏或磁盘空间不足。

使用 openstack image showqemu-img info、控制台日志和 nova-compute 日志交叉确认。修改镜像属性前先验证真实格式,避免掩盖问题。

## 9. 服务和消息队列

```bash

openstack compute service list

openstack network agent list

openstack volume service list

```

服务显示 down 时检查主机时间、进程、数据库、消息队列、TLS、网络和心跳配置。批量重启可能造成更多重复任务和状态错乱,应一次处理一个服务,并观察队列和请求恢复情况。

## 10. 修复后的验证

- 实例状态、任务状态和电源状态一致。

- 新建测试实例能完整通过调度、网络和存储流程。

- 实际业务网络从源到目标可达。

- 卷经过 guest 读写和重启验证。

- 监控、告警和服务心跳恢复。

- 清理临时安全组、测试端口、调试账号和快照。

- 记录时间线、根因、影响、修复和预防措施。

如果故障涉及数据库不一致、孤儿资源或底层存储残留,应在备份后制定明确修复步骤,并优先使用项目提供的管理工具;直接 SQL 只能作为经过验证的最后手段。

## 参考资料

- https://docs.openstack.org/nova/latest/admin/support-compute.html

- https://docs.openstack.org/nova/latest/admin/troubleshooting.html

- https://docs.openstack.org/neutron/latest/admin/index.html

- https://docs.openstack.org/cinder/latest/admin/index.html

原创

OpenStack 运维排障指南:实例创建失败、网络不通与卷挂载异常

本文链接: OpenStack 运维排障指南:实例创建失败、网络不通与卷挂载异常

本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

评论交流

文章目录