1 发生环境
- CentOS Linux release 7.6.1810 (AltArch)
- SAN 存储后端
- OpenStack Ocata
2 问题描述
- 操作虚机进行规格变更或热迁移
规格变更
热迁移$ openstack server resize $instance_uuid --flavor $flavor_uuid
$ openstack server migrate $instance_uuid --live $dest_hostname
- 虚机规格变更或热迁移失败,虚机状态变成
error
,nova-compute.log 出现如下错误日志
ERROR nova.compute.manager [req-7fdecdb3-904b-4c03-9e0e-0c56fdbec936 66f59526fad542af9da25bad7ca65d53 323c75f9d0cd429ca3d97a1139bf21e0 - - -] [instance: 741cf69d-80ef-4b42-8744-531be7d7c4a3] Live migration failed.: ProcessExecutionError: Unexpected error while running command. ERROR nova.compute.manager [instance: 741cf69d-80ef-4b42-8744-531be7d7c4a3] Traceback (most recent call last): ERROR nova.compute.manager [instance: 741cf69d-80ef-4b42-8744-531be7d7c4a3] File "/var/lib/kolla/venv/lib/python2.7/site-packages/nova/compute/manager.py", line 5535, in _do_live_migration ERROR nova.compute.manager [instance: 741cf69d-80ef-4b42-8744-531be7d7c4a3] File "/var/lib/kolla/venv/lib/python2.7/site-packages/nova/virt/libvirt/driver.py", line 6849, in _live_migration_monitor ERROR nova.compute.manager [instance: 741cf69d-80ef-4b42-8744-531be7d7c4a3] File "/var/lib/kolla/venv/lib/python2.7/site-packages/os_brick/executor.py", line 52, in _execute ERROR nova.compute.manager [instance: 741cf69d-80ef-4b42-8744-531be7d7c4a3] ProcessExecutionError: Unexpected error while running command. ERROR nova.compute.manager [instance: 741cf69d-80ef-4b42-8744-531be7d7c4a3] Command: multipath -f /dev/disk/by-id/dm-uuid-mpath-36084f0a100bd2ef983572f2400000161 ERROR nova.compute.manager [instance: 741cf69d-80ef-4b42-8744-531be7d7c4a3] Exit code: 1 ERROR nova.compute.manager [instance: 741cf69d-80ef-4b42-8744-531be7d7c4a3] Stdout: u'Dec 08 15:23:25 | /dev/disk/by-id/dm-uuid-mpath-36084f0a100bd2ef983572f2400000161: map in use\nDec 08 15:23:25 | failed to remove multipath map /dev/disk/by-id/dm-uuid-mpath-36084f0a100bd2ef983572f2400000161 \n' ERROR nova.compute.manager [instance: 741cf69d-80ef-4b42-8744-531be7d7c4a3] Stderr: u''
3 解决方案
注意事项:在如下场景请不要直接使用本解决方案进行问题处理
- Cinder 对接并使用了 LVM 存储后端
- OpenStack 计算节点上需要使用 LVM
- 在计算节点上执行
lvs
命令确认哪些 logical volumes 导致了问题
$ lvs
- 在计算节点上执行
vgchange -an
命令解锁所有VG(Volume Group)
$ vgchange -an
- 修改计算节点上的
/etc/lvm/lvm.conf
文件,加入如下配置,使计算节点不再激活 LVM 设备
global\_filter = ["r|.\*|"]
- 重新扫描设备,确保在宿主机上没有可见的 LVM 设备
$ pvscan --cache $ lvs
4 根本原因
LVM在每个物理卷头部都维护了一个metadata,每个metadata中都包含了整个VG的信息;
当Cinder将磁盘挂载给计算节点宿主机时,宿主机上的LVM将检查该磁盘上是否存在LVM信息;
如果磁盘检查到了LVM信息,该磁盘就会被宿主机上的LVM激活并纳入管理(LVM无法判断该磁盘是否属于虚机);
LVM激活磁盘后,该磁盘将被内核锁定并保持打开状态(可见磁盘Open Count数量增加);
当磁盘处于被锁定状态时,对其进行的操作都将失败(磁盘无法被卸载清理)。
5 排查步骤
- 在计算节点 nova-compute.log 中出现
multipath -f /dev/disk/by-id/dm-uuid-mpath-* ... map in use
报错; - 使用
virsh domblklist
命令获取报错虚机磁盘信息,使用dmsetup info
命令查看报错虚机磁盘打开数量,数据盘在虚机运行过程中获取到的 Open count 计数 > 1;
$ virsh domblklist $instance_uuid $ dmsetup info $disk_path
- 使用
vgs
、lvs
命令查看宿主机上是否可以看到虚机中的 LVM 信息。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容