Troubleshoot Compute¶
Compute 常见的故障通常涉及配置错误的网络或凭据在环境中未正确获取。此外,大多数扁平网络配置不允许从计算节点到在该节点上运行的实例的 ping 或 ssh。另一个常见问题是在 64 位计算节点上运行 32 位镜像。本节介绍如何排查 Compute 的问题。
待办事项
将以下部分移动到子页面以提高可读性。
Compute 服务日志¶
Compute 将每个服务的日志文件存储在 /var/log/nova 中。例如,nova-compute.log 是 nova-compute 服务的日志。您可以在 nova.conf 文件中的 nova.log 模块中设置以下选项以格式化日志字符串
logging_context_format_stringlogging_default_format_string
如果日志级别设置为 debug,您还可以指定 logging_debug_format_suffix 以附加额外的格式。有关格式化程序中可用的变量的信息,请参阅 Formatter Objects(格式化程序对象)。
基于配置设置,OpenStack Compute 有两种日志记录选项。在 nova.conf 中,包含 logfile 选项以启用日志记录。或者,您可以设置 use_syslog = 1,以便 nova 守护进程将日志记录到 syslog。
Guru Meditation 报告¶
当 Compute 服务收到 SIGUSR2 信号(Mitaka 之前的 SIGUSR1)时,会发送 Guru Meditation 报告。此报告是一种通用错误报告,其中包含有关服务当前状态的详细信息。错误报告会发送到 stderr。
例如,如果您使用 nova-compute 2>/var/log/nova/nova-compute-err.log 将错误输出重定向到 nova-compute-err.log,导致进程 ID 为 8675,然后您可以运行
# kill -USR2 8675
此命令会触发 Guru Meditation 报告打印到 /var/log/nova/nova-compute-err.log。
对于基于 WSGI 的服务,如 nova-api-wsgi 和 nova-metadata-wsgi,由于 Web 服务器自身的信号处理,使用信号并不容易。作为一种可用于独立和托管入口点的基于信号的方法的替代方案,可以使用基于文件的触发器。
配置服务通过文件的修改时间更改来触发 GMR。.. code-block
[oslo_reports]
file_event_handler=/var/lib/nova
然后可以通过触碰该文件或目录来触发报告。GMRb 将被发出在服务通常记录日志的相同位置。.. code-block:: console
touch /var/lib/nova
请注意,某些 Web 服务器在没有要处理的 HTTP 请求时会冻结请求处理程序进程。这会阻止文件系统监视循环检测到更改。因此,在触碰文件后,请向给定的 WSGI 应用程序发送 HTTP 请求。.. code-block:: console
openstack compute service list
有关更多详细信息和完整的示例,您可以查看 openstack-must-gather。
该报告包含以下部分
Package(包):显示有关进程所属的包的信息,包括版本信息。
Threads(线程):显示进程中每个线程的堆栈跟踪和线程 ID。
Green Threads(绿色线程):显示进程中每个绿色线程的堆栈跟踪(绿色线程没有线程 ID)。
Configuration(配置):列出当前可通过 CONF 对象访问的所有配置选项。
有关更多信息,请参阅 Guru Meditation Reports(Guru Meditation 报告)。
Compute 常见错误和修复¶
ask.openstack.org 网站提供了一个提问和解答问题的场所,您还可以将问题标记为常见问题。本节介绍了一些人们之前发布过的错误。错误会不断得到修复,因此在线资源是获取最新错误和修复方法的绝佳途径。
凭据错误、401 和 403 禁止错误¶
问题¶
缺少凭据会导致 403 forbidden 错误。
解决方案¶
要解决此问题,请使用以下方法之一
手动方法
从项目 ZIP 文件中获取
novarc文件,保存现有凭据以防覆盖,并手动获取novarc文件。脚本方法
从项目 ZIP 文件生成
novarc并为您获取它。
当您第一次运行 nova-api 时,它会生成证书颁发机构信息,包括 openssl.cnf。如果您在 CA 服务之前启动这些服务,则可能无法创建您的 ZIP 文件。重新启动这些服务。当您的 CA 信息可用时,创建您的 ZIP 文件。
此外,请检查您的 HTTP 代理设置,查看它们是否会导致 novarc 创建问题。
实时迁移权限问题¶
问题¶
在实时迁移实例时,您可能会看到如下错误
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)。您可以通过尝试以 root 用户连接到远程主机来确保一切配置正确。再次使用上面的示例
$ su - -c 'ssh stack@cld6b16'
实例错误¶
问题¶
有时某个实例显示 pending,或者您无法 SSH 到它。有时镜像本身就是问题所在。例如,当您使用扁平管理器网络时,您没有 DHCP 服务器,并且某些镜像不支持接口注入;您无法连接到它们。
解决方案¶
要修复实例错误,请使用支持此方法的镜像,例如 Ubuntu,它可以使用 FlatManager 网络设置正确获取 IP 地址。
要排查实例的其他可能问题,例如停留在生成状态的实例,请检查 nova-compute 主机上的 /var/lib/nova/instances 下的特定实例的目录,并确保这些文件存在
libvirt.xmldiskdisk-rawkernelramdiskconsole.log,实例启动后。
如果缺少任何文件、为空或非常小,则 nova-compute 服务未能成功从镜像服务下载镜像。
此外,请检查 nova-compute.log 是否存在异常。有时它们不会出现在控制台输出中。
接下来,检查 /var/log/libvirt/qemu 目录中的实例日志文件,查看它是否存在以及是否包含任何有用的错误消息。
最后,从实例的 /var/lib/nova/instances 目录中,查看此命令是否返回错误
# virsh create libvirt.xml
Linux 实例的空日志输出¶
问题¶
您可以从仪表板的 Log 选项卡或 nova console-log 的输出中查看正在运行的实例的日志输出。在某些情况下,正在运行的 Linux 实例的日志输出将为空或仅显示单个字符(例如,? 字符)。
这是因为 Compute 服务尝试通过串行控制台检索实例的日志输出,而实例本身未配置为将输出发送到控制台。
解决方案¶
要解决此问题,请将以下参数附加到实例引导加载程序中指定的内核参数
console=tty0 console=ttyS0,115200n8
重新启动后,实例将配置为将输出发送到 Compute 服务。
重置实例的状态¶
问题¶
实例可能停留在中间状态,例如 deleting。
解决方案¶
您可以使用 nova reset-state 命令手动将实例的状态重置为错误状态。然后您可以删除该实例。例如
$ 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
注入问题¶
问题¶
实例可能启动缓慢,或者无法启动。文件注入可能导致此问题。
解决方案¶
要在 libvirt 中禁用注入,请在 nova.conf 中设置以下内容
[libvirt]
inject_partition = -2
注意
如果您尚未启用配置驱动,并且希望使用户指定的文件从元数据服务器可用,以提高性能并避免注入失败时的启动失败,则必须禁用注入。
找不到适用于 x86_64 的合适的模拟器¶
问题¶
当您尝试创建 VM 时,错误显示 VM 处于 BUILD 然后 ERROR 状态。
解决方案¶
在 KVM 主机上,运行 cat /proc/cpuinfo。确保设置了 vmx 或 svm 标志。
请按照 启用 KVM 部分中的说明在您的 BIOS 中启用硬件虚拟化支持。
分离后无法连接卷¶
问题¶
分离同一个卷后无法连接该卷。
解决方案¶
您必须在 nova-attach 命令上更改设备名称。如果 VM 未在 nova-detach 命令运行后清理,则可能会发生这种情况。此示例显示了当您使用 vdb、vdc 或 vdd 设备名称时 nova-attach 命令如何失败
# 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 10 2012-08-29 17:33 pci-0000:00:04.0-virtio-pci-virtio0-part1 -> ../../vda1
lrwxrwxrwx 1 root root 10 2012-08-29 17:33 pci-0000:00:04.0-virtio-pci-virtio0-part2 -> ../../vda2
lrwxrwxrwx 1 root root 10 2012-08-29 17:33 pci-0000:00:04.0-virtio-pci-virtio0-part5 -> ../../vda5
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
lrwxrwxrwx 1 root root 10 2012-08-29 17:33 pci-0000:00:09.0-virtio-pci-virtio4-part1 -> ../../vdd1
如果您多次从同一个 VM 分离并连接同一个卷,并且使用相同的挂载点,也可能会遇到此问题。在这种情况下,请重新启动 KVM 主机。
缺少 sysfsutils 包,无法连接卷¶
问题¶
如果计算节点上未安装必需的 sysfsutils 包,则会出现此警告和错误
WARNING nova.virt.libvirt.utils [req-1200f887-c82b-4e7c-a891-fac2e3735dbb\
admin admin|req-1200f887-c82b-4e7c-a891-fac2e3735dbb admin admin] systool\
is not installed
ERROR nova.compute.manager [req-1200f887-c82b-4e7c-a891-fac2e3735dbb admin\
admin|req-1200f887-c82b-4e7c-a891-fac2e3735dbb admin admin]
[instance: df834b5a-8c3f-477a-be9b-47c97626555c|instance: df834b5a-8c3f-47\
7a-be9b-47c97626555c]
Failed to attach volume 13d5c633-903a-4764-a5a0-3336945b1db1 at /dev/vdk.
解决方案¶
在计算节点上安装 sysfsutils 包。例如
# apt-get install sysfsutils
FC SAN 中无法连接卷¶
问题¶
计算节点无法连接到光纤通道 (FC) SAN 配置中的卷。WWN 可能未正确分区到将计算主机链接到存储阵列的 FC SAN 中
ERROR nova.compute.manager [req-2ddd5297-e405-44ab-aed3-152cd2cfb8c2 admin\
demo|req-2ddd5297-e405-44ab-aed3-152cd2cfb8c2 admin demo] [instance: 60ebd\
6c7-c1e3-4bf0-8ef0-f07aa4c3d5f3|instance: 60ebd6c7-c1e3-4bf0-8ef0-f07aa4c3\
d5f3]
Failed to connect to volume 6f6a6a9c-dfcf-4c8d-b1a8-4445ff883200 while\
attaching at /dev/vdjTRACE nova.compute.manager [instance: 60ebd6c7-c1e3-4\
bf0-8ef0-f07aa4c3d5f3|instance: 60ebd6c7-c1e3-4bf0-8ef0-f07aa4c3d5f3]
Traceback (most recent call last):...f07aa4c3d5f3\] ClientException: The\
server has either erred or is incapable of performing the requested\
operation.(HTTP 500)(Request-ID: req-71e5132b-21aa-46ee-b3cc-19b5b4ab2f00)
解决方案¶
网络管理员必须通过正确分区计算节点 HBA 的 WWN(端口名称)来配置 FC SAN 结构。
Multipath 调用失败退出¶
问题¶
Multipath 调用失败退出。如果在计算节点上未安装可选的 multipath-tools 包,则会出现此警告。这是一个可选包,即使未安装 multipath 工具,卷连接也可以工作。如果计算节点上安装了 multipath-tools 包,则会使用它来执行卷连接。您消息中的 ID 是您系统的唯一 ID。
WARNING nova.storage.linuxscsi [req-cac861e3-8b29-4143-8f1b-705d0084e571 \
admin admin|req-cac861e3-8b29-4143-8f1b-705d0084e571 admin admin] \
Multipath call failed exit (96)
解决方案¶
在计算节点上安装 multipath-tools 包。例如
# apt-get install multipath-tools
卷附加失败,缺少 sg_scan¶
问题¶
无法将卷附加到实例,找不到 sg_scan 文件。当 sg3-utils 包未安装在计算节点上时,会发生此错误。您消息中的 ID 是您系统的唯一 ID
ERROR nova.compute.manager [req-cf2679fd-dd9e-4909-807f-48fe9bda3642 admin admin|req-cf2679fd-dd9e-4909-807f-48fe9bda3642 admin admin]
[instance: 7d7c92e0-49fa-4a8e-87c7-73f22a9585d5|instance: 7d7c92e0-49fa-4a8e-87c7-73f22a9585d5]
Failed to attach volume 4cc104c4-ac92-4bd6-9b95-c6686746414a at /dev/vdcTRACE nova.compute.manager
[instance: 7d7c92e0-49fa-4a8e-87c7-73f22a9585d5|instance: 7d7c92e0-49fa-4a8e-87c7-73f22a9585d5]
Stdout: '/usr/local/bin/nova-rootwrap: Executable not found: /usr/bin/sg_scan'
解决方案¶
在计算节点上安装 sg3-utils 包。例如
# apt-get install sg3-utils
请求的微版本被忽略¶
问题¶
当使用超过 2.1 的微版本发出请求时,例如
$ openstack --os-compute-api-version 2.15 server group create \
--policy soft-anti-affinity my-soft-anti-group
它会报错说“soft-anti-affinity”不是一个有效的策略,尽管它在 2.15 微版本中是允许的。
解决方案¶
确保身份服务目录中的 compute 端点指向 /v2.1 而不是 /v2。前者支持微版本,而后者被认为是遗留的 v2.0 兼容模式路由,它会将所有请求视为在遗留 v2.0 API 上发出的。