第二部分 vSphere DRS(分布式资源调度)
第二章 vMotion和EVC
vMotion可能是行业功能变化最好的一个例子,当虚拟化首次推出,所有的是关于虚拟机的灵活性和便携性,然而,便携性和灵活性在虚拟机电源开启的状态是受限制的,当VMware介绍vMotion,介绍他们改变了世界的IT,vMotion从字面上来说是现有组件上进行的开发,基础上参照“暂停和恢复”的功能也早已存在,所以不要误读了最后那句话,不过vMotion确实是一个很杰出的技术。
如你们所希望的,vMotion是一个功能,开启后,你可以在不需要关闭虚拟机的情况下,将虚拟机从一台主机迁移到另一台主机上,问题是仍然存在,它是怎样工作的呢?这是一个相当复杂的过程,这个点多年来一直都被优化,它允许你在一台支持10GB网络的主机上进行8个vMotion的并发,在写这篇文章的时候,还是限制为一台支持1GB网络的主机上进行4个vMotion的并发。
一个vMotion的工作流程是怎样的?
1. 验证目标主机兼容性
2. 在目标主机上创建一个虚拟机的副本
3. 通过vMotion的网络将每个内存页面从源地址复制到目的地址,这个过程称为预复制
4. 在目标虚拟机上执行复制过来的虚拟机的内存,再把预复制过程中产生的内存页复制过来
5. 继续复制上一次复制期间的内存页只到没有改变为止
6. 将源虚拟机“眩晕”,在目标虚拟机上恢复状态。
这听起来非常简单,真的是这样么,只有6个步骤?但是,也有一些问题,如内存量变化超过了vMotion的网络吞吐能力的,我们都不希望知道这样的场景下会发生什么,例如,数据库服务器有非常大的活动内存。
在vSphere 4.1中,VMware介绍了vMotion的部分功能—快速恢复,快速恢复开启,源虚拟机会被“眩晕”,在所有页面被复制完成,即在目标主机上开启虚拟机。但是,虚拟机已经在目标主机上运行,当它没有完全被复制完成时,它可能尝试读或者写这个页面,在这样的情况下,快速部署将从源获得请求页面,并允许客户端完成请求的操作,同时,继续复制剩余的内存页,知道所有的页面都被迁移,那么,如果vMotion的网络发生故障会发生什么呢?
目标虚拟机无法进入内存页,因为他们是“活的”远程,vSphere 4.1中,为了解决这种情况,使用了存储来实现故障的安全机制,也就是说会创建一个特殊的文件,这个文件基本上是用来作为备份缓冲区,在网络发生故障的情况下,这个文件允许来完成迁移和提供两个主机之间的双向通信,是否很酷?
一个典型的问题将会出现,这是否会影响到性能。很好理解的是,没有快速恢复,vMotion的大活动内存的虚拟机将非常困难,切换时间可能很长,并可能导致失去与虚拟机的连接,虽然快速恢复会影响页面访问,但在未复制时,给虚拟机带来非常大的好处,而临时增加的内存访问时间影响是微乎其微的,vSphere 5.0中,快速恢复被淘汰,将介绍新的功能给大家,让我们看看发生了什么变化。
vMotion的改变?
在vSphere 5.0中,当涉及到可扩展性和性能时,vMotion的基本原理发生了一些改变。
vMotion多网卡支持
在页面发送时“眩晕”
支持高链路延迟
改进错误报告
vMotion多网卡支持
我们将要讨论vMotion一个非常本质和易见的功能,vMotion现在能够利用多张网卡同时工作来减少vMotion的操作时间,这意味着,即使单一的vMotion可以利用所有配置的vMotion网卡。vSphere 5.0之前,只有一个网卡用来启用vMotion,vMotion使用多个网卡将需要移除一些带宽和吞吐的约束,下面的列表显示了当前多网卡vMotion支持的最大数量:
1GbE –支持16个网卡
10GbE-支持4个网卡
重要的要实现万兆以太网接入,服务器要配置最新的PCI卡才能使用万兆的带宽,这个要求
才能确保你的服务器能够充分利用这些能力。
基本设计原则
当设计您的虚拟化环境,其中设计网络架构需要考虑虚拟机的规格,如果有足够的带宽用于vMotion,那么迁移完成时间会更快,更早的使虚拟机离开主机。设计服务器平台时,需要考虑网络带宽峰值-不仅是考虑网卡的能力,同时也要考虑PCI总线的能力。
页面发送期间“眩晕”
这是用来代替快速恢复的全新功能,在“眩晕”期间页面发送是指虚拟机的vCPU被迁移,并通过vMotion跟踪客户页面改变的频率,或者工程师更喜欢称之为“弄脏”,弄脏的速率是对比传输的速率,如果弄脏的速率超过传输的速率,源vCPU将被置于睡眠状态来减低弄脏的速率,直到vMotion迁移过程完成。有利的是vCPUs最多只会被睡眠几毫秒,SDPS(眩晕期间页面发送)频繁,短暂的睡眠时间,破坏虚拟机的工作量刚好保证vMotion内存页变化率能跟上,并允许一个成功的、非破坏性的过程完成,你可以说,谢谢SDPS,不管什么激进方式,你都可以vMotion任何类型的负载。
重要的是要了解到,SDPS只是在vMotion发生故障之前,减缓虚拟机的内存的变化率。这是每一个虚拟机的基础,通过高级虚拟机设置,可以调整此行为。
要禁用特定主机上所有虚拟机的SDPS,使用vSphere Client连接,选择所需要更改的主机,然后点击右侧“配置”选项卡。
在左侧软件窗口下,点击高级设置
点击左侧的Migrate,滚动到Migrate.Sdps Enabled
更改Migrate.SdpsEnabled的值为0
点击OK
请注意,我们强烈劝阻禁用SDPS。当页面弄脏的速率超过了主机间的传输速率,那么SDPS会将其踢出,换句话说,如果你的虚拟机内存非常不活跃,那么SDSP踢出其的机会会非常小,如果确实踢出,是为了阻止虚拟机失败后的vMotion迁移过程,现在注意,默认情况下,SDPS没有做任何事情,当接到一个需求通常你的虚拟机在vMotion的时候不会被扼杀
注意
SDPS被禁用时,高度活跃的虚拟机vMotion可能会失败,还有一种可能是vMotion的链路(vMotion通道等待时间超过10s过期)失败导致弄脏的速度快于复制的速度。
支持更高的等待时间-vMotion 通道
当我们讨论长距离的vMotion时,最大的制约就是等待时间。vSphere 5.0之前,vMotion支持的最大等待时间为5秒,你可以想象,这限制了很多客户启用跨站点群集。在vSphere 5.0中,企业加强版最大的等待时间进行了翻倍达到了10秒,当基础架构的组件(共享存储)都被启用,这应该使得更多的客户在站点间开启DRS。
增强型vMotion
VMware增强vMotion兼容性(EVC)通过使用Intel Flex和AMD-V技术促进了不同CPU之间进行vMotion,当EVC启用时,EVC可以确保群集内所有的CPU与vMotion兼容。
EVC和硬件虚拟化的交互支持
VMware的hypervisor的独特之处在于它支持多种执行方式,这取决于底层硬件的能力。 VMkernel将自动选择虚拟机管理程序的执行模式,将提供最好的硬件功能和各种类型的操作系统,可使用虚拟化加速功能VT-X/AMD-V/RVI/EPT或者EVC基线和虚拟机交换机,这些模式能围绕群集,最好的执行虚拟机迁移。
EVC的好处是什么?
因为EVC允许您在不同系列的CPU间迁移虚拟机,新老代的服务器混合在一个群集中,仍然允许这些主机之间进行vMotion迁移。这使得现在架构中添加硬件更容易,有助于延长主机的价值。
EVC是怎样工作的?
EVC启用后,群集下所有主机将根据用户选择的处理器类型为群集下运行的所有虚拟机提供处理器特性,来确保vMotion时CPU的兼容性,即使主机与主机间的底层硬件可能不同。无论虚拟机在哪个主机上运行,它都有相同的CPU功能,因此虚拟机可以在群集中的任何主机间迁移。
理解EVC只专注于特定系列的CPU至关重要,例如SIMD(SSE)或者AMD现在的CPU功能。EVC从软件这层隐藏虚拟机的CPU功能,但不是为这些功能做广告,这意味着功能仍是可用的和活动的,当启用EVC功能时,他们不会进行广播,CPU的基线必须被选择,这个基线表示所选择的CPU系列的功能集和公开特定CPU系列功能,当一个开启EVC的群集中一台虚拟机开启,群集的基线将附属于虚拟机,直到该虚拟机关闭。
注意
尽管虚拟机已经迁移到其它的EVC群集,但EVC的基线继续附属到该虚拟机直到虚拟机关闭。
如果一个配置了新一代CPU的ESXi主机加入到群集中,基线会自动隐藏CPU的新的和独特的功能。
例如:一个群集的一台ESXi主机配置了Intel? Xeon? Core? i7 的CPU,俗称Intel Nehalem,基线选择Intel Nehalem系列 — 这样集群中就有了Intel 的Merom系列,Intel Penryn 系列和Nehalem系列的虚拟机,这样所有的虚拟机就提供了Intel Merom功能加上SSE 4.1,SSE 4.2,Popcount和RDTSCP这些可用功能。
图:49 Intel EVC 基线
当一个配置了32nm的CPU的ESXi主机加入群集,额外的CPU指令,如AES/AESNI和PCLMULQDQ将被自动抑制。
EVC会影响应用程序的性能么?
这是可能的,但可能性很小,虚拟机中运行的应用程序将受益于设置了EVC隐藏指令集,但是,请记住,启用EVC可能会影响专门编写的应用程序的性能,以利于这些特殊指令。
在一般情况下,应该能预料到使用EVC您的应用程序将不会产生明显的性能损失,虽然EVC从虚拟机的系统和应用中隐藏了CPU功能,这些功能并不影响虚拟架构中常见软件的性能。例如,EVC不影响大多数软件使用的每秒的指令,核心数量,硬件加速,缓存或者其它CPU功能。
新系列的CPU发布后,软件厂商可能会更新或者发布新的软件版本,以充分毅力新系列的CPU推出的新指令。软件开发周期总是落后于硬件的发展,造成利用和实施新的指令集延迟。
此外,新指令集通常有专门的使用情景,这意味着在虚拟化架构中大多数的新指令与业务应用无关。
唯一例外的就是加密和解密的加速用到了AES-NI指令集,现在许多流行的应用程序都进行了加密,包括SSL库,在其最新版本中利用这个指令集,根据工作量,使用这些AES指令可以提供超过500%的性能提升。
虚拟机之间利用AES指令集进行相互认证和传输层SSL方式的通信
积木法
一个非常流行的设计方法是使用积木法。积木是扩展框架的概念,并勾勒出一个预先定义的设置来允许可扩展性,同时保持标准化的项和模块。群集配置通常被视为一个构建块,虽然一些公司购买了一个群集,同一时间,其他人使用模块化的方法购买了固定数量的物理主机,来进行规划,逐步扩大自己的群集。EVC允许混合不同系列的CPU,让积木架构的群集进行扩展和调整。一个潜在的警告就是同一个群集不同系列的混合硬件性能上会有所波动。新一代的CPU比老一代的CPU能够提供更好的性能增长,从而虚拟机和应用程序有不同的进展。例如2010年Intel Xeon Nehalem 500MHz比2006年Intel Xeon Core 2 “Merom” 500MHz计算更快。这样的配置会增加性能故障的复杂性。这是一个极端的例子,大多数客户虽然组合不同,但都是几代相邻的处理器,而不是一个群集中完全不同的硬件相结合。
EVC对容错虚拟机的自动DRS的影响
vSphere 4.1中,EVC允许DRS为容错(FT)虚拟机生成初始位置,并在负载均衡的期间允许DRS执行虚拟机相关操作。没有启用EVC,主容错虚拟机将由注册主机上的DRS操作电源,但是绝不会在负载均衡期间迁移主容错虚拟机和备份容错虚拟机。
基本设计原则
开启EVC,DRS-FT集成将被支持。
允许DRS控制,启用了FT的虚拟机的初始位置,可能会使虚拟机性能更好,DRS也能够选择更合适的主机,允许DRS计算,启用了FT的虚拟机的负载均衡,将有助于DRS较早进入稳定状态,修正计算负载均衡时对虚拟机的影响,还可以限制DRS的能力,以实现负载平衡的状态,允许DRS移动FT虚拟机,DRS就会有较少的限制,可以分配更好的资源来移动虚拟机,此外,FT-DRS集成允许主机置于维护模式,因为DRS将允许撤离FT虚拟机,因为DRS能够迁移不需要提供资源的主机上的虚拟机,这样DPM变得更有效。
启用FT的虚拟机的初始放置位置
当计算初始位置建议,DRS将为一个主虚拟机和一个辅助虚拟机选择一台主机,DRS定义了一个兼容的主机集,其中包括启用了FT虚拟机的ESXi主机,通过EVC基线,群集中的每个ESXi主机呈现相同的指令集,生成一般的主机兼容性集,例如,当启用EVC,如果虚拟机VM1在主机ESXi-02上开启,其主机的兼容性包含ESXi-01和ESXi-03,因为它可以在这些主机上vMotion这些虚拟机,还可以确认,VM1可以运行在ESXi-03上,且能在ESXi-01和ESXi-02之间vMotion,同样,它也可以在ESXi-02和ESXi-03之间vMotion。
图50:主机兼容性设置
没有EVC,DRS需要确认主机的兼容性,通过计算单独主机兼容性和每个主机之间的兼容性。例如,对于32台主机的群集,计算为N*(N-1),其中N=主机数量*(主机-主机本身)=32*(32-1)=992,除了增加系统开销,如果DRS需要执行这个兼容性检查,那么FT虚拟机的开启将是一个漫长的过程,在初始布局时,DRS还保证了备份虚拟机不会作为主虚拟机在同一台主机上运行。
启用FT虚拟机的负载均衡
如前所述,如果EVC开启,主/备虚拟机都能被DRS迁移。但是,当为FT虚拟机生成特定迁移建议时,DRS还是很严格的:由于是内部反关联性规则,DRS防止主/备FT虚拟机进行调换,FT虚拟机在任何时候都不能运行在同一主机上,所以DRS不会迁移主FT虚拟机到备份虚拟机所在的主机上,反之一样。此外,DRS不允许一台主机上放置超过4台的启用FT的虚拟机,在负载均衡计算时,将会考虑这一点。
启用FT的虚拟机的DRS自动化设置
DRS自动化设置可以为FT虚拟机进行配置,备份虚拟机继承主虚拟机的DRS自动化设置,从而两个虚拟机都具有相同的结构。不可能单独配置主虚拟机和备份虚拟机的自动化
,如果自动化配置被禁用,vCenter将在不移动主/备虚拟机,而是在目前注册的主机上启动它们。
启用和禁用EVC
尽管虚拟机是活动的,EVC仍然可以启用,只要虚拟机本身是兼容所需的EVC模式,开启的虚拟机将无法阻止EVC配置。
如果EVC被禁用,虚拟机将继续运行在相同的EVC模式下,不会被强制重启,如果要完全的去除EVC模式,虚拟机需要经过一个完整的电源周期;一个重启时不够的。
如果EVC禁用的群集有一台FT虚拟机,它们的DRS自动级别被设置成禁用,在负载均衡和维护模式下DRS将无法迁移主/备虚拟机。如果EVC再次开启,这些虚拟机将再次接受默认的群集DRS自动级别。
关闭虚拟机,而不是重启。
一个重要的事情要记住,EVC基线只适用于电源开启期间的操作,如果群集的EVC模式被改变,活动的虚拟机需要完成一个完整的电源循环来接受新的基线。如果EVC是增强模式,虚拟机继续运行。例如,从Intel Merom产生出来的Intel Nehalem,直到重新上电,基线一直为Intel Merom,当上电完成,Nehalem才被传播到虚拟机。
EVC 需求
开启群集的EVC,群集必须满足以下需求
群集中所有的主机的CPU必须来自同一厂家,不管是Intel还是AMD
群集中所有的主机必须有高级CPU功能设置,例如支持硬件虚拟化(AMD-V或者Intel VT)和AMD NX或者Intel XD,在BIOS里必须开启
群集中所有的主机应该配置vMotion,请看章节,主机vMotion配置需求
群集中所有的主机必须连接同一个vCenter Server
另外,群集中所有的主机要支持EVC模式,检查EVC支持的CPU和服务器型号,请查看VMware兼容性向导。