个人理解,如果有不同见解,麻烦请留言,一起进行探讨:
DRS和HA是两个独立的功能。
准入控制只是保障有资源打开故障后迁移来的虚拟机,就算自身已经超过切换的阈值了,HA也是可以迁移过去的。
虚拟机允许的性能降低---------个人理解只是写什么时候告警,并不会不让你迁移。到达某个阈值时报警。
故障期间,群集中的虚拟机允许的性能降级比例。 0% - 如果故障切换容量不足,无法保证重新启动虚拟机后具有相同的性能,则会引发警告。 100% - 警告处于禁用状态。
虚拟机开机时,会生成vswp的内存交换文件,内存不足的情况下,会使用该文件。以下举例只是讨论了物理空间,实际上是物理资源+swap交换文件。(存储置备的空间会受到关机的虚拟机影响,内存如果设置4G,那么置备空间会加4G,虚拟机开机后,存储可用空间会减少4G用于生成vswp文件。如果预留了2G,那么置备空间增加量为内存大小减去预留大小。4G-2G=2G,当虚拟机开机后,存储空间会减少4G用于生成vswp文件)
举例:内存8G,预留4G,主机满负荷的时候,4G物理资源,4G是swap的内存交换文件在供你使用。
如果设置4G预留,6G限制,那么他最多使用到物理资源6G,如果虚拟机满负荷在跑,那么剩下2G将是swap提供的。
如果设置4G预留,6G限制,主机满负荷时,有份额的情况下,他可能5G的物理资源,3G的swap交换文件提供内存。(当内存过载时,向每个虚拟机分配的内存量介于预留和限制指定的内存量之间。授予虚拟机的高于预留量的内存量会因当前的内存负载而异。)
解释的很清楚:https://blog.csdn.net/weixin_34248023/article/details/92885507
交换文件:https://docs.vmware.com/cn/VMware-vSphere/6.7/com.vmware.vsphere.resmgmt.doc/GUID-B55F4F6B-44E6-46DE-B8FF-75950020A181.html
个人理解,资源池,预留,份额。(内存vswp空间会在获取不到设置的内存大小时被使用,虚拟机开机时会自动生成)
主机和集群可以建立资源池。
在没建立资源池的情况下,可以理解为,有一个根资源池。
给某资源池分配预留,虚拟机在该资源池下,可以使用该预留资源,如果设置了可扩展,可以向再上级资源池借用。
困惑点,满负荷时,资源该如何分配,获取到的份额资源大于和小于预留资源时,该如何分配资源,应该是份额受预留约束,大于和小于计算方式不同,大于的时候根据份额来算,小于的时候根据预留来计算。
以下举例份额正常,以下计算应当换成份额来计算:
个人理解:
场景1:不满负荷,各虚拟机使用自己可以使用的资源(ESXi 主机将闲置虚拟机的内存转移给需要更多内存的虚拟机)。
场景2:满负荷,资源池下虚拟机需要使用到的资源超过了该资源池预留的资源,会向上级借用,当且整个主机或集群都是满负荷,资源池保障自己可以使用到自己预留的资源给到自己下面的虚拟机使用。
当满负荷时,会根据份额来给虚拟机来使用,此处份额正常,需要使用的虚拟机均分资源。
举例(还是个人理解),总资源有6G,如果A预留2G且虚拟机4G,B没有预留,但内存是4G
1.A虚拟机运行了2G,B满负荷,那么B可以用到4G。
正常情况下,A和B分别可以用到3G的物理资源。计算方式是每个份额资源为6000/8000=750/份,此处用份额,以便之后好理解,改成了G来描述。
因为虚拟机只用了虚拟机的2G资源,实际上它只用了1.5G的物理资源,那么它在物理上会空闲1.5G的资源,esxi主机会将空闲的资源给予其他需要资源的虚拟机,所以B可以使用到物理资源的4G(本身满份额3G+1G从虚拟机A上获取到的空闲资源)
2.A虚拟机运行了3G(此时可能A只用到了3G不到的物理资源,应该是2.25G,剩余0.75G空闲可以给其他虚拟机使用),B满负荷用到4G(虚拟机中看到了4G,但实际没有获取到物理资源的4G,应该是3.75G(本身满份额3G+0.75G从虚拟机A上获取到的空闲资源)),此时超过了总资源(我的认为是,(总资源/当前需要资源)*需要使用的比例,当前需要资源如果遇到份额高的,还需要根据份额高低来增加相应的倍数,总资源6G,要用到7G,A等于6/8*3=2.25G,大于他的预留资源)。
3.A虚拟机运行了4G,B也用了4G,那么他们实际上A使用了物理资源3G,B也使用了物理资源3G,我的理解是在保障虚拟机在能使用到预留资源的情况下,给所有虚拟均分总资源。
4.A虚拟机运行了1G,B改成5G,B满负荷,那么B可以用到5G(官方类似举例:https://docs.vmware.com/cn/VMware-vSphere/6.7/com.vmware.vsphere.resmgmt.doc/GUID-8B88D3D8-E9D9-4C05-A065-B3DE1FFFB401.html)
在极端的举例,仅给自己以后纠结的时候回顾现在的想法。
总资源10G,A预留2G,给4G内存,B不预留,给4G内存,C不预留,给4G内存
1.当虚拟机没有全都高负荷的时候10G可以给任意虚拟机使用,A虚拟机1G(可用物理资源10/12*4=3.33G,当前使用了0.83G,其他2.5G借给别人用了) B虚拟机4G(可用物理资源10/12*4=3.33G,增加A部分闲置的0.67G)C虚拟机4G(可用物理资源10/12*4=3.33G,增加A部分闲置的0.67G)
2.当A只要使用2G(可用物理资源10/12*4=3.33G,当前使用了1.66G,其他1.67G借给别人用了),B C满负荷可以使用物理资源4G(可用物理资源10/12*4=3.33G,增加A部分闲置的0.67G)
3.当A,B,C都满负荷,那么应该所有人均分10G,每人获取到3.3G的物理资源。(此时都满足A的预留资源,如果A预留了3G,也是如此)
4.A的预留资源改成4G,那么ABC满负荷情况应该是A可以使用到4G资源,BC虚拟机显示用了4G,但是物理资源可能只有使用到各3G。(在没有预留的情况下,只能获取到3.3G物理资源,但是有预留4G,所以A在主机过载情况下,满负荷,依旧可以获取到4G的物理资源,只有当A负载不高的时候,可以把自己预留的资源给其他虚拟机使用)
5.A内存改为8G,预留还是4G,ABC满负荷,此时A获取到的物理资源是5G(5G大于给他预留的资源,10/16*8=5G),BC分别获得2.5G的物理资源。
6.A内存改为8G,预留还是4G,A使用4G,BC满负荷,A使用到的物理资源是2.5G(根据计算,10/16*4=2.5G,A可以获取到的总资源是5G,满足预留的资源,当CPU满负荷的时候,它就能使用到8G,目前2.5G的物理资源足够A虚拟机使用,所以会有2.5G的空闲资源借给其他虚拟机使用)
7.A内存改为8G,预留还是4G,A使用6G,BC满负荷,A使用到的物理资源是3.75G(根据计算,10/16*6=3.75G,此时虚拟机只要用到物理资源的3.75G就可以满足自己需求,其他人均分剩下的6.25G资源)B,C使用了3.125(2.5G本身份额加上A空闲的0.625G)
当份额小于预留的资源时
8.A内存改为8G,预留改成6G,A满负荷(根据份额,A可以使用5G物理资源,此时份额资源小于预留资源,一开始给他预留了6G,所以在过载情况下,它可以获取到6G的物理资源,如果BC负载不高,那么它可以从别的虚拟机处获取到他们的空闲资源,从而达到自己使用8G物理资源的情况)
当BC满负荷,A使用到的物理资源是6G,BC总共获取到4G物理资源,均分,每人2G物理资源。(根据份额,应该是BC每人2.5G,但是A预留了6G,所以只能均分4G物理资源)
当A满负荷,B满负荷,C只使用了2G时。A使用了6G物理资源,B使用了2G物理资源,C使用了1G物理资源
(C还剩余1G可以给其他虚拟机使用,因对于A是使用6G物理资源还是会获取到更多的资源,不是很确定(因为预留大于份额了),个人理解:A使用物理资源6.66G,B使用物理资源2.33G根据份额计算出,A比B多一倍。当然空闲资源如何分配,都是比较理想和理论的,可能作者我理解有误,有不同观点也请指出和一起指正,谢谢。)
官方资料参考如下,
内存过载:https://docs.vmware.com/cn/VMware-vSphere/6.7/com.vmware.vsphere.resmgmt.doc/GUID-895D25BA-3929-495A-825B-D2A468741682.html
为了改善内存利用率,ESXi 主机将闲置虚拟机的内存转移给需要更多内存的虚拟机。使用“预留”或“份额”参数可优先向重要的虚拟机分配内存。如果这部分内存未使用,可以用于其他虚拟机。
资源分配预留:https://docs.vmware.com/cn/VMware-vSphere/6.7/com.vmware.vsphere.resmgmt.doc/GUID-8B88D3D8-E9D9-4C05-A065-B3DE1FFFB401.html
资源池可扩展预留示例:https://docs.vmware.com/cn/VMware-vSphere/6.7/com.vmware.vsphere.resmgmt.doc/GUID-76691829-06AD-408A-98AE-6D58555936F5.html
有效的DRS群集:https://docs.vmware.com/cn/VMware-vSphere/6.7/com.vmware.vsphere.resmgmt.doc/GUID-0E6B5307-B091-47A9-ACE7-8C86F7465C99.html
过载的DRS群集:https://docs.vmware.com/cn/VMware-vSphere/6.7/com.vmware.vsphere.resmgmt.doc/GUID-ED8240A0-FB54-4A31-BD3D-F23FE740F10C.html
(始终会有足够的资源来支持所有正在运行的虚拟机,因为当主机不可用时,其所有的虚拟机也不可用。当群集容量突然减少时(例如,群集内的一台主机不可用时),群集通常会变为黄色。VMware 建议留足额外的群集资源,以避免群集变为黄色。)
无效的DRS群集:https://docs.vmware.com/cn/VMware-vSphere/6.7/com.vmware.vsphere.resmgmt.doc/GUID-C7417CAA-BD38-41D0-9529-9E7A5898BB12.html
无效的DRS群集官方解释如下:
-----------------------------------------------------------------------------------------------------------------------------
当树内部不再一致,即未遵守资源限制时,已启用 DRS 的群集会变为无效(红色)。
群集内资源的总数量与该群集是否为红色并无直接关联。如果在子级别中存在不一致,即使在根级别中存在足够的资源,群集也可能为红色。
可通过关闭一个或多个虚拟机的电源、将虚拟机移至树中有足够资源的部分或者编辑红色部分的资源池设置,来解决红色 DRS 群集问题。添加资源通常仅在处于黄色状况时才有用。
如果在虚拟机正在进行故障切换时重新配置资源池,则群集也可能会变为红色。正在进行故障切换的虚拟机会断开连接,并且不会算入父资源池所使用的预留。在故障切换完成前,可减少父资源池的预留。故障切换完成后,会再次将虚拟机资源纳入父资源池计算中。如果池的使用量大于新的预留,则该群集将变为红色。
如下图所示,如果用户能够(以不支持的方式)启动一个使用资源池 2 下 3 GHz 预留的虚拟机,则该群集会变为红色。------------不知道如何实现启动,正常情况下,一开机的虚拟机将预留的使用完后,应该是无法正常启动其他设置了预留的虚拟机。
-----------------------------------------------------------------------------------------------------------------------------
HA 准入控制(Admission Control)
vSphere HA 使用准入控制确保在主机出现故障时预留足够的资源用于虚拟机恢复。
准入控制对资源使用施加一些限制。任何可能违反这些限制的操作都不会被允许。可能不允许的操作示例如下:
-
打开虚拟机电源
-
迁移虚拟机
-
增加虚拟机的 CPU 或内存预留
vSphere HA 准入控制的基础是群集允许的且仍能保证可故障切换的主机故障数。可通过三种方式来设置主机故障切换容量:
-
群集资源百分比
-
插槽策略
-
专用故障切换主机
https://docs.vmware.com/cn/VMware-vSphere/6.7/com.vmware.vsphere.avail.doc/GUID-53F6938C-96E5-4F67-9A6E-479F5A894571.html
DRS准入控制(Admission Control)
尝试在已启用 DRS 的群集内打开一个或一组虚拟机的电源时,vCenter Server 会执行准入控制。它会检查群集内是否有足够的资源来支持虚拟机。
如果群集没有足够的资源,无法打开单个虚拟机的电源,或无法打开组启动尝试中任何虚拟机的电源,将会显示一条消息。否则,对于每台虚拟机,DRS 将生成要在其上运行虚拟机的主机的建议,并执行以下操作之一
-
自动执行放置建议。
-
显示用户随后可以选择接受或覆盖的放置建议。
https://docs.vmware.com/cn/VMware-vSphere/6.7/com.vmware.vsphere.resmgmt.doc/GUID-AE4E1173-E3BF-40A6-8540-BD7289EA9F38.html
官方:
https://docs.vmware.com/cn/VMware-vSphere/6.7/com.vmware.vsphere.avail.doc/GUID-53F6938C-96E5-4F67-9A6E-479F5A894571.html
无论选择的准入控制选项如何,都会存在虚拟机资源减少阈值。您可以使用此设置指定允许的资源减少百分比,但在启用 vSphere DRS 后才可用。-----这句较难以理解。
会针对 CPU 和内存进行资源减少计算。此项计算会考虑虚拟机的预留内存和内存过量分配以便决定是否允许打开电源、执行迁移或更改预留。计算不会考虑虚拟机消耗的实际内存,因为内存预留并不总是与虚拟机的实际内存使用率相关联。如果实际使用率大于预留内存,则故障切换容量会不足,导致故障切换的性能下降。
通过设置性能减少阈值,可以指定配置问题的发生次数。例如:
-
默认值为 100%,不会产生任何警告。
-
如果阈值降至 0%,则群集使用率超过可用容量时,就会生成警告。
-
如果阈值降至 20%,可以允许的性能减少量按如下方式计算:performance reduction = current utilization * 20%。当前使用率减去性能减少量的值超过可用容量时,将发出配置通知。
资源分配是接入控制(也叫准入控制Admission Control)
打开虚拟机电源时,系统会检查尚未预留的 CPU 和内存资源量。系统将根据可用的未预留资源确定是否可保证为虚拟机所配置的预留(如果有)。此过程称为接入控制。
如果有足够的未预留 CPU 和内存可用,或者没有预留,虚拟机将打开电源。否则将显示一条Insufficient Resources警告。
https://docs.vmware.com/cn/VMware-vSphere/6.7/com.vmware.vsphere.resmgmt.doc/GUID-25AAD7FD-5579-4F7E-AB3A-60CF8D982A06.html
资源分配份额-----个人认为是在过载时生效(如果某个虚拟机的资源份额是另一个虚拟机的两倍,则在这两个虚拟机争用资源时,第一个虚拟机有权消耗两倍于第二个虚拟机的资源。)
资源分配预留-----预留指定保证为虚拟机分配的最少资源量。
资源分配限制-----个人认为是在资源池中才有效(感觉官方文档写了虚拟机,形容怪怪的,所以个人认为针对资源池)
资源分配设置建议:
https://docs.vmware.com/cn/VMware-vSphere/6.7/com.vmware.vsphere.resmgmt.doc/GUID-83499220-5853-49F1-B6C3-40F2126FC2D5.html
选择适合 ESXi 环境的资源分配设置(预留、限制和份额)。
遵循以下准则有助于使虚拟机获得更好性能。
-
使用预留来指定可接受的最低 CPU 量或内存量,而不是想要使用的量。预留表示的具体资源量不会随环境改变(例如添加或移除虚拟机)而变化。主机可以根据虚拟机的限制、份额的数量和估计需求将额外的资源指定为可用资源。
-
请不要将所有资源全部指定为虚拟机的预留(请计划将至少 10% 的资源保留为未预留)。系统容量越接近于被全部预留,想要在不违反接入控制的情况下更改预留和资源池层次结构就越困难。在支持 DRS 的群集内,如果预留完全占用群集或群集内各台主机的容量,则会阻止 DRS 在主机之间迁移虚拟机。(个人解释:如果A主机资源使用率很低,但是预留已经分配完全了,B主机资源使用率很好,触发DRS时,A主机已经没有可用的资源给需要迁移的虚拟机左预留了,所以会阻止)
-
如需频繁更改总可用资源,可使用份额在虚拟机之间合理分配资源。例如,如果使用份额,并且升级主机,那么,即使每个份额代表较大的内存量、CPU 量或存储 I/O 资源量,每个虚拟机也保持相同的优先级(保持相同数量的份额)。