对于管理员来说,很少会遇到不能使用vCenter Server管理主机的情况,但是即便真的出现这种问题,也能够使用其他方式进行解决。
最近我遇到了一种vSphere管理员在设计良好的网络环境当中通常不会遇到的问题:vCenter Server无法管理ESXi主机。
如果不想使用vCenter Server或者vSphere client管理ESXi主机,那么需要提前完成一些准备工作。在这种情况下,像Dell DRAC和HP ILO这些远程控制工具能够发挥重要作用。使用DCUI(Direct Console User Interface)——简单来说就是ESXi console——来管理网络可能会有些复杂,但确是一种最为直接的方式。下面介绍一些我所了解的主机管理方式,不需要使用vSphere client——甚至是SSH。
在一个设计良好的网络环境当中,虚拟机(VM)网络应该和主机管理网络相互分离,并且需要正确配置多块物理网卡连接到不同交换机。虚拟机和管理网络之间的流量不能相互影响。在将要分析的案例当中,虚拟机仍然能够正常运行。如果能够通过远程桌面或者SSH协议登陆到虚拟机,那么管理员应该尝试将其安全关闭。
检查网络基础架构之后,发现这个问题和硬件或者交换机没有关系,进一步排查显示软件驱动也不是引发问题的根本原因。
将虚拟机迁移到另外一台主机
为了尽量减少对于业务的影响,应该首先将受影响的虚拟机转移到另外一台正常工作的主机当中并且重新启动,这样能够保证在修复故障主机的同时依然能够管理业务虚拟机。但是需要注意的是这台主机服务器可能位于几千公里之外,因此我们必须使用带外管理系统。
DCUI或者任何远程管理功能都不适合作为日常管理方式,但是却能够用来处理紧急情况。管理员可以通过这种方式关闭不能执行命令的虚拟机。在vSphere 6.0之前的版本当中,同时按下Ctrl+F1,输入root账户密码 ,就可以使用其列出几种console功能了。但是正如之前所说的那样,应该使用其他方式来安全关闭虚拟机。这篇文章讨论的仅仅是***的应急方案,比如,虚拟机网络和管理网络之间出现严重故障。
在vSphere 6当中,如果管理员使用DCUI关闭当前主机,那么系统会提示管理员强制关闭所有未迁移虚拟机的电源。这是一项非常有用的功能,但是管理员在使用这种功能的时候需要特别小心,因为错误使用可能会导致大量虚拟机无法访问。
对于vSphere 5当中的虚拟机来说,可以使用下面的命令进行定位和关闭:
可以使用下面的命令列出所有虚拟机。(注意需要关闭的虚拟机的进程ID)
esxcli vm process list
使用如下命令关闭虚拟机:
esxcli vm process kill
在关闭所有虚拟机之后,可以使用下面的命令将虚拟机置于维护模式:
esxcli system maintenanceMode set --enable true
尽管这个过程不是必须的,但是确保所有虚拟机已经被正常关闭,能够随时切断主机电源是一种很好的操作流程。
结束主机维护模式
到这个阶段为止,虚拟机应该已经完全独立于之前的主机,可以在另外一台主机上接通电源之后手动重启。在这个案例当中,由于某种原因我必须在之前的主机上重新启动这些虚拟机。这的确不是一种***的解决方案,但是完全能够实现。和之前的操作类似,从结束服务器的维护模式开始,使用下面的命令:
esxcli system maintenanceMode set --enable false
之后,手动开启虚拟机电源。所有的虚拟机文件都将位于自己的文件夹、也就是主机的\mvfs\volumes当中。使用cd命令进入目标文件夹,还可以使用tab实现名称自动补全,这种特性可以起到很大帮助作用。每个文件夹都代表了一个data store,所以可以在对应的文件夹当中寻找虚拟机。
唯一的问题在于某些虚拟机会因为一个某些罕见错误而无法启动或者最终超时。对于这种情况来说,需要检查问题虚拟机当中的vmware.log(位于虚拟机文件夹当中)文件以查明具体错误信息,
这边文章不可能列举出管理员可能遇到的所有错误和复杂问题,但是为管理员提供了一种良好的排错思路。
这种问题通常不会经常发生。如果虚拟机被划分到单独的网络端口组和链路当中,并且能够响应远程客户端请求,那么就更像是管理问题,可以在非工作时间使用一种更为安全的方式进行修复,降低可能造成的影响。幸运的情况下,还有可能是网路连接问题,可以在不导致任何故障时间的情况下将问题解决。