好不容易在 Ubuntu 22.04 上把 OpenStack 部署完了,兴致勃勃想启动 Nova 服务,结果咔嚓一下失败了,是不是特闹心?Nova 可是 OpenStack 的核心计算组件,它起不来,虚拟机啥的都没法用。别慌,今天小编就带你一步步排查,多数问题都能搞定。
一、先看日志!错误线索都在里面
你可能会问,日志在哪儿看啊?Ubuntu 里的 Nova 服务日志主要在这两个地方:
/var/log/nova/nova-api.log
:API 服务的日志,启动失败一般先看这个/var/log/nova/nova-compute.log
:计算节点的日志,计算服务起不来就查这个
看日志有个小技巧,用grep -i "error" 日志文件
快速定位错误信息,比如搜 “Failed to connect” 或者 “Permission denied”,一下子就能抓住重点。
二、常见失败原因及解决办法(附操作步骤)
1. 数据库连接失败 —— 最容易踩的坑
为啥会这样?
Nova 启动时要连 MySQL/MariaDB 数据库,要是地址、用户名、密码错了,肯定连不上。Ubuntu 22.04 里 OpenStack 的配置文件一般在/etc/nova/nova.conf
,打开看看这几行对不对:
plaintext
[database]
connection = mysql+pymysql://nova:你的密码@控制节点IP/nova?charset=utf8
怎么解决?
① 先手动测试数据库连接:mysql -u nova -p -h 控制节点IP
,输密码能进去就说明账号密码对了
② 要是连不上,可能是数据库没授权,在数据库里执行:GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY '你的密码';
③ 改完配置文件别忘了重启数据库:systemctl restart mysql
,再重启 Nova:systemctl restart nova-api
2. 消息队列(RabbitMQ)配置错误
核心问题在哪?
Nova 各组件靠 RabbitMQ 通信,配置里的用户名、密码或端口错了就会失败。配置文件里这段得检查:
plaintext
[DEFAULT]
transport_url = rabbit://openstack: Rabbit密码@控制节点IP:5672/
排查步骤:
- 用
rabbitmqctl list_users
看看有没有 openstack 用户,没有的话新建一个 - 检查 RabbitMQ 状态:
systemctl status rabbitmq-server
,没启动就start
它 - 防火墙是不是挡了 5672 端口?Ubuntu 22.04 用的是 ufw,执行
ufw allow 5672/tcp
放行
3. 权限不足 ——Ubuntu 系统常犯的错
哪些文件容易有权限问题?
- Nova 的日志目录:
/var/log/nova
,要是属主不是 nova 用户,会报 “Permission denied” - 配置文件
/etc/nova/nova.conf
,权限太松或太紧都不行
修复命令:
plaintext
chown -R nova:nova /var/log/nova
chmod 640 /etc/nova/nova.conf # 640权限比较合适,既安全又能让nova用户读取
4. 依赖包不兼容 ——Ubuntu 22.04 的 “新系统烦恼”
Ubuntu 22.04 自带的 Python 版本是 3.10,有些 OpenStack 版本可能对这个版本支持不好。比如你装的是较老的 OpenStack 版本,可能会报 “ModuleNotFoundError”。
怎么办?
① 换个兼容的 OpenStack 版本,比如 Yoga 或 Zed,这两个对 Ubuntu 22.04 支持更好
② 要是必须用旧版本,就得手动装低版本依赖,比如用pip3 install 'sqlalchemy<2.0'
(有些老版本 OpenStack 不支持 sqlalchemy 2.0+)
三、进阶排查:用 systemctl 和 journalctl 找线索
有时候systemctl start nova-api
只告诉你 “失败”,没具体信息,这时候用journalctl -u nova-api -f
实时看启动日志,能抓到更详细的错误。比如看到 “Failed to bind port 8774”,那就是端口被占用了,用netstat -tulpn | grep 8774
看看谁占了,kill 掉就行。
四、表格总结:快速定位问题的 “cheat sheet”
错误提示关键词 | 可能原因 | 优先检查项 |
---|---|---|
Connection refused | 数据库 / 消息队列没启动 | 服务状态(systemctl status) |
Access denied | 账号密码错误 | 配置文件里的认证信息 |
Permission denied | 文件权限不对 | 日志目录和配置文件的属主 |
ModuleNotFoundError | 依赖包缺失或版本不对 | pip list 检查安装的包版本 |
其实 Nova 服务启动失败,看着吓人,多数时候都是配置或权限的小问题。小编建议大家部署时,每步都记一下配置的参数,比如数据库密码、RabbitMQ 地址,免得后面忘了。另外,Ubuntu 22.04 虽然新,但和有些 OpenStack 版本兼容性还在完善,选版本时尽量挑官方推荐的组合(比如 OpenStack Zed + Ubuntu 22.04),能少走很多弯路。遇到解决不了的,多看看 OpenStack 的官方 bug 列表,说不定别人也遇到过,有现成的解决方案呢!