在开启DRS的集群中修复VMware虚拟主机启动问题
通过iSCSI方式连接到ESXi主机上的外挂存储意外失联了一段时间,导致部分虚拟主机在集群中呈现出孤立的状态,单独登陆到每台ESXi上可以看到这些虚拟主机都变成了unknow状态。因为有过上一次(VMware-存储断网之后无法添加vmx到清单)的经验,所有操作等待存储恢复与ESXi连接之后再进行操作,这样可以尽量避免虚拟主机意外“消失”。
前奏
最终,存储网络恢复正常,期间经历了大约1个小时,有绝大多数的Windows虚拟主机在存储网络恢复正常之后继续正常工作;有少部分的Linux虚拟主机内部EXT文件系统出现了只读,这个需要重启后对文件系统修复才能解决;而有一小部分大概占总虚拟主机30%的量的关机虚拟主机,此时需要对他们进行启动操作,而真正的问题恰巧也来了。
环境介绍
所在集群中开启了vSphere DRS功能,但未开启HA功能,这样会在启动虚拟主机的时候,根据DRS自动策略会将虚拟主机分配到算法认为最轻松的一台ESXi主机上,最终完成启动。
可是现在启动过程中出现了一些问题,有些虚拟主机可以很顺利的启动起来,而有些虚拟主机在等待5~10分钟之后开始报错,报错信息五花八门,
Ø 有在95%启动过程中报错的,
Ø 有在久等之后抛出“打开配置文件------.vmx”文件失败的,还有的干脆启动之后迅速报错“打开虚拟机电源:未能启动虚拟机 (错误 -18)”的,
Ø 有报错通信相关异常的,
Ø 以及注册虚拟机时候抛出的错误“The system returned an error. Communication with the virtual machine might have been interrupted.正在目标主机上注册虚拟机”。
通过寻找日志线索,找到两处我认为和启动有关准确都较高的日志记录:

Figure 1日志信息一,有详细的vmx文件无法打开的记录,此处对应的启动环境是在vCenter中,通过高级管理员账号启动的报错

Figure 2日志信息二,在登陆到ESXi上看到的错误信息,其中绿色圈的是vCenter向ESXi发送指令用来实际操作的用户,红色圈的是虚拟主机无响应后VMware内部为用户记录错误信息的用户。
问题解决
通过上面对日志的分析与查看,我按照《VMware-存储断网之后无法添加vmx到清单》文章中的指导建议,使用vmkfstools 查看了对应无法启动的虚拟主机的vmx文件占有情况。

Figure 3利用vmkfstools(绿色横线为命令)了解到该vmx文件并无被占有(红色横线全零表示该文件未被任何ESXi主机锁定)
既然和日志提到的文件对不到一起,而虚拟主机目录下也就那些文件,索性一个个的去遍历一遍,看看有没有其他的思路和线索。

Figure 4当我遍历到vswp文件的时候我可以看到锁定这个文件的ESXi主机MAC地址了(VMware-存储断网之后无法添加vmx到清单文中有介绍如何通过MAC反查到对应ESXi主机)
由于vSphere DRS的会对虚拟主机启动自动分配ESXi主机,所以此时我把DRS临时关闭,将这个不能够开启的虚拟主机迁移到反查到的原ESXi物理主机上,再次启动,非常顺利的进行了下去。随后的那些无法进行启动的虚拟主机也如法炮制的都启动好了。
经验总结
1、等待存储恢复之后,启动vCenter,切记第一时间关闭DRS,如果有HA最好也一起关闭,避免批量启动的时候自动资源分配导致前一次这个vswp文件还未处理掉与原始ESXi主机的关联关系,这样如果自动给了一个不是原始ESXi主机的环境,就会导致vmx文件和vswp文件的所有权脑裂。
2、通过判断Figure 2中的那条user用户错误信息,其实我们已经可以找到这个虚拟主机故障前与那个ESXi主机有做关联。
3、由于vCenter自身也是安装在外挂存储中的,因此在外挂存储故障了之后vCenter已经无法记录日志,因此来自于ESXi的信息相当珍贵。
4、实际上通过分析启动不能的虚拟主机log文件(在外挂存储的虚拟主机目录下)也是可以分析到那些文件被什么样的ESXi主机锁住了。
5、VMware的知识库里面告诉我们,在一台虚拟主机启动之后,这些类型的文件(如下所示)都会被所在ESXi主机通过vmfs这个集群式文件系统给锁定。
a) VMNAME.vswp
b) DISKNAME-flat.vmdk
c) DISKNAME-ITERATION-delta.vmdk
d) VMNAME.vmx
e) VMNAME.vmxf
f) vmware.log
6、文中日志Figure 1所提到的vmx文件无法读取,我的理解是vmx可以看作是虚拟主机的机箱,而这个机箱里面有硬盘文件VMDK,虚拟机交换文件vswp,日志文件log等等,因为涉及到的被锁文件是在众多,所以系统就会用vmx文件作为统一输出告知管理员一个大致的错误方位。
7、等待所有虚拟主机启动完毕之后,再将vSphere DRS和HA开启。
8、充分利用VMware-存储断网之后无法添加vmx到清单提及的RVTools,可以让维护和运行更加顺利。
-=EOB=-
在开启DRS的集群中修复VMware虚拟主机启动问题的更多相关文章
- 向CDH5集群中添加新的主机节点
向CDH5集群中添加新的主机节点 步骤一:首先得在新的主机环境中安装JDK,关闭防火墙.修改selinux.NTP时钟与主机同步.修改hosts.与主机配置ssh免密码登录.保证安装好了perl和py ...
- Kubernetes集群中修复状态为NotReady的节点
度个假回来发现自己集群中的节点都挂了,全部是NotReady状态 但是除了.10节点外,其他主机并没有挂,可以远程连接上, 那就考虑是kubernetes系统的问题 解决的方法是重启kube-prox ...
- hbase集群中其中某个regionserver 没有启动
第一步: date命令查看各个机器的时间 发现linux02机器时间差了2个多小时 第二步:ntpdate pool.ntp.org 修改错误时间的机器 第三步: 重启 hbase
- CentOS7 使用chrony搭建集群中的时间同步服务
一.集群环境: 系统:CentOS7-minimal 集群中的两台主机ip:10.132.226.103/24 10.132.226.104/24 二.CentOS7中时间相关命令timedatec ...
- 在k8s集群中安装rook-ceph 1.8版本步骤
官方文档地址:https://rook.io/docs/rook/v1.8/quickstart.html Kubernetes 最小版本号 Kubernetes 最小版本号:Kubernetes v ...
- k8s集群中安装rook-ceph
容器的持久化存储 容器的持久化存储是保存容器存储状态的重要手段,存储插件会在容器里挂载一个基于网络或者其他机制的远程数据卷,使得在容器里创建的文件,实际上是保存在远程存储服务器上,或者以分布式的方式保 ...
- redis集群中的主从复制架构(3主3从)
架构图如下 首先开启6个实例,这里为了演示方便,只是在一个linux上开启了6个redis实例 6380 (主) 6480 (从) 6381(主) 6481(从) 6382(主) 6482 ...
- 深入理解 ZK集群中通过Processor保证数据一致性
入口 书接上篇博客中的ZK集群启动后完成数据的统一性恢复后,来到启动ZkServer的逻辑,接下来的重点工作就是启动不同角色的对应的不同的处理器Processor 如上图查看ZooKeeperServ ...
- 集群中Session共享解决方案分析
一.为什么要Session共享 Session存储在服务器的内存中,比如Java中,Session存放在JVM的中,Session也可以持久化到file,MySQL,redis等,SessionID存 ...
随机推荐
- .NET Core采用的全新配置系统[9]: 为什么针对XML的支持不够好?如何改进?
物理文件是我们最常用到的原始配置的载体,最佳的配置文件格式主要由三种,它们分别是JSON.XML和INI,对应的配置源类型分别是JsonConfigurationSource.XmlConfigura ...
- ASP.NET Core project.json imports 是什么意思?
示例代码: "frameworks": { "netcoreapp1.0.0": { "imports" : "portable- ...
- 深入浅出JavaScript之闭包(Closure)
闭包(closure)是掌握Javascript从人门到深入一个非常重要的门槛,它是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现.下面写下我的学习笔记~ 闭包-无处不 ...
- Unity3D 5.3 新版AssetBundle使用方案及策略
1.概览 Unity3D 5.0版本之后的AssetBundle机制和之前的4.x版本已经发生了很大的变化,一些曾经常用的流程已经不再使用,甚至一些老的API已经被新的API所取代. 因此,本文的主要 ...
- js数组学习整理
原文地址:js数组学习整理 常用的js数组操作方法及原理 1.声明数组的方式 var colors = new Array();//空的数组 var colors = new Array(3); // ...
- JDBC Tutorials: Commit or Rollback transaction in finally block
http://skeletoncoder.blogspot.com/2006/10/jdbc-tutorials-commit-or-rollback.html JDBC Tutorials: Com ...
- 如何使用本地账户"完整"安装 SharePoint Server 2010+解决“New-SPConfigurationDatabase : 无法连接到 SharePoint_Config 的 SQL Server 的数据 库 master。此数据库可能不存在,或当前用户没有连接权限。”
注:目前看到的解决本地账户完整安装SharePoint Server 2010的解决方案如下,但是,有但是的哦: 当我们选择了"完整"模式安装SharePointServer201 ...
- git
CMD命令:git initgit add . [添加文件至暂存区]git commit -m '描述性语句 随意写即可'git branch gh-pages [创建仓库分支]git checkou ...
- Linux:将rhel yum 切换到centos yum
Red Hat Enterprise Linux Server(RHEL) yum安装软件时This system is not registered with RHN. RHN support wi ...
- CentOS下Zabbix安装部署及汉化
搭建环境:Centos6.5_x86_64,Zabbix2.4.5,epel 源 服务端: 1.安装开发软件包yum -y groupinstall "Development Tools&q ...