这是 OpenStack 实施经验分享系列的第 12 篇。
问题描述
客户报告了一个问题:对 instance 执行 migrate 操作,几个小时了一直无法完成,不太正常。
![http://7xo6kd.com1.z0.glb.clouddn.com/upload-ueditor-image-20170312-1489323233159091534.png](http://7xo6kd.com1.z0.glb.clouddn.com/upload-ueditor-image-20170312-1489323285597028135.jpg)
问题分析
遇到这种情况,第一个要检查的就是 instance 所在计算节点的 nova-compute.log 日志,但不幸的是没有发现相关的错误。
如果 nova-compute 没有错误,那更底层的 hypervisor 有相关报错吗? 打开 /var/log/libvirt/libvirtd.log,这里我们发现了一些线索:
![http://7xo6kd.com1.z0.glb.clouddn.com/upload-ueditor-image-20170312-1489323233782049001.png](http://7xo6kd.com1.z0.glb.clouddn.com/upload-ueditor-image-20170312-1489323287848056404.jpg)
上面的 log 告诉我们:没有找到 instance swap 对应 image backing file /var/lib/nova/instances/_base/swap_8192。
当前这个 instance 确实使用了一个 8192M 的 swap disk,但奇怪的是:正在使用的 image backing file 为什么会不见了呢?
在排除了人为误删后,怀疑是一个 bug。搜索一下:
![http://7xo6kd.com1.z0.glb.clouddn.com/upload-ueditor-image-20170312-1489323233874013132.png](http://7xo6kd.com1.z0.glb.clouddn.com/upload-ueditor-image-20170312-1489323292267099831.jpg)
运气不错,第三个结果是 OpenStack 的 bug,好像就是我们要找的。 浏览 bug 信息发现描述的现象跟我们的情况一样,而且在客户使用的 kilo 版本上已经有 fix。
![http://7xo6kd.com1.z0.glb.clouddn.com/upload-ueditor-image-20170312-1489323233961071784.png](http://7xo6kd.com1.z0.glb.clouddn.com/upload-ueditor-image-20170312-1489323292984010389.jpg)
点击 commit 链接,可以看到 fix 都修改了哪些文件。
![http://7xo6kd.com1.z0.glb.clouddn.com/upload-ueditor-image-20170312-1489323234261023215.png](http://7xo6kd.com1.z0.glb.clouddn.com/upload-ueditor-image-20170312-1489323293327045364.jpg)
对照客户系统中的代码,确实没有包含该 fix,也印证了确实是这个 bug。
解决问题
因为 fix 的文件位于 nova 目录,可见这是 nova 模块的 bug。 接下来的工作就很直接了:
-
下载 nova 的代码。
-
安装 kilo 的最新版本。
-
重启所有 nova-* 服务。
关于如何更新 OpenStack 组件,请参考上一节的方法。
下节教大家如何快速安全地给 instance 做快照。