在开启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存 ...
随机推荐
- nodejs进阶(3)—路由处理
1. url.parse(url)解析 该方法将一个URL字符串转换成对象并返回. url.parse(urlStr, [parseQueryString], [slashesDenoteHost]) ...
- 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)
一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...
- 用javascript 写个函数返回一个页面里共使用了多少种HTML 标签
今天我无意间看到一个面试题: 如何用javascript 写个函数返回一个页面里共使用了多少种HTML 标签? 不知你看到 是否蒙B了,如果是我 面试,肯定脑子嗡嗡的响.... 网上搜了搜也没有找到答 ...
- Angular源码分析之$compile
@(Angular) $compile,在Angular中即"编译"服务,它涉及到Angular应用的"编译"和"链接"两个阶段,根据从DO ...
- 关于font-family
在设置页面字体的时候,你会发现在 font-family 属性中会设置好多个字体,想看懂它们都是什么字体吗?不好意思,我不是搞设计的,我也不知道.那么,现在写的东西,只是对于一个前端人员来说,要了解的 ...
- java时间
Calendar.getInstance().getTime() 获取当前时间(包括星期和时区 CST China Standard Time): Fri Jan 06 21:03:36 CST 2 ...
- [算法]——快速排序(Quick Sort)
顾名思义,快速排序(quick sort)速度十分快,时间复杂度为O(nlogn).虽然从此角度讲,也有很多排序算法如归并排序.堆排序甚至希尔排序等,都能达到如此快速,但是快速排序使用更加广泛,以至于 ...
- The Zen of Python
Beautiful is better than ugly. 优美总比丑陋好Explicit is better than implicit. 直率总比含蓄好Simple is better than ...
- 原生JavaScript实现hasClass、addClass、removeClass、toggleClass
兼容IE6+,因IE6.IE7.IE8不支持Array.prototype.indexOf()和String.prototype.trim(),分别用Polyfill实现支持. 详细: indexOf ...
- 最小生成树(Kruskal算法-边集数组)
以此图为例: package com.datastruct; import java.util.Scanner; public class TestKruskal { private static c ...