当Cluster环境中开启HA之后,有时会发现宕机的host中VM并不能在Cluster中其他的host上重启,会提示HA资源不足切换失败,出现该现象的原因是Cluster中HA的准入控制策略配置不正确,宕机host上的VM没法在Cluster中其他host上获取到足够的资源。
当我们打开Cluster中HA选项卡时,可以在Admission Control中查看到Cluster中当前的准入控制策略,它分为允许故障主机数、资源预留百分比、指定故障转移主机、不预留故资源4种不同的策略,需要说明的一点是,除了不预留资源外其他3种策略都会预留一本分资源用来承载当故障发生时宕机host上的VM,这部分预留的资源是不能被使用的,以下就这几种策略进行详细的介绍。
1.指定故障主机数量
这种策略又分为2种:自动计算和手动指定Slot大小。什么是Slot?每个host上允许承载多少个VM取决于这个host上有多少个Slot,每个Slot大小只参考这台host上开启的VM的CPU和内存,关闭或挂起的虚拟机不作参考。
Slot的大小怎么计算?这又分为2种情况:VM有预留值和没有预留值。首先来说一下VM有预留值,我们都知道在Cluster中为了保证个别重要VM的性能,会给一部分VM做资源预留,我们假定Slot内存和CPU的初始值为X(X=0),然后加上预留值,得到Y值,再加上VMM的值(这又有人会问了,VMM是什么?VMM全称virtual machine Monitor,每一个虚拟机在Esxi中都是以一个进程的形式存在,类似于Windows的Processes,VMM就是监控这个进程状态所产生的内存开销,VMM会随着虚拟机的开机而产生,关机而消失),得到Z值,而后会拿着这个Z值和整个Cluster中的VM进行比较,来确定是否是最大值,如果是,那么Slot的大小就是Z,如果不是,Slot的大小就取Cluster中最大VM的值,最后会根据取到的值去host上数有多少个Slot,并取最小值。例如,最终的Slot大小CPU=1G,Memory=2G,这时候会拿着这个值去host上数,好比数出10份CPU,和20份Memory,那么Slot的个数则为10。
如果没有预留值,默认CPU=32MHZ,Memory=0,再加上VMM然后去Cluster中对比,后面的步骤与有预留值一样,不做赘述。这种策略适用于整个Cluster中所有Host配置近似或一样的配置。
2.按百分比预留整个Cluster资源,这种策略适合Cluster中host的配置参差不齐,它的优点是让你能快速配置成功HA,但是缺点也一样明显,比如1台200G内存和1台20G内存的host组成Cluster,预留10%则为22G,如果宕机的是200的host,那么20G的host几乎承载不了200G的host上的VM。
3.指定故障转移主机,国内基本上没见过,因为需要一台host一直处于stand by状态
4.不预留资源,如果你的Cluster中只有2台host可以选择这个
从上面我们可以看出给VM过量分配与预留过多的资源并不是什么好主意,需要注意的是,所谓的预留是指给VM设置的预留,不涉及资源池的预留并。
我们该如何保证在有限的资源内当故障发生时重要的VM在可以优先获取到预留的资源呢?我们可以通过权重的方式来设置VM重启的顺序,首先将整个HA的重启权重设为中等,
利用HA中权重的优先级没有VM级别的权重优先级高这一点,将重要的虚拟机重启权重设置为高。另一个注意点是当Cluster中有2台host宕机时,他会先启动第1台host上的VM,等启动完成后才会启动第2台host上的VM,尽管第2台host上的VM权重可能比第1台host上的要高。