一、 扩容计算节点主机名更新
- 问题描述:在扩容计算节点了计算节点之后,新添加的主机,在物理机中的hosts文件上不会立刻更新之后,容器不重启,不会更新,这导致,在热迁移指定节点,找不到目的主机
- 解决方法:重启计算节点上的nova_compute, nova_libvirt容器
docker restart nova_compute nova_libvirt
三、raw 格式镜像转换、上传步骤
- 问题描述:一般的image格式为qcow2,因平台存储后端为ceph,因此建议上传到glance的镜像为raw格式。
- 转换步骤:
# 使用qemu-img工具转换
qemu-img convert win2012.qcow2 -O win2012.raw
# 确认转换是否成功:
qemu-img info win2012.raw如图:
- 使用openstack命令上传到glance:
source /path/to/venv/bin/activate
source /etc/kolla/admin-openrc.sh
openstack image create --disk-format raw --container-format bare --public win2012 --file win2012.raw四、 VIP同时存在于三个控制节点上
- 问题描述:VIP同时存在于三个控制节点上
- 解决办法:在部署节点使用ansible重启keepalived和haproxy服务解决,具体如下:
ansible -i /root/multinode control -m shell -a "docker restart keepalived"
ansible -i /root/multinode control -m shell -a "docker restart haproxy"五、虚拟机创建失败,提示「No valid host was found」
- 问题描述
通过 Dashboard/CLI 创建虚拟机时,报错No valid host was found,虚拟机处于ERROR状态,无实例 ID 或实例 ID 创建后无状态。 - 问题排查
- 查看 Nova 调度器日志:tail -f /var/log/nova/nova-scheduler.log,过滤关键词No valid host/filter,确认是调度器过滤规则导致无符合条件的计算节点;
- 检查计算节点状态:openstack compute service list,确认 nova-compute 服务是否为up状态,无down/disabled;
- 验证计算节点资源:在控制节点执行
nova hypervisor-show <计算节点名>,检查 CPU、内存、磁盘是否满足虚拟机创建要求(无资源不足); - 检查虚拟机规格与计算节点属性:确认创建的虚拟机规格(flavor)的 CPU / 内存 / 磁盘未超过计算节点可用资源,且 flavor 无自定义属性(如 GPU、磁盘类型)与计算节点不匹配;
- 处理方法
- 若计算节点 nova-compute 服务 down:在计算节点重启服务,并检查nova.conf中[keystone_authtoken]/[rabbitmq]配置是否正确;
- 若计算节点资源不足:扩容计算节点资源,或调整虚拟机 flavor 规格,或启用 Nova 资源超配(在nova.conf中配置cpu_allocation_ratio/ram_allocation_ratio);
- 若调度器过滤规则导致:临时禁用不必要的过滤器(在nova.conf的[filter_scheduler]段修改enabled_filters),或修正计算节点属性使其符合过滤规则;
六、创建虚拟机失败
- 问题描述:虚拟机创建失败,涉及模块 nova-compute、nova-conductor、openvswitch-agent,影响云平台功能。
- 排查过程
- 命令行查看nova/ovs 服务异常;
- nova、neutron等组件日志显示 rabbitmq 连接断开且未重连,服务假死;
- 处理方法:重启相关容器后,日志正常输出,服务恢复。:docker stop/start nova_compute、nova_conductor、neutron_openvswitch_agent;
七、rabbitmq 脑裂
- 问题描述:rabbitmq 集群脑裂,control01、03 节点脱离集群但容器 UP。
- 排查过程
- 检查集群状态发现节点脱离;
- 查看 control02 日志,与另外两节点心跳停止,Mnesia 判定网络分区。
- 处理方法:重启 rabbitmq 服务:rabbitmqctl stop_app && rabbitmqctl start_app(control01、03 节点容器内执行);
八、虚拟机 resize 失败
- 问题描述:虚拟机扩容失败,多次尝试扩容、迁移、疏散均未成功,涉及模块 Nova,影响云平台功能。
- 排查过程
- 查看 migration 记录,虚拟机扩容时出现 error;
- nova 日志提示 vcpu 超最大限制,初步怀疑资源不足;
- 核查 com03 节点资源(88C/128C),排除资源不足;
- 发现新 flavor 含 hw:live_resize 属性,该属性限制 vcpu 为物理 CPU 一半;单节点超配后 CPU 为 64C,flavor 超出限制导致失败。
- 处理方法:
移除 live_resize 参数:openstack flavor unset --property hw:live_resize $flavorid;
创建 flavor 时默认移除该属性,通过openstack flavor list/show $flavorid核查。
九、数据库脑裂
- 问题描述:控制节点数据库脑裂,导致云服务异常
- 处理方法:
- 修复前检查,先查看各个控制节点是否有 safe_to_bootstrap =1,执行:
ansible -i ~/multinode control -m shell -a 'cat /var/lib/docker/volumes/mariadb/_data/grastate.dat|grep safe_to_bootstrap' - 如果有节点值为1,直接写入下面mariadb_recover_inventory_name处,然后执行修复命令
- 如果没有 查看
ansible -i ~/multinode control -m shell -a 'cat /var/lib/docker/volumes/mariadb/_data/gvwstate.dat’
有输出的,手动去修改safe_to_bootstrap值为1,再修复 - 执行修复
ansible -i multinode control -m shell -a 'docker stop mariadb' kolla-ansible -I /multinode mariadb_recovery -e mariadb_recover_inventory_name=node33 |tee mariadb_recovery.log
十、虚拟机数据库中记录与libvirt底层记录不一致
- 问题描述:虚拟机数据库中记录与libvirt底层记录不一致;此现象源于虚拟机疏散和迁移,并且虚拟机状态error
- 处理方法:
- 确认vm 在数据库中的记录
openstack server show $vm_uuid |grep -Ei '(com|instance)'可以得出VM数据库中的记录及kvm底层信息 - 在数据库记录的宿主机(A节点)查看该实例
docker exec nova_libvirt virsh list --all |grep instance-xxx - B节点确认方法
若为热迁移造成,则B节点为目标节点;若为疏散造成,可在数据库中确认B节点 - 在B节点底层查看
docker exec nova_libvirt virsh list --all |grep instance-xxx - B节点关闭虚拟机(B计算节点操作,该步骤是软关机虚拟机;destroy为硬关机虚拟机)
virsh shutdown instance-xxx - 硬重启虚拟机
nova reboot --hard $vm_uuid - 在A节点底层查看实例是否成功运行
8、确认A节点底层运行成功后,在B节点底层执行undefine操作docker exec -it -uroot nova_libvirt bash # 查看是否已经正常启动(若进入登录界面,则为正常启动状态) virsh console instance-xxx # 确认运行状态 virsh list --all|grep instance-xxx9、、确认instance-xxx 是否在B节点undefine成功(B计算节点操作)# docker exec -itu root nova_libvirt bash # virsh undefine instance-xxx (B计算节点操作)virsh list --all|grep instance-xxx
作者:束鹏 创建时间:2026-02-06 09:44
最后编辑:束鹏 更新时间:2026-03-10 17:50
最后编辑:束鹏 更新时间:2026-03-10 17:50