VMware vSphere
5.1
Clustering Deepdive
HA.DRS.Storage DRS.Stretched Clusters
Duncan Epping &Frank Denneman
Translate By Tim2009 / 翻译:Tim2009
目录
版权
关于作者
知识点
前言
第一部分 vSphere高可用性
第一章 介绍vSphere高可用性
第二章 高可用组件
第三章 基本概念
第四章 重新启动虚拟机
第五章 增加高可用灵活性(网络冗余)
第六章 访问控制
第七章 虚拟机和应用监控
第八章 集成
第九章 汇总
第二部分 vSphere DRS(分布式资源调度)
第一章 vSphere DRS介绍
第二章 vMotion和EVC
第三章 DRS动态配额
第四章 资源池与控制
第五章 DRS计算推荐
第六章 DRS推荐向导
第七章 DPM介绍
第八章 DPM计算推荐
第九章 DPM推荐向导
第三部分 vSphere存储DRS
第一章 vSphere存储DRS介绍
第二章 存储DRS算法
第三章 存储I/O控制
第四章 数据存储配置
第五章 数据存储架构与设计
第六章 对存储vMotion的影响
第七章 关联性
第八章 数据存储维护模式
第九章 总结汇总
第四部分 群集架构的扩展
第一章 群集架构的扩展
第二章 vSphere配置
第三章 故障排错
第四章 总结汇总
第五章 附录
第二部分 vSphere DRS(分布式资源调度)
第三章 DRS动态配额
在本节中,我们将解释DRS动态配额和资源管理的概念。了解动态配额和资源池,以及资源分配设置,可以让您更容易的解决DRS行为的相关故障,并为您的虚拟机获得最佳的性能。
在深入DRS和本地主机资源管理之前,我们需要退后一步,掌握动态资源配额。
动态配额定义了理想资源的可用量目标,DRS和本地调用这个目标,它取决于虚拟机或者可用资源或者不可用资源,配额包含静态要素和动态要素,静态要素基于用户提供的资源规范,动态因素基于估算需求和系统争用级别,虚拟机的每个资源类型(CPU和内存)将有单独的动态配额目标。
作为管理员,通过设置资源分配策略(保留,份额和限制),可以影响到动态虚拟机的配额。资源分配设置不仅影响虚拟机的性能,而且还影响其它虚拟机的性能,因此,重要的是要了解如何计算动态配额,以及虚拟机在不引入拒绝服务或者其它环境时,如何配置虚拟机。
无论是动态还是静态元素,本章节的后面会详细解释,现在,让我们开始为计算动态份额来设计架构。
资源调度架构
ESXi 主机的VMkernel运行着多个本地资源调度器,包括CPU调度和内存调度。DRS引入了全局调度,从而有效的创建了一个二层调度,用来负责分配本地资源和群集资源。
图51:DRS和本地调度
DRS调度
全局调度负责分配群集资源,在接收到有效资源和虚拟机的需求时,DRS确定每个虚拟机的动态配额。
如果群集是一个大型的主机,但是依赖主机级别调度来实现DRS资源池和虚拟机的资源设置,DRS调度会计算出理想的CPU和内存的配额,资源池在第13章进行扩充说明。
有趣的情况是当资源池包含的虚拟机运行在不同的主机上,本地主机的资源调度程序分配资源给虚拟机,需要在群集资源池的设置和本地主机资源池的设置之间进行转换。
DRS通过镜像解决了群集每个主机的资源池树,映射适当的资源给每个资源池节点,本地资源调度的位置在/host/user目录,导致DRS资源池树在每个包含资源池的主机上逐层重启/host/user 。
图52:映射群集RP树为ESXi主机RP树
DRS发送资源池设置到每一个主机本地的资源池树,与主机上所有活动的虚拟机的动态份额保持一致,DRS修剪资源池树,发送给只运行在该主机上的虚拟机,在图53中,ESXi-02上的资源池1内没有一台虚拟机是活动的,因此,ESXi-02上不存在资源池树。
图53:通过主机本地资源池(RP)生成树划分资源池(RP)资源级别
本地调度
如果用户已经在主机上建立了树,本地调度对待本地主机资源池树与其相同,接下来资源分配给资源池树,合适的时候本地主机在虚拟机间调度计算关于树和流量资源的动态配额,如果必要,本地主机资源调度可以增加资源,如果资源可用,可以快速响应需求的变化。
动态配额目标
在非过分使用的群集中正常运作,虚拟机的动态配额可能会发生波动,这取决于其活性,在非过分使用的群集中,当虚拟机接收所有的资源需要人为的限制,分配额外资源需要本地主机的计算调度,这样本地主机的调度可以尽可能的避免不必要的开销,从而较少的限制资源分配策略。
动态配额目标随着虚拟机需求的增长而增长,换句话说,虚拟机配置最大规格(CPU和内存大小)比配置资源利用率更高效。
动态配额目标由需要和使用指标组成,通过整合计算需求指标,本地主机调度和DRS了解到虚拟机需要多少资源实际接收了多少资源。
DRS使用动态配额计算指标是指CPU的活动和内存的活动,CPU活动指标由主机-本地调用出口,包括%允许+%准备,本地主机调度包括活动时间里的一部分准备时间,这取决于CPU的特性,如超线程和电源管理。
内存活跃出口是通过本地主机内存来调用的,这是DRS用来确定内存份额的主要指标,活动内存代表这工作的虚拟机,标志着RAM中活动页面的数量,通过使用工作集评估,确定哪些活动的内存页被虚拟机使用,哪些活动页处于空闲状态,为了适应突然的工作量,25%的空闲内存是允许的,活动内存是动态配额的一部分,还包括了虚拟机的内存开销。
图54:动态配额目标
让我们用一个8GB的虚拟机作为例子,来看下DRS如何计算动态资源配额,这个虚拟机上运行的客户机操作系统自从它启动后,已经触及其内存的50%,但其只有20%的内存是活动的,这意味着,虚拟机已经消耗了4096MB内存中有活动内存1638.4MB,现在来计算空闲消耗内存,活动内存1638.4MB是从消耗内存中减去的,4096MB,导致总计2457.6MB的空闲内存,默认DRS空闲25%的内存,即614.4MB,虚拟机有90MB的预留内存开销,DRS使用负载均衡计算空闲内存如下:1638.4 MB + 614.4 MB + 90 MB = 2342.8 MB.
图55:动态内存配额
争用
争用会影响动态配额,争用,一些时候我们称之为过量,可以采取各种形式和形状,如果虚拟基础架构设计比较合理,长期争用是不会发生的。但是,短期的争用可能造成资源使用率迅速增加,导致临时需求超过可用资源。
主机故障切换,启动风暴,应用调度,负载相互关系和负载同步都会引起争用,负载的相互关系是指不同的虚拟机之间运行的负载关系,如果一个事件启动多个负载,例如,前端WEB服务器的搜索查询,这可能导致堆栈和后端的负载增加,同步往往引起负载相互关联,但也存在由于用户的活动,如早上启动程序进行登录、检测邮件和数据库连接。当出现资源争用,预留和共享资源的设置都会影响到配额。
DRS动态配额与本地主机配额
尽管DRS和本地主机调度都来调度计算虚拟机的动态配额,但它们不会交换这些计算,DRS为目标资源池树每周期一次(默认5分钟)计算平均值和峰值的需求,而主机-本地调度为每个不同的主机-本地在每个调度期内计算份额。
资源分配设置
资源分配设置不仅可以设置虚拟机,还可以设置资源池,第13章介绍了资源池和资源的分配策略,本节介绍虚拟机分配设置的功能和影响,其它资源池级别的策略则更进一步的话题讨论。
表8:资源分配设置
属性 |
详述 |
预留(Reservation) |
保证为该虚拟机分配的最小使用量 |
份额(Shares) |
同级虚拟机根据其预留量和限制量限定的相对份额值共享资源 |
限制(Limit) |
分配该虚拟机的最大使用量 |
图56:资源划分和动态配额
预留(Reservation)
预留是用来保证虚拟机的可用物理资源量,当出现争用时,本地主机调度来确认需要多少资源,通过预留,调度无法回收保护资源,换句话说,一个预留创建一个最小的动态配额目标,该配额至少和预留一样大。
例如,在内存争用期间,本地主机内存调度对比虚拟机的内存利用率,如果利用率高于内存配额,内存balloon、压缩或交换,直到物理内存使用率低于配额,当达到目标设置的预留值,资源停止回收,因为它要保证最低的配额。
继续之前内存的例子,如图54所示,虚拟机具有动态配额2342.8MB(1638.4 MB + 614.4 MB + 90 MB = 2342.8 MB)。1024MB是预留设置,导致最低的配额目标为1024MB,如果发生争用,当重新计算新的目标时,主机-本地内存调度将会采取最低配额,并从虚拟机回收内存到其最低配额。
图57:最低配额
资源池预留级别
预留可以存在虚拟机级别和资源池级别,预留资源池的资源和预留虚拟机的资源表现不同,资源池的预留资源被分配到活动虚拟机,不归属它的资源在资源池和虚拟机之间传输,由群集-级别资源池预留来分配主机-本地的资源池树。通过主机-本地资源池树预留给虚拟机的资源可用,并依靠动态配额在它们之间流动,换句话说,资源池级别的预留设置作为了动态目标,在资源池的内部更新每次使用率和需求的改变
虚拟机级别预留行为
虚拟机级别预留比资源池级别的预留少一些动态特性,在此之上,对其它虚拟机的可用资源来说CPU的预留比内存的预留效果不同。
虚拟机级别的(静态)的预留设置定义了该虚拟机的最低配额,在争用过程中,本地主机调用多于虚拟机最低配额的资源,不像资源池级别的预留,是根据虚拟机的利用率和需求来提供资源,虚拟机级别的预留设置是静态的,意思是说虚拟机在任何时候都有权拥有这些资源,不管资源是否使用中。这会影响其它虚拟机的资源可用性。
在预留资源和使用资源之间存在着差异,预留是动态配额计算的一部分,虚拟机能够使用或多或少的预留资源,虚拟机级别配额的静态特性影响着共享资源,不算使用和需求,预留资源是静态的,本地主机调度不允许在虚拟机的动态配额以外回收空闲资源。
但是什么时候虚拟机命中全部的预留?流行的观点是当虚拟机变得活跃,虚拟机将立即命中全部的预留,在虚拟机级别上预留的内存,仅仅是预留用来保护的物理内存,物理内存只被分配给虚拟机的虚拟内存访问。然而,在实践中,它依赖于虚拟机内部运行的客户操作系统,在系统启动期间,Windows在引导期间将把每一页置零,在引导期间命中全部的预留,但是Linux,只访问它需要的内存页,例如,一个4GB的Linux的虚拟机配置了2GB的内存预留,当访问需要1GB,只剩下1GB的预留分配内存,其最低配额是1GB,一个Windows的虚拟机在完成启动引导后也需要最低2GB的内存配额。
幸运的是,这并不全是坏事,预留资源的共享决定了工作量的灵活性:CPU指令是短暂的,并快速完成,处于这个原因,CPU调用允许其他虚拟CPU使用物理CPU,虽然它还没有激活,如果虚拟机请求的资源已激活,squatter可以快速在队列\中取消预订,物理内存保留数据,如果内存空间被租借到其它的虚拟机临时使用,如果合法拥有者需要使用这部分内存空间,这些数据需要被移动,清理这些数据需要大量的时间,可能不公正的延迟虚拟机的激活,为了避免这种情况,内存不会调度预留物理内存借给它们临时使用。
接入控制和动态配额
经常误认为动态配额和接入控制是独立的机制,它们都受到预留定义的影响。
接入控制的原理是激活已经上电的,与预留资源沟通哪些资源有效(所有的系统资源-虚拟机的全部预留资源),上电成功后只有接入控制成功,而在虚拟机操作期间动态配额是活动的,将不会利用回收可用资源保护预留资源。
换言之,接入控制存在于虚拟机第一个生命周期阶段(预上电时),而动态配额控制在虚拟机生命周期运价阶段中。
份额(Share)
份额确定了同级别下虚拟机和资源池的相对优先级,决定了如何划分资源(总资源-总预留)
相对优先级
份额与池相关,意味着同一父资源池下的子资源池之间相比较的数量,一直以来,它们意味着关联优先级,绝对值并不重要,比较2:1或者20 000:10 000是一样的结果,在第13章会在群集中使用份额。
CPU份额
当虚拟机遵从了最低配额后,CPU的份额将用来划分可用的物理CPU资源,如果虚拟机不使用预留的CPU时间,未使用的CPU时间会被其他的虚拟机使用,为正确分配CPU时间值,CPU调度计算每个份额的MHz值,这个指标通过CPU调度被用来识别哪些虚拟机的配额领先,哪些虚拟机的配额落后,哪些没有完全的利用配额。
当一个虚拟机要运行,CPU调度识别虚拟机的进展,并将其放置其中一个队列,如果虚拟机落后了配额,它将被放置到主调度队列,如果超过了配额,它将被放置到额外队列,在调度之前,CPU调度将在主要队列中对比每份额的MHz值,并选出最低的份额值的虚拟机,如果没有虚拟机在主队列,调度将从额外队列中选择虚拟机。
每份额计算公式如下:
MHzPerShare = MHzUsed / Shares
虚拟机目前在MHz中测量出的当前可利用的MHz,而份额表示当前虚拟机配置的份额数量。
例如,如图58:VM1用了2500 MHz,有2000份,导致每份额值为1.25,VM2消耗了2500MHz,但是有1000份,导致没份额值为2.5,由于VM1的每份额值低,它将在队列的前面。
图58:顺序优先级
如果虚拟机与最低每份额值决定不利用周期,周期可以被分配给下一个较低每份额值的虚拟机。
预留覆盖份额,保护物理资源,无论资源池中有多少份额,这意味着,虚拟机可以一直在预留中使用特定的CPU周期,即使虚拟机有一个较高的每份额值。
例如:三个虚拟机在资源池中都占有8GHz
表9:份额和预留预览
VM1运行着内存密集型的应用程序,并且不需要很多CPU周期,VM2和VM3运行的是CPU密集型的应用程序,VM1运行了500MHz,2000份额,每份额0.25,1000份额支出给VM2,
加上预留的2500MHz在VM2上,VM3有2000份额,但是虚拟机电源关闭了,因为VM2需要CPU周期,CPU调度分配CPU周期取决于它的预留,导致在每份额的值为2.5(2500/1000),此时资源池中仍由5000MHz可用。
图59:因为预留VM2 回收MHz
在下一个场景中,VM3刚通电,并落后于配额,虚拟机的CPU调度对比每份额的值,选择最低每份额的虚拟机,第一步,VM3每份额为0,能够回收到0.25,从VM1,第二步,VM1不需要添加CPU周期和配额回收,在考虑提供调度CPU周期给VM2之前,VM3能够现在回收CPU资源只到每份额值等于2.5。
VM3拥有2000份额,意味着它能够分配4500MHz,达到每份额的值为2.5(4500/2000),考虑VM2的分配剩下500MHz,CPU调度分配4500MHz去补偿分配
之前的场景论述了,CPU份额在分配CPU周期中扮演着非常重要的角色。
内存份额
为了保证和更新虚拟机的内存分配,内存调度每15秒调用一次来重新计算统计动态配额内存。
该指标被推送到DRS,用来计算跨群集主机的资源并进行分配,但是,主机-本地内存调度负责分配资源,正如之前所提到的,如果资源不存在争用,每个虚拟机都被允许分配额外资源。
动态配额将每15分钟计算一次,但是虚拟机被允许超过动态配额,并且在需要的时候可以分配到额外的资源。
如果发生争用,内存嗲用基于虚拟机的动态配额回收内存,ESXi通过计算空闲的内存状态(MinFreePct)来决定争用级别,基于级别争用和空闲内存状态,内存调度决定哪些虚拟机可以使用重新回收机制。
在vSphere 4.1中,MinFreePct被定义为6%,其它内存的状态被定义为MinFreePct的百分比。
表10:MinFreePct软、硬、低状态的百分比
当今的服务器配置,为了触发内存回收技术6%的比例可能有点多,服务器配置512GB内存的情况越来越普遍,而6%的阈值就是30GB,它将在大部分时间处于空闲状态,为了抵制浪费的内存,vSphere 5.0引入了浮动计算。(sliding scale)
表11:MinFreePct 浮动计算
一台配置96GB内存的服务器,MinFreePct阈值将被设置为1597.36MB,如果96GB全部被使用,96GB的6%就是5898.24.
表12:96GB服务器内存回收阈值
为了减少内存回收的影响,
闲置的内存将被作为对象回收,以提供“解放”虚拟机物理内存,需要的内存越多和要求的优先级越高。
要确定哪些物理内存可以重新被分配,内存调度计算每页份额的指标,内存从拥有份额最少的虚拟机或者资源池中回收,每页份额决定了每页分配的数量,纠正活动页面的数量和闲置页面的分配百分比,空闲内存以渐进方式申请:虚拟机闲置内存增加更改活动内存的比例增加,调整活动页和空闲页的份额数量有助于避免纯粹的按比例的份额分配,空闲的虚拟机不成比例的份额可以囤积内存。
资源争用,怎么办?
如果空闲内存状态从高状态变成另一种状态,如果软、硬或低,内存调度程序调用一个新的目标被每个虚拟机重新计算,新的目标会根据内存闲置率进行调整,在虚拟机的统计抽样之前工作内存被分类为空闲或者活动,相当于75%的未保护内存通过最小配额被回收,内存调度将持有25%的缓冲区,以适应快速增长的工作集。
使用前面的例子,图60,假定虚拟机运行的是Windows,由于Windows启动的时候使用的归零技术(zero-out technique),虚拟机分配内存等于配置大小,20%的配置大小是活动的,如果1024MB内存预留被保护起来,在估算工作集的活动内存之前,保持25%的消耗空闲内存作为缓冲区能够快速应对工作量增加,虚拟机的动态配额确定为3366.8MB,计算如下:20% of 8192 MB = 1638.4MB活动消耗内存,由于所有的内存消耗,空闲消耗的内存计算为8192 MB �C 1638.4 MB = 6553.6 MB,25%的空闲消耗内存= 6553.6 * 0.25 = 1638.4 MB,内存的开销为90MB,总计动态配额为1638.4 MB + 16384.MB + 90 MB = 3366.8 MB
图60:动态配额决定回收
内存调度将遵从预留,无法重现分配已经被保护的内存,根据资源争用级别,从每个虚拟机的内存上回收资源,一个低级别的争用导致少量的内存页从虚拟机被回收,高级别的争用导致回收增加,内存调度试图回收的页面取决于虚拟机的动态配额,但是取决于预留的内存被回收还是有可能发生,也就是当内存需求过大的时候。
图61:重新回收和级别争用
最坏分配情况
当最小配额的内存被回收,虚拟机经历最坏的分配情况,此值在vCenter中作为最坏的情况显示在资源分配选项卡,该值使作为一个理论值,以帮助了解虚拟机资源分配能够有多糟糕。
限制
限制是资源分配的一种方式,定义了物理资源的上限,CPU和内存的调度分配资源都可以被限制,即使有足够的可用资源,限制会定义最大的配额,将严格执行主机-本地的资源调度,在图62中,虚拟机配置了8192MB的内存,额外限制配置为6144MB,资源调度可能分配内存为6144MB,这意味着虚拟机的最大消耗内存是6144MB,这导致了一个较低的动态配额目标,因为总闲置消耗内存4505.6MB代替了6553.6MB
图62:限制
限制能够实现限制资源池中资源的分配数量,但我们强烈建议您不要每天在虚拟机的应用上进行限制。
最初,限制被开发人员作为一种故障排除工具,在ESXi主机上虚拟机没用使用过量的情况下诱导使用过量,为虚拟机里操作系统的动态配额计算限制边界值,操作系统资源管理器只知道虚拟机的配置大小,即配置CPU和内存的大小。
CPU限制
在分配虚拟机CPU资源时,限定了CPU资源的上限,如果虚拟CPU超过了它的CPU分配,直到允许再次运行才取消调度,当虚拟机取消调度,可用CPU周期被浪费。
内存限制
客户操作系统将规定和协调它们的高速缓存和内存管理算法,并倾向于使用它们呢现有的内存,因此,设置的限制太小会损害操作系统或者应用系统的性能,虚拟机会试图使用为存储的物理内存。内存调度需要通过ballooning,compressing或者swapping,如果内存是swapping将在ESXI主机和存储级别上产生开销。
设置限制相等内存大小
我们都知道,一些管理员限制了虚拟机的相等的内存大小,这不是使用限制的恰到的方法,在许多方面是没有益处的。
配置的大小明确限制了内存的调度,客户操作系统不能使用更多的内存因为它不会检测更多的内存,VMkernel将为每个虚拟机的虚拟化开销预留内存,称为内存开销预留,内存限制不会影响内存的配置,它是基于虚拟机的大小配置,一个限制是静态资源分配设置,而重新配置虚拟机的内存大小不会受到影响,这可能会导致意外的压缩、释放和交换虚拟机的内存,如果虚拟机需要比限额更多的内存。
集合在一起
寻找资源分配设置本质,预留、份额、限制只是用于动态计算配额的组件,出现资源争用时,虚拟机资源的目标至少要大于预留,这个最小的配额为主机-本地调度标识了重新回收资源的边界,它们不能超过这一点来回收资源,限制为主机-本地调度定义了最大的目标和限制物理资源分配,如果虚拟机的资源利用率高于或者低于其配额,资源重新回收发生,知道虚拟机的使用率等于或者等于配额。
主机-本地资源调度,预留,所有权,份额在更深的级别不存在,仅仅只有动态目标必须兑现,简单的说,主机只根据配额目标尝试分配资源。