删除Nova计算服务后节点未在Hypervisor及Cell中显示的问题
OpenStack计算节点host_mappings缺失问题排查
一、host_mappings映射的自动创建时机
- 当计算节点的
nova-compute服务首次向nova-conductor注册时,nova-conductor会自动在nova_api.host_mappings表中创建对应主机的映射记录,并关联到对应的cell单元。 - 执行
nova-manage cell_v2 discover_hosts命令时,工具会扫描nova.compute_nodes表中未在host_mappings存在的主机,自动创建映射并匹配到合适的cell。
二、可能遗漏的操作
- 重启
nova-compute恢复服务条目后,未确认nova-conductor服务是否正常运行,导致计算节点的注册请求未被处理。 - 执行
nova-manage cell_v2 discover_hosts时,未指定具体cell UUID(当环境存在多个cell时),默认仅扫描第一个cell,导致目标节点未被发现。 - 删除计算服务后,
nova-compute重启时使用的主机标识(如FQDN、主机名)与nova.compute_nodes表中记录不一致,导致自动发现无法匹配。
三、进一步排查与修复步骤
1. 检查nova-conductor服务状态与日志
- 确认服务运行状态:
sudo systemctl status nova-conductor - 实时查看日志排查报错:
sudo journalctl -u nova-conductor -f,重点关注是否有处理os-compute03.maas注册请求时的权限异常、数据库连接错误等信息。
2. 验证主机标识一致性
- 在计算节点执行
hostname -f获取完整FQDN,对比nova.compute_nodes表中该节点的host字段值,确保两者完全一致(包括大小写、域名后缀)。
3. 针对指定cell执行主机发现
- 先获取所有cell的UUID:
nova-manage cell_v2 list_cells - 对每个cell执行发现命令:
sudo nova-manage cell_v2 discover_hosts --cell_uuid <CELL_UUID> --verbose,强制扫描目标cell下的未映射主机。
4. 手动创建host_mappings记录(应急方案)
如果自动发现失败,可手动插入映射:
- 查询计算节点在
nova.compute_nodes中的记录:SELECT id, host FROM nova.compute_nodes WHERE host = 'os-compute03.maas'; - 查询目标cell的UUID:
SELECT uuid FROM nova_api.cells WHERE name = 'cell1'; -- 替换为实际cell名称 - 插入映射记录:
INSERT INTO nova_api.host_mappings (host, cell_id, created_at, updated_at) VALUES ('os-compute03.maas', '<CELL_UUID>', NOW(), NOW()); - 插入后重启服务:
sudo systemctl restart nova-conductor nova-scheduler,再执行openstack hypervisor list验证。
5. 检查数据库完整性与权限
- 检查
nova_api数据库表是否损坏:mysqlcheck -u nova -p nova_api - 确认
nova数据库用户对nova_api库拥有读写权限。
内容的提问来源于stack exchange,提问作者Darko P.
相关产品推荐
相关产品推荐

