【问题描述】
OpenStack云平台在控制节点上,执行虚拟机硬重启指令,虚拟机状态为error,底层查询虚拟机发现 该虚拟机被删除
nova reboot --hard 虚拟机UUID
【问题排查】
1、底层查看虚拟机的操作
nova instance-action-list 虚拟机UUID
根据Action 中的 操作动作,以及查看对应的操作结果为 Error的,获取对应的Request_ID
2、根据获取到的操作请求的Request_ID,登录到宿主机上查看对应的/var/log/nova日志
req-6c60cdd6-acd8-4c61-846f-ad678df9f26d
ERROR nova.virt.libvirt.guest [] Error launching a defined domain with XML
libvirtError:Failed to activate service 'org.freedesktop.machine1':timed out
Failed to start libvirt guest:libvirtError:Failed to activate service 'org.freedesktop.machine1':timed out
Error from libvirt while getting description of instance-00006666:[Error Code 42] Domain not found : no domain with matching uuid 'xxxx-xxxx-xxxx-xxxx' (instance-00006666): libvirtError: Domain not found :no domain with matching uuid 'xxxx-xxxx-xxxx-xxxx'
ErroR oslo_messaging.rpc.server File "usr/lib/python2.7/site-packages/oslo_messaging/rpc/server.py",line 160,in _process_incoming
3、查看底层虚拟机的状态
nova show 虚拟机UUID
虚拟机状态为Error
4、在宿主机上找不到出故障的虚拟机
virsh list --all
5、计算节点上检查虚拟机相关的文件
ll /var/lib/nova/instance/
/var/lib/nova/instance/目录下还有虚拟机的那个uuid
ll /var/lib/libvirt/qemu/
/var/lib/libvirt/qemu/目录下的domain-xxx-instance-000006666对应的实例目录已经不存在了
6、到计算节点computer-node-AA上查看reboot的调用逻辑
Failed to soft reboot instance. Trying hard reboot.
INFO nova.virt.libvirt.driver [-] [instance: xxxxxxxxxxxx] Instance destroyed successfully.
注意:destroyed没关系,destroyed后虚拟机还是可以通过virsh list --all能查到的
【问题分析】
在OpenStack控制节点上进行虚拟机硬重启
nova reboot --hard 虚拟机UUID
底层计算节点上,会先shutdown 关闭虚拟机,然后销毁 destroyed 虚拟机,最后通过 虚拟机机的配置文件xml来实现创建虚拟机。目前发现在创建虚拟机的时候,底层计算节点上发现虚拟机的配置文件找不到了,找不到与虚拟机UUID相匹配的domain ,可能是程序底层调用逻辑中涉及到删除虚拟机相关文件从操作。
虚拟机被程序删除了,没办法恢复,但是数据盘还在,现在只能订购一台新的虚拟机,把数据盘给挂上去,让厂商重新根据数据盘的数据来部署业务系统,来尽快恢复业务了。
原有的/var/lib/nova/instance目录下其实存的是一些系统盘的东西,比如disk文件,这个东西日志里看是被删除了,而且实际看也确实被删掉了。
reboot操作能把这个/var/lib/nova/instance/下的东西删除,不知道底层代码怎么走的,只能交研发分析了。
这个地方有个问题:虚拟机reboot不成功后为何底层将虚拟机从libvirt层面给删了。这种属于reboot重启,起不来之后OpenStack正常底层处理逻辑!
【问题解决】
因为对应的虚拟机配置文件已经不存在了,而且对应的虚拟机系统盘也找不到了。在重启虚拟机之前,尚未对虚拟机做快照或者镜像备份,所以目前虚拟机已经找不回来了。
1、先将原先的虚拟机状态从error状态恢复成active状态
nova reset-state --active 虚拟机UUID
2、新建一台与原先虚拟机同规格的云主机,并将原先的数据盘以及公网IP(EIP即浮动IP)绑定到新创建的这台云主机上
3、尝试挂载数据盘,查看数据盘数据的完成程度
1)为了确保数据盘的数据安全,先对数据盘制作快照
2)开始挂载数据盘
创建测试目录
mkdir -v /test
尝试单独挂载其中的一块盘,失败,如下:
mount /dev/vdb1 /test
mount: unknown filesystem type 'LVM2_member'
lsblk -f
数据盘现状:总共有4块盘,并且4块盘底层做了 LVM ,需要先激活 lvm 逻辑卷,才能进行挂载
lvdisplay
-bash:lvdisplay:command not found
安装一下
yum install -y lvm2
lvdisplay
----Logical volume ---
LV Path /dev/vgdata/lvdata
LV Name lvdata
激活逻辑卷
vgchange -ay /dev/vgdata
1 logical volume(s) in volume group "vgdata" now active
mount /dev/vgdata/lvdata /test
lsblk -f
ll /test
最后挂载成功,lvm逻辑卷里面的数据,可以正常显示出来
【补充说明】
vgchange命令,用于修改卷组的属性,经常被用来设置卷组是处于活动状态或非活动状态。处于活动状态的卷组无法被删除,必须使用vgchange命令将卷组设置为非活动状态后才能删除。
参数:
-a:设置卷组的活动状态
例子:
使用vgchange命令将卷组状态改为活动的。在命令行中输入下面的命令:
vgchange -ay vg1000 #将卷组"vg1000"设置为活动状态
写在最后:
两条成长道理,一是向外追求,适应别人;二是向内建设,关注自己的价值成长
多元思维模型的本质,就是把更多的学科知识带入自己的思考中,形成自己对认识世界,系统而包容的态度;形成自己的思考模式,摆脱人云亦云
要更多关注与“怎么做”,而不要总是停留在“为什么”
人生,选择,经历,承担,成长
更多详情,请见公众号



