rbd锁引起kvm虚拟机无法启动的故障
前言
环境因为一些问题(网络,或者磁盘,或者其它各种异常),引起了集群的状态的一些变化,变化之后,集群的某些虚拟机正常某些虚拟机出现异常,异常现象就是无法启动
特别是win server2008 ,会一直卡在滚动条这里
这个问题很久前碰到过一个哥们出现过,他问我是否遇到过,这个之前遇到过一次无法启动的,通过导出导入的方式解决了,当时一直也没找到原因
这个哥们告诉我,通过关闭rbd的属性后,就可以正常启动了,当时就记了下,也没分析更深层次的原因
最近有一个环境因为时间过快,往回调整了十几分钟,集群出现mon选举,osd出现闪断以后,部分虚拟机出现无法启动的情况
问题分析
导入导出或者克隆基本可以判断数据是没有问题的,那么应该就是其它问题
通过关闭属性可以解决,那么大概能够定位到这几个属性相关的
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
而锁文件是最大的怀疑,之前处理ctdb的时候,就有过锁没有加上超时时间,然后ctdb挂掉以后,锁不会自动释放的问题,怀疑这个地方类似
我们的rbd的镜像如下
[root@lab101 vm]# rbd info rbd/windows-server-8-base-clone
rbd image 'windows-server-8-base-clone':
size 50GiB in 12800 objects
order 22 (4MiB objects)
block_name_prefix: rbd_data.102376b8b4567
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
flags:
create_timestamp: Fri Dec 18 11:56:27 2020
parent: rbd/windows-server-8-base@for-clone
overlap: 50GiB
这个地方会有两个对象被上锁
[root@lab101 ceph]# rbd lock ls rbd/windows-server-8-base-clone
There is 1 exclusive lock on this image.
Locker ID Address
client.96545 auto 94013702760192 192.168.19.101:0/915896787
object_map的rbd_lock
[root@lab101 ceph]# rados -p rbd lock info rbd_object_map.102376b8b4567 rbd_lock
{"name":"rbd_lock","type":"exclusive","tag":"","lockers":[{"name":"client.96943","cookie":"","description":"","expiration":"0.000000","addr":"192.168.19.101:0/2231653745"}]}
header的rbd_lock,这个跟上面通过rbd lock查到的锁命令是同一个
[root@lab101 ceph]# rados -p rbd lock info rbd_header.102376b8b4567 rbd_lock
{"name":"rbd_lock","type":"exclusive","tag":"internal","lockers":[{"name":"client.96943","cookie":"auto 94009656832384","description":"","expiration":"0.000000","addr":"192.168.19.101:0/2231653745"}]}
复现问题
启动一个rbd的kvm,并且装上win server2008
/usr/libexec/qemu-kvm -drive format=raw,file=rbd:rbd/windows-server-8-base-clone -cdrom /home/vm/win2008.iso -m 8192 -vnc :0
这个启动后直接用vnc连接访问即可,然后使用一个循环测试写入工具在虚拟机里面进行循环读写,模拟正常的写入,我使用的是SANergy这个工具,使用循环写模式,可以做成iso,然后上面的-cdrom参数把文件穿透进去
准备一个至少两个物理节点的集群
节点一为mon,节点二的时间同步指向节点一,然后调整一的物理时间往后调整20分钟(也可以往前),这个集群会出现osd闪断的情况
正常情况下,这个时候windows会卡死的,如果没卡死,多操作几遍往后调整时间,目的就是把虚拟机卡死
我的环境通过资源管理器看到没有读写io了,强制停止kvm进程,无法停止就kill -9
我们恢复集群的状态,然后再次检查锁状态
[root@lab101 ceph]# cat /home/vm/checklock.sh
rados -p rbd lock info rbd_object_map.102376b8b4567 rbd_lock
rados -p rbd lock info rbd_header.102376b8b4567 rbd_lock
[root@lab101 ceph]# sh /home/vm/checklock.sh
{"name":"rbd_lock","type":"exclusive","tag":"","lockers":[{"name":"client.96943","cookie":"","description":"","expiration":"0.000000","addr":"192.168.19.101:0/2231653745"}]}{"name":"rbd_lock","type":"exclusive","tag":"internal","lockers":[{"name":"client.96943","cookie":"auto 94009656832384","description":"","expiration":"0.000000","addr":"192.168.19.101:0/2231653745"}]}
可以看到居然还在
我们尝试启动虚拟机出现无法启动的情况
我们尝试删除锁
处理objectmap的锁
[root@lab101 ceph]# rados -p rbd lock break rbd_object_map.102376b8b4567 rbd_lock client.96943
处理header的锁
[root@lab101 ceph]# rados -p rbd lock break rbd_header.102376b8b4567 rbd_lock client.96943
ERROR: failed breaking lock: (2) No such file or directory
error 2: (2) No such file or directory
提示没有,比较奇怪,那尝试拿锁
[root@lab101 ceph]# rados -p rbd lock get rbd_header.102376b8b4567 rbd_lock client.96943
ERROR: failed locking: (16) Device or resource busy
error 16: (16) Device or resource busy
可以看到Device or resource busy 这个一般就是资源占用,无法释放的情况
我们用rbd的命令试下
[root@lab101 ceph]# rbd lock ls rbd/windows-server-8-base-clone
There is 1 exclusive lock on this image.
Locker ID Address
client.96943 auto 94009656832384 192.168.19.101:0/2231653745
[root@lab101 ceph]# rbd lock rm rbd/windows-server-8-base-clone "auto 94009656832384" client.96943
[root@lab101 ceph]# rbd lock ls rbd/windows-server-8-base-clone
可以看到这个是可以删除的
再次检查
[root@lab101 ceph]# sh /home/vm/checklock.sh
{"name":"rbd_lock","type":"exclusive","tag":"","lockers":[]}{"name":"rbd_lock","type":"exclusive","tag":"internal","lockers":[]}[root@lab101 ceph]#
可以看到没有锁了
我们再次尝试启动
产生了新的锁文件了
{"name":"rbd_lock","type":"exclusive","tag":"","lockers":[]}{"name":"rbd_lock","type":"exclusive","tag":"internal","lockers":[]}[root@lab101 ceph]#
[root@lab101 ceph]# sh /home/vm/checklock.sh
{"name":"rbd_lock","type":"exclusive","tag":"","lockers":[{"name":"client.97312","cookie":"","description":"","expiration":"0.000000","addr":"192.168.19.101:0/1322200836"}]}{"name":"rbd_lock","type":"exclusive","tag":"internal","lockers":[{"name":"client.97312","cookie":"auto 94532169500416","description":"","expiration":"0.000000","addr":"192.168.19.101:0/1322200836"}]}
从vnc里面可以看到桌面了
上面的是处理的方法之一,另外的一个方法是
rbd feature disable rbd/windows-server-8-base-clone exclusive-lock, object-map, fast-diff
rbd feature enable rbd/windows-server-8-base-clone exclusive-lock, object-map, fast-diff
建议是通过方法一进行处理,理论上方法二也没什么问题,其它几个属性如果正好需要用到的话,那么关闭后,开启下就行
总结
出问题总会是有原因的,如果我们提前抓到了问题,那么下次再遇到的时候就会从容的多,所以不要放弃解决问题,能够解决的问题都会成为你的经验
rbd锁引起kvm虚拟机无法启动的故障的更多相关文章
- KVM虚拟机无法启动
一.启动虚拟机报错: [root@KVM ~]# virsh start node-mssql-test01 error: Failed to start domain node-mssql-test ...
- kvm虚拟机virt-manager启动报错
安装kvm,用virt-manager启动时报错如下: Traceback (most recent call last): File "/usr/share/virt-manager/v ...
- kvm虚拟机管理 系统自动化安装
原创博文安装配置KVM http://www.cnblogs.com/elvi/p/7718574.htmlweb管理kvm http://www.cnblogs.com/elvi/p/7718582 ...
- centos创建kvm虚拟机
1.检查kvm模块是否已经加载 lsmod |grep kvm 上图已经加载 没有加载 2.加载kvm 模块至内核 modprobe kvm modprobe kvm-intel modprobe: ...
- KVM虚拟机高级设置——08 管理远程虚拟机
在搭建KVM环境——07 带GUI的Linux上安装KVM图形界面管理工具介绍了KVM图形化管理工具,这款工具除了可以管理本地KVM虚拟外,还可以管理远程KVM虚拟机. 输入113机器密码 输入yes ...
- 烂泥:KVM虚拟机随KVM服务器的启动而启动
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 要使KVM虚拟机随KVM服务器的启动而启动,我们所需要做的工作很少.只需要把KVM虚拟机的XML配置文件做一个软连接到/etc/libvirt/qemu ...
- [qemu][kvm] 在kvm嵌套kvm的虚拟机里启动kvm加速
常规情况下,如果在kvm的虚拟机里,又想使用kvm的虚拟机,会报如下的错误信息: [root@host0 nlb]# Could not access KVM kernel module: No su ...
- 解决kvm虚拟机启动之后,网卡eth0变为eth1问题
2018-12-19 故障前提 kvm虚拟机迁移到其他服务器上之后,重新启动网卡会出现问题 例如原网卡名称为eth0,迁移重启之后会自动变为eth1 为什么eth0会变成eth1? 很多Linux d ...
- 067_查看 KVM 虚拟机中的网卡信息(不需要进入启动或进入虚拟机)
#!/bin/bash #该脚本使用 guestmount 工具,可以将虚拟机的磁盘系统挂载到真实机文件系统中#Centos7.2 中安装 libguestfs-tools-c 可以获得 guestm ...
随机推荐
- 8、Spring Boot任务
1.异步任务 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的:但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在Spring ...
- guitar pro系列教程(四): 详解Guitar Pro主音量自动化设置
让我们继续进行guitar pro 7系列教程 在上一章节中我们讲到插入速度自动化设置,本章节我们将采用图文结合的方式详细的讲解guitar pro 7主音量的相关自动化设置分别是:插入主音量自动化, ...
- 带你了解Boom 3D的Mac版音效模式
音乐是很好的情绪抒发途径,因为音乐蕴含了很多信息,包含了很多情感,所以我们聆听不同种类的音乐的时候会产生不同的心理感受.这就是音乐的魅力,可以让人产生共鸣引发无数的思绪.为了能够更好的体会感受音乐可以 ...
- Lumen中启用session
原文链接:http://www.jianshu.com/p/dc33f8ab0618 Lumen5.2 的Release Notes中官方明确的指出Lumen专注于构建无状态API,JSON API ...
- iOS问题:pch not found
问题描述: clang: error: no such file or directory: '/Users/apple/Desktop/迅点App_Mark/FaceHelp/FaceHelp-Pr ...
- JUC详解--【Foam番茄】
1.什么是JUC java.util 工具包 业务:普通的线程代码 Thread Runnable 没有返回值,效率相比于 Callable 相对较低! 2.线程和进程 进程:一个程序,QQ.exe ...
- 快要C语言考试了,大学生们收好这些经典程序案例,包你考试过关!
距离考试越来越近 编程大佬早已饥渴难耐 电脑小白还在瑟瑟发抖 但是不要怕! 来看看这些经典程序案例 包你考试过关! [程序1] 有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多 ...
- Linux服务器学习----haproxy+keepalived
实验需要4台虚拟机,两台做服务器,两台做代理服务器 www1:ip:10.30.40.11 hk1: 代理:10.30.40.13(hk1.netdj.net) www2:ip 10.3 ...
- 从七牛云迁移图片到github
迁移理由 问题是网站的大部分图床都是用的七牛云,官网有改动,所以原测试域名都失效,所以决定进行迁移,将七牛云中的图片迁移到github仓库中. 迁移步骤 Step1:从废弃测试域名空间至可用测试域名空 ...
- java并发编程实战《二》java内存模型
Java解决可见性和有序性问题:Java内存模型 什么是 Java 内存模型? Java 内存模型是个很复杂的规范,可以从不同的视角来解读,站在我们这些程序员的视角,本质上可以理解为, Java 内存 ...