动态优化(Dynamic Optimization)是在scvmm2012之后引入的一个新特性,简单来说,这个特性的功能就如字面意义一样,在群集范围内使用动态迁移VM的方式优化主机的资源,使主机与VM都工作在一个相对良好的资源环境中
在VMM2008版本中有一个类似的功能称为:PRO-tips,那么动态优化(后文简称DO)与之相比有哪些改进呢?
对于VMM 2008的用户来说,解决群集中的VM负载平衡问题比较麻烦,需要使用SCOM中的agent监控主机上的性能指标已经超过阈值之后开始进行VM迁移;到了VMM 2012版本后,DO使用全新的智能放置引擎(Intelligent Placement engine )更主动并且有效掌控群集内的主机资源。
DO 相对于PRO-tips有以下几项改进:
- DO 的监控和迁移作业由VMM服务本身提供,不再需要SCOM整合
- DO 在VMM服务器上运行,并不用在群集节点主机上运行,因为对于整个群集来说做到了集中管理,消除了主机上作业冲突的可能性.
- 用SCOM过同学应该知道,如果对VM进行监控,需要许多不同的管理包(management packs)对相关指标监控,比如VM的资源、网络使用等等,但DO 本身通过VMM服务就可以了解到VM的放置规则、资源需求等,不必再通过SCOM进行复杂的管理包配置
当然,并不是说使用了DO就不再需要SCOM了,因为他们完成的任务是完全不同的,如果需要更精确的监控还是需要使用SCOM的,我们这里只针对于“动态优化”这荐任务来说,DO已经完全可以满足需要了.
接着说一下DO规则
DO的规则不是特别麻烦,下面简单说一下,需要注意的是,DO在运行下面这些规则检查的时候是按顺序进行的:
1: 不要因为DO给群集系统带来新问题
在DO的迁移动作发生之前,进行的第一项检查,就是迁移是否会使系统出现警告或者错误,如果有,那么DO就不会进行迁移。不管进行迁移后整个群集系统的资源使用有多平衡,多么合理,VM也不会进行迁移。这里特别说明一句,这其中最典型的问题就是系统在迁移后可能会over-commited,导致配置好的DO不能进行动态优化,这也是我为什么要写over-commited算法这篇文章的原因。
另外还有一种不迁移VM的情况,就是将VM配置为从动态优化中排除,如下图:
2: 解决VM的错误/警告
在进行DO时,最重要的一点就是要优先解决VM的错误和警告问题,比如VM配置了Network Optimization (VMQ)但是当前主机上VMQ不可用;无法在当前主机上访问配置的逻辑网络接口等等
3: 解决主机过载
当我们在给一个主机组配置DO的时候,会被要求指定主机的最大负载,如图:
当DO检测到某个主机上的阈值超出了指定范围,那么DO会优先将这台主机上的VM迁移出去减轻这台主机上的负载,话说这也是DO的一个最主要功能了。
4: 平衡主机资源使用
当前面提到的三个优化规则都满足的条件下,DO才会在群集内部查找所有可迁移的VM并且评估迁移后的星级,如果星级增长到满足主机组的aggressiveness 设置级别(见上图),则开始进行资源动态平衡。(Mdidum以下的星级阈值我又没有找到,如果谁有相关资料可以告诉我再进行修改)。
关于如何对主机进行评星,请参考MSDN:https://technet.microsoft.com/en-us/library/JJ860428.aspx?f=255&MSPPError=-2147217396
下表是进行星级评估时的阈值:
High 0.1 stars
Medium-High 0.2 stars
Medium 0.3 stars
可以看出,在aggressiveness设置为High后,星级增长只要0.1星就可能会引起VM迁移,一般来说我是把这个设置为low的,没有必要因为一点点的资源平衡就让正常运行的VM中断一次(虽然是动态迁移,但是在迁移的最后阶段网络还是会闪断的,这在重要的生产环境下会引起大问题)
最后,以上提到的所有迁移,都必须不能引发目标主机的错误或者警告。
DO的方式- 手动还是自动?
DO默认是工作在手动方式下的,也就是说,不会自动对VM进行动态迁移,你可以通过右键群集,选择 “Optimize Hosts” 的方式进行。在手动模式下进行DO首先会先进行群集的估计,之后会出现一个窗口显示建议进行迁移的VM/源主机/目标主机。
如果想要开启自动DO也很简单,只要在主机组属性中开启就可以,之后选择DO的运行周期(默认为10分钟一次),这样,主机组内的群集就会在指定的周期对群集自动进行DO,如果自动DO导致了一次迁移,在任务窗口中也可以观察到迁移的进度。
DO的性能数据
1.在进行大部分的部署工作时(如新VM,迁移VM,新建服务等等),DO会基于一定周期内VM在正常工作条件下的性能数据计算出平均值,用以星级评估。
2.SCVMM从VM和主机每9分钟获取一次性能数据(这也是为什么DO的默认周期是10分钟的原因),DO会基于滚动周期内性能数据的平均值进行检查
3.DO不会进行存储迁移,所以在进行DO时磁盘性能是不计算在主机负载内的,在VMM 2012中, DO只考虑CPU以及内存的使用
诊断DO出现的问题
当DO出现某种问题的时候(其实也就是动态优化没有产生你要的效果的时候),我们需要通过哪些手段来确认为什么不能正常执行的?
其实最主要的工具就是SCVMM的客户端,你可以手动对你想要迁移的VM进行一次手动迁移,我们会发现出现如下界面:
可以看到,界面上出现了主机的星级,这个星级的计算方法、放置规则是与DO的计算方式完全一致的,从图中可以看到主机1,3是有星级的,但是主机2由于添加了放置规则,且并不满足,所以是没有星级的,这点可以从下面的异常信息看出来。所以DO不会将我选中的VM迁移到主机2上。
同样,还有一种最常出现的情况就是群体over-commited:
在上图这种情况下,不管主机的星级多么高,但是群集整体已经过载,也就是说无论怎么迁移VM都会有over-committed的警告,违反了DO的第一条规则,所以DO是不会进行动态迁移的。
最后,我们要考虑的就是主机资源的平衡问题,只要没有达到aggressiveness的级别设置,DO是不会进行平衡迁移的,举例来说,有一个主机上运行了10个空闲的VM,而另一台群集里的主机上没有放置VM,DO运行检查后发现没有达到aggressiveness的配置值,所以并不会导致VM进行迁移。 但是当主机的使用率上升,换句话说,星级评定与空闲主机相比有下降的超出了aggressiveness阈值,DO才会有迁移的动作进行资源平衡,我们可以通过把aggressiveness的等级设置的高一点,让群集内主机的资源使用尽量平均。当然我并不建议这么做……