Nova 计算节点故障排查指南

Nova 计算节点故障排查指南

Troubleshoot Compute --- 中文版

原文链接:https://docs.openstack.org/nova/2026.1/admin/support-compute.html

文档版本:Nova 33.0.1.dev8 | OpenStack 2026.1 Gazpacho

许可证:Creative Commons Attribution 3.0


一、概述

Nova 计算服务的常见问题通常涉及:网络配置错误、环境中凭据未正确加载、扁平网络不支持从计算节点 ping 或 SSH 到实例、在 64 位计算节点上尝试运行 32 位镜像等。本文档详细介绍如何排查和解决这些问题。

关联子页面


二、Compute 服务日志

日志文件位置

Nova 各服务的日志存储在 /var/log/nova 目录下,例如 nova-compute.lognova-compute 服务的日志文件。

日志格式配置

nova.conf 中可以配置以下选项来格式化 nova.log 模块的日志字符串:

配置项 说明
logging_context_format_string 日志上下文字符串格式
logging_default_format_string 默认日志字符串格式
logging_debug_format_suffix DEBUG 级别下的额外格式后缀

更多可用变量信息请参考 Formatter Objects

两种日志输出方式

nova.conf 中二选一:

方式 配置
文件日志 配置 logfile 选项
syslog 设置 use_syslog = 1

三、Guru Meditation 报告(GMR)

Guru Meditation 报告是一种通用的错误诊断报告,包含服务当前状态的详细信息,在 Nova 服务接收到 SIGUSR2 信号(Mitaka 版本之前为 SIGUSR1)时生成。报告输出到 stderr

信号触发方式

假设已将错误输出重定向到 /var/log/nova/nova-compute-err.log

bash 复制代码
# 启动时重定向错误输出
nova-compute 2>/var/log/nova/nova-compute-err.log

# 发送信号触发 GMR(假设进程 ID 为 8675)
# kill -USR2 8675

执行后 GMR 报告将输出到 /var/log/nova/nova-compute-err.log

文件触发方式(适用于 WSGI 服务)

对于 WSGI 服务(如 compute API 和 metadata API),由于 Web 服务器自身的信号处理机制,使用信号触发不方便。替代方案是使用文件触发。

配置步骤:

  1. nova.conf 中配置 GMR 文件触发路径:
ini 复制代码
[oslo_reports]
file_event_handler=/var/lib/nova
  1. 通过 touch 文件或目录来触发报告:
bash 复制代码
touch /var/lib/nova

⚠️ 注意:某些 Web 服务器在没有 HTTP 请求时会冻结请求处理进程,阻止文件系统监控循环检测到更改。因此在 touch 文件后,需要对 WSGI 应用发起一个 HTTP 请求:

bash 复制代码
openstack compute service list

更多详情和完整示例参见 openstack-must-gather

报告包含的四个部分

部分 内容
Package 进程所属软件包信息,包括版本信息
Threads 进程中每个线程的堆栈跟踪和线程 ID
Green Threads 每个绿色线程的堆栈跟踪(无线程 ID)
Configuration 当前进程中通过 CONF 对象可访问的所有配置选项

更多信息参见 Guru Meditation Reports


四、常见错误及修复方案

ask.openstack.org 是一个问答社区,以下汇总了常见问题及解决方案。


4.1 凭据错误:401/403 Forbidden

问题: 缺少凭据导致 403 Forbidden 错误。

解决方案:

方法 说明
手动方法 从项目 ZIP 文件中获取 novarc 文件,备份现有凭据后手动执行 source novarc
脚本方法 从项目 ZIP 文件自动生成 novarc 并执行 source

首次运行 nova-api 时会生成证书授权(CA)信息,包括 openssl.cnf。如果在 CA 服务就绪前启动了其他服务,可能无法创建 ZIP 文件,此时需要重启服务。同时检查 HTTP 代理设置是否影响了 novarc 的创建。


4.2 热迁移权限问题

问题: 热迁移实例时出现类似错误:

复制代码
libvirtError: operation failed: Failed to connect to remote libvirt URI
qemu+ssh://stack@cld6b16/system: Cannot recv data: Host key verification
failed.: Connection reset by peer

解决方案:

确保已完成 SSH 配置 中的所有步骤。特别注意:libvirt 进程以 root 身份运行,但可能连接到不同用户(如上例中的 stack)。

验证方法:

bash 复制代码
# 使用 root 身份测试 SSH 连接
# su - -c 'ssh stack@cld6b16'

4.3 实例错误(Pending / 无法 SSH / 无法启动)

问题: 实例显示 pending 状态或无法 SSH 连接。有时镜像本身不兼容------例如使用 flat manager 网络时没有 DHCP 服务器,部分镜像不支持接口注入。

解决方案:

  1. 使用支持接口注入的镜像(如 Ubuntu,在 FlatManager 网络下可正确获取 IP)
  2. 对于一直处于 spawning 状态的实例,检查 /var/lib/nova/instances/<实例ID>/ 目录,确认以下文件存在:
文件 说明
libvirt.xml 实例的 libvirt 域 XML 配置
disk 实例磁盘文件
disk-raw 原始磁盘文件
kernel 内核镜像
ramdisk 内存镜像
console.log 实例启动后的控制台日志

如果文件缺失、为空或极小,说明 nova-compute 未能从镜像服务成功下载镜像。

  1. 检查 nova-compute.log 中的异常(控制台可能不显示)
  2. 检查 /var/log/libvirt/qemu/<实例名称>.log 中的错误信息
  3. 在实例目录下执行:
bash 复制代码
# virsh create libvirt.xml

4.4 Linux 实例日志输出为空

问题: 仪表盘 Log 标签页或 nova console-log 输出为空或仅显示单个字符(如 ?)。

原因: Nova 通过串行控制台获取日志,但实例本身未配置向控制台发送输出。

解决方案: 在实例引导加载器的内核参数中添加:

复制代码
console=tty0 console=ttyS0,115200n8

重启后实例将配置为向 Nova 发送控制台输出。


4.5 重置实例状态

问题: 实例卡在中间状态(如 deleting 状态)。

解决方案: 使用 nova reset-state 命令手动重置状态:

bash 复制代码
# 重置为 error 状态,然后删除
$ nova reset-state c6bbbf26-b40a-47e7-8d5c-eb17bf65c485
$ openstack server delete c6bbbf26-b40a-47e7-8d5c-eb17bf65c485

# 或强制恢复为 active 状态
$ nova reset-state --active c6bbbf26-b40a-47e7-8d5c-eb17bf65c485

4.6 文件注入导致启动问题

问题: 实例启动缓慢或无法启动。

原因: 文件注入(file injection)可能导致此问题。

解决方案:nova.conf 中禁用 libvirt 注入:

ini 复制代码
[libvirt]
inject_partition = -2

⚠️ 如果没有启用 config drive(配置驱动器),并且想通过 metadata server 提供用户指定文件以提高性能并避免注入失败的启动故障,则必须禁用注入


4.7 找不到 x86_64 模拟器

问题: 创建 VM 时,VM 进入 BUILD 状态后变为 ERROR 状态。

解决方案:

  1. 在 KVM 主机上检查 CPU 虚拟化支持:
bash 复制代码
# cat /proc/cpuinfo

确认 vmx(Intel CPU)或 svm(AMD CPU)标志存在。

  1. 在 BIOS 中启用硬件虚拟化支持,参考 Enable KVM 的说明。

4.8 卸载后无法重新挂载卷

问题: 卸载卷后无法重新挂载同一个卷。

解决方案: 更换 nova-attach 命令中的设备名称。VM 在执行 nova-detach 后可能未完全清理。

例如,以下 ls 输出显示 vdbvdcvdd 设备名已占用:

bash 复制代码
# ls -al /dev/disk/by-path/
total 0
drwxr-xr-x 2 root root 200 2012-08-29 17:33 .
drwxr-xr-x 5 root root 100 2012-08-29 17:33 ..
lrwxrwxrwx 1 root root 9 2012-08-29 17:33 pci-0000:00:04.0-virtio-pci-virtio0 -> ../../vda
...
lrwxrwxrwx 1 root root 9 2012-08-29 17:33 pci-0000:00:06.0-virtio-pci-virtio2 -> ../../vdb
lrwxrwxrwx 1 root root 9 2012-08-29 17:33 pci-0000:00:08.0-virtio-pci-virtio3 -> ../../vdc
lrwxrwxrwx 1 root root 9 2012-08-29 17:33 pci-0000:00:09.0-virtio-pci-virtio4 -> ../../vdd

如果同一挂载点多次挂载/卸载相同的卷,可能需要重启 KVM 主机


4.9 systool 未安装导致挂载卷失败

问题: 计算节点上缺少 sysfsutils 包:

复制代码
WARNING nova.virt.libvirt.utils [...] systool is not installed
ERROR nova.compute.manager [...] Failed to attach volume [...] at /dev/vdk.

解决方案: 安装 sysfsutils 包:

bash 复制代码
# apt-get install sysfsutils

4.10 FC SAN 无法连接卷

问题: 在 Fibre Channel(FC)SAN 配置中,计算节点无法连接存储卷:

复制代码
ERROR nova.compute.manager [...] Failed to connect to volume [...]
while attaching at /dev/vdj [...]
ClientException: The server has either erred or is incapable of
performing the requested operation. (HTTP 500)

原因: 连接计算主机到存储阵列的 FC SAN 中 WWN(端口名称)分区(zoning)配置不正确。

解决方案: 网络管理员需要在 FC SAN 交换机中正确配置计算节点 HBA 的 WWN 分区。


4.11 Multipath 调用失败

问题: Nova 日志中出现 multipath 警告:

复制代码
WARNING nova.storage.linuxscsi [...] Multipath call failed exit (96)

原因: 计算节点上未安装可选的 multipath-tools 包。

解决方案: 安装 multipath-tools

bash 复制代码
# apt-get install multipath-tools

无需恐慌------没有 multipath tools 时卷挂载仍可正常工作,只是会显示警告信息。


4.12 sg_scan 未找到导致挂载卷失败

问题: 挂载卷到实例时出现 sg_scan 文件未找到错误:

复制代码
ERROR nova.compute.manager [...] Failed to attach volume [...] at /dev/vdc
[...] Stdout: '/usr/local/bin/nova-rootwrap: Executable not found: /usr/bin/sg_scan'

原因: 计算节点上未安装 sg3-utils 包。

解决方案: 安装 sg3-utils

bash 复制代码
# apt-get install sg3-utils

4.13 请求的微版本被忽略

问题: 使用 2.1 以上的微版本发起请求时失败。例如:

bash 复制代码
$ openstack --os-compute-api-version 2.15 server group create \
  --policy soft-anti-affinity my-soft-anti-group

提示 soft-anti-affinity 不是有效策略(而 2.15 微版本已支持该策略)。

原因: Identity 服务目录中 compute 端点指向 /v2 而非 /v2.1

  • /v2.1 路由支持微版本
  • /v2 路由是旧版 v2.0 兼容模式,将所有请求视为旧版 v2.0 API

解决方案: 将 Identity 服务目录中的 compute 端点从 /v2 改为 /v2.1


五、缺失依赖包速查表

错误关键词 缺失包 安装命令(Debian/Ubuntu)
systool is not installed sysfsutils apt-get install sysfsutils
Multipath call failed exit multipath-tools apt-get install multipath-tools
sg_scan not found sg3-utils apt-get install sg3-utils

六、关键配置参数速查

配置文件 Section 参数 用途
nova.conf [libvirt] inject_partition = -2 禁用文件注入
nova.conf [oslo_reports] file_event_handler=/var/lib/nova GMR 文件触发路径
nova.conf [DEFAULT] logfilelog_dir 启用文件日志
nova.conf [DEFAULT] use_syslog = 1 日志输出到 syslog
nova.conf [DEFAULT] logging_context_format_string 日志上下文字符串格式
nova.conf [DEFAULT] logging_default_format_string 默认日志字符串格式

七、故障排查决策树

复制代码
实例异常
│
├─ 状态异常 (pending/error/deleting)
│  ├─ nova reset-state → 重置状态
│  ├─ 检查 /var/lib/nova/instances/ 目录
│  └─ 检查 nova-compute.log
│
├─ 无法启动 / BUILD→ERROR
│  ├─ 检查 CPU 虚拟化 (vmx/svm 标志)
│  ├─ BIOS 启用虚拟化
│  └─ 检查镜像兼容性 (32-bit vs 64-bit)
│
├─ 无法 SSH / 网络不通
│  ├─ 检查安全组规则
│  ├─ 检查 FlatManager DHCP
│  └─ 镜像是否支持接口注入
│
├─ 卷挂载失败
│  ├─ systool 错误 → apt-get install sysfsutils
│  ├─ sg_scan 错误 → apt-get install sg3-utils
│  ├─ multipath 警告 → apt-get install multipath-tools
│  └─ FC SAN 连接失败 → 检查 WWN zoning
│
├─ 热迁移失败
│  └─ SSH 免密配置 (root/libvirt)
│
├─ 空控制台日志
│  └─ 添加 console=tty0 console=ttyS0 内核参数
│
└─ API 请求异常
   ├─ 403 Forbidden → source novarc
   └─ 微版本不生效 → 端点改为 /v2.1

文档整理自 OpenStack Nova 33.0.1 官方文档
许可证:Creative Commons Attribution 3.0

相关推荐
志栋智能3 小时前
告别报告堆砌:超自动化巡检的智能分析与洞察
运维·服务器·网络·人工智能·自动化
小王C语言5 小时前
xshell免密登录
linux·运维·服务器
学习是种信仰6 小时前
远程控制服务器开关机——Wake-on-LAN(WOL 局域网唤醒)
服务器
model20056 小时前
虚拟环境安装yolo26
linux·运维·服务器
墨风如雪6 小时前
FRP、Tailscale、CF Tunnel 三个内网穿透方案我都用过,按场景分着用最稳
服务器
Cat_Rocky7 小时前
keepalived简单配置
linux·运维·服务器
开开心心就好7 小时前
一键扫描电脑重复文件的实用工具
linux·运维·服务器·随机森林·智能手机·excel·启发式算法
DigitalOcean7 小时前
DigitalOcean VPC 网络故障排查 Runbook 实战指南
运维·服务器
Damon小智7 小时前
腾讯云轻量服务器部署 OpenClaw + QClaw 全流程实践:打造随时在线的个人 AI 助手
服务器·云计算·腾讯云