动态优化(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的等级设置的高一点,让群集内主机的资源使用尽量平均。当然我并不建议这么做……

使用scvmm 2012的动态优化管理群集资源的更多相关文章

  1. 浅谈Virtual Machine Manager(SCVMM 2012) cluster 过载状态检测算法

    在我们使用scvmm2012的时候,经常会看到群集状态变成了这样 点开看属性后,我们发现是这样 . 发现了吗?Over-committed,如果翻译过来就是资源过载,或者说资源过量使用了,那么这个状态 ...

  2. FreeRTOS 动态内存管理

    以下转载自安富莱电子: http://forum.armfly.com/forum.php 本章节为大家讲解 FreeRTOS 动态内存管理,动态内存管理是 FreeRTOS 非常重要的一项功能,前面 ...

  3. Android 6.0 - 动态权限管理的解决方案

    Android 6.0版本(Api 23)推出了很多新的特性, 大幅提升了用户体验, 同时也为程序员带来新的负担. 动态权限管理就是这样, 一方面让用户更加容易的控制自己的隐私, 一方面需要重新适配应 ...

  4. C++动态内存管理之shared_ptr、unique_ptr

    C++中的动态内存管理是通过new和delete两个操作符来完成的.new操作符,为对象分配内存并调用对象所属类的构造函数,返回一个指向该对象的指针.delete调用时,销毁对象,并释放对象所在的内存 ...

  5. uCGUI动态内存管理

    动态内存的堆区 /* 堆区共用体定义 */ typedef union { /* 可以以4字节来访问堆区,也可以以1个字节来访问 */ ]; /* required for proper aligne ...

  6. Keil C动态内存管理机制分析及改进(转)

    源:Keil C动态内存管理机制分析及改进 Keil C是常用的嵌入式系统编程工具,它通过init_mempool.mallloe.free等函数,提供了动态存储管理等功能.本文通过对init_mem ...

  7. (原创)动态内存管理练习 C++ std::vector<int> 模拟实现

    今天看了primer C++的 “动态内存管理类”章节,里面的例子是模拟实现std::vector<std::string>的功能. 照抄之后发现编译不通过,有个库函数调用错误,就参考着自 ...

  8. C++程序设计入门 引用和动态内存管理学习

    引用: 引用就是另一个变量的别名,通过引用所做的读写操作实际上是作用于原变量上. 由于引用是绑定在一个对象上的,所以定义引用的时候必须初始化. 函数参数:引用传递 1.引用可做函数参数,但调用时只需 ...

  9. web页面内容优化管理与性能技巧

    来源:GBin1.com 回 想一下,以前我们不得不花费大量时间去优化页面内容(图片.CSS等等),如今用户有更快速的互联网链接,我们似乎能够使用更大的图像或更大的闪 存文件,里面包含的有视频或者图片 ...

随机推荐

  1. 常用查找数据结构及算法(Python实现)

    目录 一.基本概念 二.无序表查找 三.有序表查找 3.1 二分查找(Binary Search) 3.2 插值查找 3.3 斐波那契查找 四.线性索引查找 4.1 稠密索引 4.2 分块索引 4.3 ...

  2. Hibernate —— 映射关联关系(附录)

    一.单向的多对一 1.建表语句 CREATE TABLE customer ( customer_id ) NOT NULL AUTO_INCREMENT PRIMARY KEY , ) CREATE ...

  3. 吉日嘎拉C#快速开发平台V4.0到V4.2升级记

    目前我用的版本是4.0的,也有近2年没更新了,狠了狠心升级一下,没想到真的行动起来,也没那么难! 用了3天时间,将吉日嘎拉的代码升级到了4.2版本,并让原来的DotNet.WebApplication ...

  4. SSH输入错误Action

    在类型转化.输入验证校验 .文件上传等出错的时候,如Action中某个变量是int,而上传的值是"ABC",此时Action不会执行execute()函数,而是直接返回result ...

  5. 【夯实PHP基础】PHP的date函数

    本文地址 原文地址 提纲: 1. 引言 2. 代码示例 3. 参考资料 1. 引言 今天看到一段代码 $timeNew = date('n月j日', strtotime($oldTime)); 感觉有 ...

  6. 对,这是http处理层

    16年2月的一次代码重构,面对如此肮脏丑陋的代码我困在了座椅上整整一天的时间. 底层用java写的api接口,通过http去调用,在之上是用php写的业务逻辑层,重构的代码,正是php这一层. pub ...

  7. UML(Unified Modeling Language)统一建模语言

    什么是模型 模型是对现实的简化 模型是提供系统的蓝图,模型可是包括详细计划.也可是是从更高程度考虑系统的总体计划,每个系统可以从不同的方面用不通过的模型来描述.因而每个模型都是在语义上闭合的抽象系统. ...

  8. 【grunt第一弹】30分钟学会使用grunt打包前端代码

    前言 以现在前端js激增的态势,一个项目下来几十个js文件轻轻松松对于复杂一点的单页应用来说,文件上百简直是家常便饭,那么这个时候我们的js文件应该怎么处理呢?另外,对于css文件,又该如何处理呢?? ...

  9. Javascript对象

    这次的分享,主要还是想跟大家聊聊Javascript语言中很重要的概念之一,对象.为什么说之一呢?因为Javascript其他重要概念还包括:作用域 作用域链 继承 闭包 函数 继承 数组 ..... ...

  10. 使用jq插入节点

    .append()和.appendTo()两种方法功能相同,主要的不同是语法——内容和目标的位置不同 append()前面是要选择的对象,后面是要在对象内插入的元素内容 appendTo()前面是要插 ...