有一个物理节点上一些虚拟机一直无法删除,调用nova接口状态如下
+--------+------------+-------------+ | Status | Task State | Power State | +--------+------------+-------------+ | BUILD | deleting | NOSTATE | | BUILD | deleting | NOSTATE | | BUILD | deleting | NOSTATE | | BUILD | deleting | NOSTATE | | BUILD | deleting | NOSTATE | | BUILD | deleting | NOSTATE | | BUILD | deleting | NOSTATE | | BUILD | deleting | NOSTATE | | BUILD | deleting | NOSTATE | | BUILD | deleting | NOSTATE |
第一感觉,貌似是在虚拟机创建的时候下达了delete命令,会不会是因为这个而卡住,因此先通过将虚拟机reset成ERROR状态,然后再次试着delete虚拟机,可惜结果依旧是deleting,表中无法清楚,因此就需要看下日志了
通过—debug来delete虚拟机,得到requestID先
RESP: [204] {'date': 'Mon, 10 Oct 2016 02:24:54 GMT', 'connection': 'keep-alive', 'content-type': 'application/json', 'content-length': '0', 'x-compute-request-id': 'req-a942592b-8b6d-433a-97d6-3fcd5e9352cb'} RESP BODY:
查找nova日志的话,由于服务较多,有api,sch,compute等,要么一个一个节点上去grep这个requestID,然后来定位查询,这里直接通过ELK(ElasticSearch,Logstash,Kibana)来进行定位日志
直接关键字里输入(去掉*)
message: "req-a942592b-8b6d-433a-97d6-3fcd5e9352cb"
当然时间区间Last xxxx,然后下来选中nova-*,表示是nova日志,Selected Fields选中host和message,就会列出对应的message相关日志和所在的host节点,大概就这样
这样就直接上对应的节点,这里只能找到有API节点的日志,而缺少了scheduler和compute日志,这样基本就排除了nova-compute卡住这种问题了,但是从下面api日志里也没看出任何问题,从compute日志最后也找不到GreenPool free size:的相关信息
因此就只能怀疑消息发出去了,但是堵塞住了,因此看下这个节点消息队列的情况,果然是堵塞了
因此,将消息清掉,然后重启该节点的nova-compute进程,即可恢复正常