前几天碰到问题,公司的infra部门说他们重启一台宿主机后,有几台虚拟机启动不了,一直处于rebooting状态,我进到宿主机,发现是libvirt进程出现了问题,导致虚拟机启动不了,现在总结一下解决虚拟机故障的一般方法。
要解决虚拟机故障,我们首先要理解OpenStack是如何管理虚拟机的,一般OpenStack默认使用KVM作为hypervisor,创建一台虚拟机时,首先用户请求至nova-api,nova通过一系列处理,会生成一个虚拟机配置文件(格式为xml),最后通过libvirt根据配置文件生成虚拟机。由上面的过程我们可以知道,虚拟机故障问题一般出现在以下三层:openstack,libvirt,kvm。因此当虚拟机出现故障时,一般从上到下逐层进行排查。
首先,进行openstack层面的排查,openstack的各个进程必须正常运行,才有可能执行虚拟机的各种操作(创建删除重启等),因此我们可以利用nova service-list命令确定nova的各项进程(nova-cert、nova-conductor、nova-scheduler、nova-novncproxy、nova-network、nova-compute等)都正常,nova-api这个进程存在,可以通过查看/var/log/nova里面的各项日志(nova-api.log、nova-conductor.log、nova-manage.log、nova-scheduler.log、nova-compute.log、nova-network.log)确定虚拟机出现什么问题了。相对而言,openstack这一层面的问题还是比较好解决&#