通过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虚拟主机启动问题的更多相关文章

  1. 向CDH5集群中添加新的主机节点

    向CDH5集群中添加新的主机节点 步骤一:首先得在新的主机环境中安装JDK,关闭防火墙.修改selinux.NTP时钟与主机同步.修改hosts.与主机配置ssh免密码登录.保证安装好了perl和py ...

  2. Kubernetes集群中修复状态为NotReady的节点

    度个假回来发现自己集群中的节点都挂了,全部是NotReady状态 但是除了.10节点外,其他主机并没有挂,可以远程连接上, 那就考虑是kubernetes系统的问题 解决的方法是重启kube-prox ...

  3. hbase集群中其中某个regionserver 没有启动

    第一步: date命令查看各个机器的时间 发现linux02机器时间差了2个多小时 第二步:ntpdate pool.ntp.org 修改错误时间的机器 第三步: 重启 hbase

  4. CentOS7 使用chrony搭建集群中的时间同步服务

    一.集群环境: 系统:CentOS7-minimal 集群中的两台主机ip:10.132.226.103/24  10.132.226.104/24 二.CentOS7中时间相关命令timedatec ...

  5. 在k8s集群中安装rook-ceph 1.8版本步骤

    官方文档地址:https://rook.io/docs/rook/v1.8/quickstart.html Kubernetes 最小版本号 Kubernetes 最小版本号:Kubernetes v ...

  6. k8s集群中安装rook-ceph

    容器的持久化存储 容器的持久化存储是保存容器存储状态的重要手段,存储插件会在容器里挂载一个基于网络或者其他机制的远程数据卷,使得在容器里创建的文件,实际上是保存在远程存储服务器上,或者以分布式的方式保 ...

  7. redis集群中的主从复制架构(3主3从)

    架构图如下 首先开启6个实例,这里为了演示方便,只是在一个linux上开启了6个redis实例 6380 (主)   6480 (从) 6381(主)   6481(从) 6382(主)   6482 ...

  8. 深入理解 ZK集群中通过Processor保证数据一致性

    入口 书接上篇博客中的ZK集群启动后完成数据的统一性恢复后,来到启动ZkServer的逻辑,接下来的重点工作就是启动不同角色的对应的不同的处理器Processor 如上图查看ZooKeeperServ ...

  9. 集群中Session共享解决方案分析

    一.为什么要Session共享 Session存储在服务器的内存中,比如Java中,Session存放在JVM的中,Session也可以持久化到file,MySQL,redis等,SessionID存 ...

随机推荐

  1. nodejs进阶(3)—路由处理

    1. url.parse(url)解析 该方法将一个URL字符串转换成对象并返回. url.parse(urlStr, [parseQueryString], [slashesDenoteHost]) ...

  2. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  3. 用javascript 写个函数返回一个页面里共使用了多少种HTML 标签

    今天我无意间看到一个面试题: 如何用javascript 写个函数返回一个页面里共使用了多少种HTML 标签? 不知你看到 是否蒙B了,如果是我 面试,肯定脑子嗡嗡的响.... 网上搜了搜也没有找到答 ...

  4. Angular源码分析之$compile

    @(Angular) $compile,在Angular中即"编译"服务,它涉及到Angular应用的"编译"和"链接"两个阶段,根据从DO ...

  5. 关于font-family

    在设置页面字体的时候,你会发现在 font-family 属性中会设置好多个字体,想看懂它们都是什么字体吗?不好意思,我不是搞设计的,我也不知道.那么,现在写的东西,只是对于一个前端人员来说,要了解的 ...

  6. java时间

    Calendar.getInstance().getTime() 获取当前时间(包括星期和时区 CST China Standard Time):  Fri Jan 06 21:03:36 CST 2 ...

  7. [算法]——快速排序(Quick Sort)

    顾名思义,快速排序(quick sort)速度十分快,时间复杂度为O(nlogn).虽然从此角度讲,也有很多排序算法如归并排序.堆排序甚至希尔排序等,都能达到如此快速,但是快速排序使用更加广泛,以至于 ...

  8. The Zen of Python

    Beautiful is better than ugly. 优美总比丑陋好Explicit is better than implicit. 直率总比含蓄好Simple is better than ...

  9. 原生JavaScript实现hasClass、addClass、removeClass、toggleClass

    兼容IE6+,因IE6.IE7.IE8不支持Array.prototype.indexOf()和String.prototype.trim(),分别用Polyfill实现支持. 详细: indexOf ...

  10. 最小生成树(Kruskal算法-边集数组)

    以此图为例: package com.datastruct; import java.util.Scanner; public class TestKruskal { private static c ...