注:instances 是 nova数据库中核心的数据库表,存放着创建实例到中止实例的大部份数据参数和记录。如果没有此表,那在登录Horizon后,查看不到任何创建的虚拟机实例。
故障描述如下:
故障一
在成都icloud部门在调用openstack api过程中,用中文云主机类型创建虚拟机,导致各个租户登录后查找不到创建的实例,提示“无法获取云主机”如图1
针对此问题,在不懈努力下,将问题定位到nova数据库中的instances数据库表。查询故障租户:如图2
Select * from instances where project=5872c3c824504fe896b408323772e251;
这里显示的乱码,就是icloud 云研发创建中文云主机类型的实例。我们只需要将其几条数据删除,那问题就解决了。
故障二
在排查故障一过程中,犯了一个低级错误,可能当时太过于兴奋。将其整个表(nova.instances)数据全部删除,之前的问题是解决了,但所有实例也不见了。当时还用了mysql没有回收机制的truncate命令,类似于硬盘格式化。(注:慎用truncate命令)
删除instances后的情况如下:
这下问题严重了,所以实例都没法操作,mysql的truncate命令在mysql没有开启日志备份是没办法数据恢复的,只要openstack服务器出现故障,很有可能所以实例都没法使用,现在面临的问题就是将数据恢复。如何恢复,请看下面:
第一、 由于instances字段比较多,防止数据库数据添加失败,可以备份其它环境的instances表(k\j\i三个版本目前是一样的)
查询的表结构如下:
Sql添加语句如下:
INSERT INTO `instances` VALUES('2015-07-16 03:13:36','2015-11-24 08:56:02',NULL,2031,NULL,'8b64d5a88c444b20962a27466a817104','5872c3c824504fe896b408323772e251','4c831c0a-73c9-4028-a109-502d8e991640','','',0,NULL,NULL,1,'active',2048,2,'test1','controller',NULL,'r-wq5qcqv6',NULL,'2015-07-1603:13:38',NULL,'test1','test1','nova',0,NULL,'controller',37,NULL,'1b839b93-0880-4422-ab60-46b88faafb32',NULL,'/dev/vda',NULL,NULL,'',NULL,NULL,NULL,0,1,0,0,20,0,NULL,'controller',0,NULL,0,NULL)
我们需要找到关键字段,经过测试,关键字段主要有(id、user_id、project_id、image_ref、vm_state、memory_mb、vcpus、hostname、host、display_name、display_description、launched_on、uuid 、node),其中关键字段id,需要在单独的映射表nova.instance_id_mappings中查询。
第二、 通过virsh list 查看计算节点在线虚拟机
第三、 通过virsh domuuid 查询在线虚拟机的id
第四、 找到存放虚拟机实例的路径(/var/lib/nova/instances),找到libvirt.xml配置文件
第五、 查看虚拟机实例配置文件(cat libvirt.xml)
第六、 进入mysql, 添加一条instances数据
这里拿租户Visualization做测试。
添加前:
查找Visualization实例:
vi ./ebd754ca-1ae6-467b-a36b-14d349ba2c34/libvirt.xml
Id:355 |
user_id: 587d928217f54908892e5b7c071c1fa5 |
project_id: 00b0816d1f934554ac20755e5235e059 |
image_ref: 19c191c8-66a0-4bb9-8f0f-71038e735d30 |
vm_state:stopped |
memory_mb: 8192 |
Vcpus: 4 |
launched_on: controller |
Host:controller |
Node:controller |
display_description: U2_Test-ebd754ca-1ae6-467b-a36b-14d349ba2c34 |
Hostname: U2_Test-ebd754ca-1ae6-467b-a36b-14d349ba2c34 |
Uuid: ebd754ca-1ae6-467b-a36b-14d349ba2c34 |
display_name: U2_Test-ebd754ca-1ae6-467b-a36b-14d349ba2c34 |
添加后:
INSERT INTO `instances` VALUES('2015-07-16 03:13:36','2015-11-24 08:56:02',NULL,355,NULL,'587d928217f54908892e5b7c071c1fa5','00b0816d1f934554ac20755e5235e059','19c191c8-66a0-4bb9-8f0f-71038e735d30','','',0,NULL,NULL,1,'stopped',8192,4,'U2_Test-ebd754ca-1ae6-467b-a36b-14d349ba2c34','controller',NULL,'r-wq5qcqv6',NULL,'2015-07-1603:13:38',NULL,'U2_Test-ebd754ca-1ae6-467b-a36b-14d349ba2c34','U2_Test-ebd754ca-1ae6-467b-a36b-14d349ba2c34','nova',0,NULL,'controller',37,NULL,'ebd754ca-1ae6-467b-a36b-14d349ba2c34',NULL,'/dev/vda',NULL,NULL,'',NULL,NULL,NULL,0,1,0,0,20,0,NULL,'controller',0,NULL,0,NULL)
大功告成!有不明白,可以一起探讨!