如果主机发生故障而必须重新启动虚拟机,您可使用虚拟机重新启动优先级”设置控制重新启动虚拟机的顺序。您也可使用主机隔离响应设置,配置主机与其他主机失去管理网络连接时 vSphere HA 的响应方式。发生故障后,vSphere HA 重新启动虚拟机时还将考虑其他因素。
以下设置适用于主机发生故障或主机隔离时集群内的所有虚拟机。此外,也可以为特定虚拟机配置异常。请参见自定义单个虚拟机。
主机隔离响应
主机隔离响应确定当 vSphere HA 集群内的某个主机失去其管理网络连接但仍继续运行时出现的情况。您可以使用隔离响应使 vSphere HA 关闭隔离主机上运行的虚拟机的电源,然后在非隔离主机上将其重新启动。主机隔离响应要求激活“主机监控状态”。如果“主机监控状态”为已停用,则主机隔离响应也将挂起。当主机无法与其他主机上运行的代理通信且无法 ping 其隔离地址时,该主机确定其已被隔离。然后,主机会执行其隔离响应。响应为“关闭虚拟机电源再重新启动虚拟机”或“关闭再重新启动虚拟机”。还可以为各个虚拟机自定义此属性。
要使用“关闭再重新启动虚拟机”设置,必须在虚拟机的客户机操作系统中安装 VMware Tools。将虚拟机关机的优点在于可以保留其状况。关机操作优于关闭虚拟机电源操作,关闭虚拟机不会将最近的更改刷新到磁盘中,也不会提交事务。在关机完成时,正在关机的虚拟机需要更长时间进行故障切换。未在 300 秒内或在高级选项 das.isolationshutdowntimeout 中指定的时间内关机的虚拟机将被关闭电源。
创建 vSphere HA 集群后,可以替代特定虚拟机的“重新启动优先级”和“隔离响应”的默认集群设置。此替代操作对于用于特殊任务的虚拟机很有帮助。例如,可能需要先打开提供基础架构服务(如 DNS 或 DHCP)的虚拟机电源,再打开集群内的其他虚拟机电源。
如果主机已从首选主机隔离或分区,或首选主机无法使用检测信号数据存储与该主机通信,则可能会发生虚拟机“裂脑”情况。在这种情况下,首选主机无法确定该主机处于活动状态,因此声明其已停止运行。然后,首选主机尝试重新启动已隔离或已分区主机上正在运行的虚拟机。如果虚拟机仍在已隔离/已分区主机上运行,且该主机在隔离或分区时失去对虚拟机数据存储的访问权限,则此尝试将成功。然后,便会发生裂脑情况,因为存在两个虚拟机实例。但是,只有一个实例能够读取或写入虚拟机的虚拟磁盘。虚拟机组件保护可用于防止发生此裂脑情况。使用激进设置激活 VMCP 时,它会监控已打开电源的虚拟机的数据存储可访问性,并关闭失去对其数据存储访问权限的虚拟机。
为了从此情况中恢复,ESXi 会针对已丢失磁盘锁的虚拟机生成一个问题(关于主机何时摆脱隔离状态且无法重新获取磁盘锁)。vSphere HA 将自动回答该问题,这就使已丢失磁盘锁的虚拟机实例关闭电源,只留下具有磁盘锁的实例。
虚拟机依赖关系
可以在虚拟机组之间创建依赖关系。要执行此操作,必须首先在 vSphere Client 中创建虚拟机组,方法是转到集群的配置选项卡,然后选择虚拟机/主机组。创建组之后,可以在组之间创建重新启动依赖关系规则,方法是浏览到虚拟机/主机规则,然后在“类型”下拉菜单中,选择虚拟机到虚拟机。这些规则可以指定在其他指定虚拟机组就绪之前,不会重新启动某些虚拟机。
重新启动虚拟机要考虑的因素
发生故障后,集群的首选主机会确定一个可打开受影响虚拟机电源的主机,从而尝试重新启动这些虚拟机。选择此类主机时,首选主机会考虑许多因素。
- 文件可访问性
- 在可启动虚拟机之前,必须能够从可通过网络与首选主机通信的某个活动集群主机中访问该虚拟机的文件
- 虚拟机与主机的兼容性
- 如果存在可访问的主机,则虚拟机必须至少与其中一个主机兼容。为虚拟机设置的兼容性包括任何所需虚拟机-主机关联性规则的影响。例如,如果某个规则仅允许虚拟机在两个主机上运行,则会考虑将其放置在这两个主机上。
- 资源预留
- 在可运行虚拟机的主机中,必须至少有一个主机具有足够的未预留容量以满足虚拟机的内存开销及任何资源预留。可采用四种预留类型:CPU、内存、虚拟网卡和虚拟闪存。此外,必须提供足够的网络端口,才能打开虚拟机电源。
- 主机限制
- 除了资源预留之外,一个虚拟机只能放置在一个主机上(如果这样做不会违反允许的虚拟机最大数量或正在使用的 vCPU 数量)。
- 功能限制
- 如果已设置需要 vSphere HA 强制执行虚拟机-虚拟机反关联性规则的高级选项,则 vSphere HA 不会违反此规则。此外,vSphere HA 不会违反为容错虚拟机配置的任何每主机限制。
如果没有任何主机满足上述注意事项,则首选主机会发布一个事件指出没有足够的资源让 vSphere HA 来启动虚拟机,并会在集群状况发生更改时进行重试。例如,如果虚拟机不可访问,则首选主机会在文件可访问性发生更改后进行重试。