Hyper-V深度评测三:NUMA、可扩展性和监控方面的改进

译文
云计算 虚拟化
虚拟机必须是安装了2012 Integration Components和故障切换集群功能的Windows 2008 R2或2012;COM组件在虚拟机里面运行,通过心跳(hearbeat)服务与父分区中的虚拟机管理器服务(Virtual Machine Manager Service)进行联系。收件箱功能可检查指定服务的状态;如果状态很危急,虚拟机可以从容关闭,并重启;下一次启动后,虚拟机被实时迁移到另一个主机。

   我们在前几篇中已经相当全面地介绍了Hyper-V,着重介绍网络功能方面的改进。现在不妨换个角度,介绍可扩展性方面的改进、NUMA方面的考量和虚拟机监控。

  可扩展性

  在与VMware旷日持久的竞争中,微软2008/2008 R2版本中的虚拟机管理程序在数量方面有点落后对方,每个虚拟机只提供4个虚拟处理器,每个虚拟机“只有”64GB内存,在16个节点组成的集群中“只有”1000个虚拟机。

  在该版本中,微软致力于确保你今天拥有的任何物理服务器都能够成功进行虚拟化处理(想一想大型SQL集群)。每个虚拟机最多可以有64个虚拟处理器和1 TB内存;一个集群可以扩展至64个节点,虚拟机总数最多有8000个。每个虚拟机最多可以连接260只虚拟硬盘(4只IDE和256只SCSI);那些虚拟硬盘文件每个容量可多达64 TB(理论极限是1.3 PB),采用新的VHDX文件格式。每个虚拟机最多还可以有8个合成网络适配器(和另外4个原有的仿真网卡)以及连接至光纤通道存储区域网(SAN)的最多4个虚拟光纤通道适配器(后面会有介绍)。这些扩展性方面的极限在生产负载环境下都经过了微软的测试。

  在我们关注主机服务器的可扩展性之前,自然有必要解释处理器数量。在Hyper-V环境下,处理器上的一个核心算作一个逻辑处理器(LP);如果该处理器使用英特尔的超线程技术(使得每个核心如同2个核心),那么它被算作是2个LP。每个虚拟机被分配一个或多个虚拟处理器(vCPU);在之前的版本中,vCPU与LP之比是有限制的——这种比例在Windows Server 2012中不再适用。

  在Server 2012中,每个Hyper-V主机最多可以有320个逻辑处理器,有多达1024个虚拟机同时运行,所有虚拟机上最多可以有2048个虚拟处理器。一个主机最多可以有4TB的内存。这些数字适用于提供Hyper-V的所有三个Server 2012版本:标准版、数据中心版和免费的Hyper-V服务器版。

  不同版本的Windows Server 2012还都有同样的全部功能;比如说,标准版现在随带故障切换集群(Failover Clustering)功能;它们之间的区别是,标准版随带2个Windows虚拟机的许可,而数据中心版随带无限制的虚拟机许可。所以,如果你需要在某一个主机上运行4个Windows虚拟机,就可以将两个标准版许可证分配给那台服务器,以满足虚拟机许可方面的要求。免费的Hyper-V服务器版并不随带任何虚拟机许可,因而它是很适合VDI解决方案或Linux虚拟机的理想平台。

  你的NUMA怎样?

  这些可扩展性方面的数字使另一个问题显得尤为突出:非一致性内存访问(NUMA)。在大型机服务器领域(比如一台有16个物理处理器的服务器,每个物理处理器有10个核心,运行超线程技术,就共有320个逻辑处理器,可能还有数TB内存),每个处理器无法快速访问所有内存。系统而是被分成了多个NUMA节点;每个节点有一定数量的处理器核心和内存,这些内存具有缓存一致性,实现快速访问;如果一个处理器上的线程需要访问存储在另一个NUMA节点的内存里面的数据,访问速度就会大大减慢。由于Server 2008 R2存在的限制(每个虚拟机最多4个vCPU和64 GB内存),这对虚拟机来说不是个问题(不过有一个设置,允许虚拟机横跨多个NUMA节点)。

  不过在2012中,虚拟机知道并兼顾NUMA节点的边界以便性能不受影响,这点很重要。这由可识别NUMA的Hyper-V来处理,而且把NUMA拓扑结构投射到虚拟机里面,那样可识别NUMA的应用程序(如SQL Server和IIS)能够优化其性能;这被称为虚拟NUMA。请注意:如果你的虚拟机使用动态内存,那么虚拟NUMA被禁用;只有主机有8个以上的逻辑处理器和64GB以上的内存,虚拟NUMA才会启动。

  图1:如果你的集群里面有大型主机机器,就要确保你认真研究了最佳NUMA拓扑结构。

  Hyper-V使用ACPI静态资源关联表(SRAT),将NUMA拓扑结构呈现在虚拟机面前;这是一项行业标准,这意味着可识别NUMA的任何操作系统应该都能够使用虚拟NUMA。Hyper-V可以自动检测到主机上的NUMA拓扑结构,并相应配置设置;但是如果你的集群里面有不同年代、不同处理器数量和不同内存大小的服务器,就应该查阅硬件手册,搞清楚每个主机的NUMA节点大小。然后,你应该将NUMA节点设置手动设成集群中最小的NUMA节点,这将确保把虚拟机实时迁移到不同节点不会导致虚拟机最后出现在NUMA配置比较小的主机上。如果投射到虚拟机中的虚拟NUMA节点大于主机上物理NUMA节点的实际大小,就会出现性能问题。

  如果由于某种原因你对NUMA设置的手动变更导致了性能低下,你可以使用方便的Use Hardware Topology(使用硬件拓扑结构)按钮,返回到主机上Hyper-V自动计算出来的设置值。

  性能最重要

  适应大型系统的另一个变化是Hyper-V预先启动(Early Launch);Hyper-V会在操作系统之前启动,向父分区(实际上是主机上运行的第一个虚拟机)只显示前64个逻辑处理器,此举为了避免Hyper-V受制于Windows Server本身的可扩展性限制。未经过更新的第三方管理工具会误报你服务器中的核心数量,因为它们只能看到父分区看到的东西,但是有新的API可以获得物理主机的实际处理器数量。

  由于虚拟机现在支持许多vCPU,另一个问题浮出水面:获得调度——指把执行的线程集合起来以提高多处理器性能的过程。在物理环境下,操作系统假设:如果它检测到启动时一定数量的处理器核心,它们总是可用来调度执行的线程,而在虚拟化环境下,不再是这样子。由于微软控制着Windows,它把一些组件添加到内核中,那样虚拟机管理程序就能告诉虚拟机它在虚拟环境下运行,因而Windows Server 2008及以后版本不需要获得调度,就很容易扩展vCPU的数量,而Windows Server 2003虚拟机只能有2个vCPU。微软还把这些功能添加到了帮助编写的Linux内核中。

  注意:这是VSphere与Hyper-V的一个显著区别;在VMware环境下,总是建议尽量减少vCPU的数量;只有在虚拟机果真要使用vCPU时,才分配vCPU。在Hyper-V(带Linux和Windows Server 2008+虚拟机)下,分配多个vCPU并不会带来任何“开销”;要是该虚拟机不使用它们,其他虚拟机也会使用。

  为集群打上补丁

  随着集群规模不断更大,下面这种做法再也不实用了:从一个节点手动排出(drain)虚拟机,安装所有授权的补丁,重启服务器,然后为下一个节点重复这个过程。虽然SCVMM 2012提供了经过协调的打补丁机制,但Windows Server更进了一步,因为它为各种类型的集群,而不是只为Hyper-V集群提供了集群识别更新(CAU)。默认情况下,通过平常的WSUS或SCCM基础设施,只安装Windows Updates,但是微软热修复程序、甚至非微软补丁都可以添加,只要借助一点PowerShell魔力和文件共享区。第三方开发商也能扩展CAU功能。集群经配置后,可以自我更新,而集群角色(以前名为集群服务)提供了协调机制,可按照计划自动下载和安装更新。

  你还可以安排整个集群的任务,这些任务可以在集群中的所有节点上运行、在仅仅选择的节点上运行,或者在拥有某个资源(比如虚拟机)的那个节点上运行。现在就算联系不上域控制器(DC),集群也可以开启,这对分支机构场合来说很方便,因为域控制器可能是集群中某个节点上的虚拟机;Hyper-V集群还支持只读域控制器(RODC)。

  在Windows Server 2012中,默认的集群配置是动态仲裁管理:节点处于离线状态时,它会自动调整仲裁所需的投票(vote)数量,从而提供更好的弹性。在某个节点失效(非计划停运)、在该节点上运行的虚拟机在集群其他节点上自动重启的情况下,现在可以为每个虚拟机指定四种不同级别的故障切换优先级:高、中、低以及不进行故障切换。这样一来,就有可能迎合由数据库虚拟机和Web前端虚拟机组成的来宾集群;在这种情况下,前者需要在后者正确启动之前运行。

  现在只要通过用户界面中的一个鼠标右击选项,就可以通过实时迁移运行中的虚拟机,排出节点。

  新的关联(Affinity)和反关联(Anti-Affinity)规则让你可以定义:两个虚拟机应该总是位于同一个主机上(比如确保应用程序与数据库之间的高速访问),或者两个虚拟机从不放在同一个主机上(比如说同一Exchange数据库可用性组即DAG的两个成员),这尤其适用于虚拟机使用来宾集群为应用程序提供高可用性的场合。

  虚拟机监控

  到头来,贵公司并不在乎底层硬件的状态,也不在乎虚拟机管理程序或虚拟机里面的操作系统;重要的是应用程序及其健康状况。System Center 2012 Operations Manager可通过管理包(Management Pack)密切关注硬件、主机和虚拟机的健康状况,而来宾集群虚拟机可以为支持高可用性的应用程序提供高可用性。不过,无法集群起来,又没有OM管理包的应用程序可以充分利用新的虚拟机监控功能。

  虚拟机必须是安装了2012 Integration Components和故障切换集群功能的Windows 2008 R2或2012;COM组件在虚拟机里面运行,通过心跳(hearbeat)服务与父分区中的虚拟机管理器服务(Virtual Machine Manager Service)进行联系。收件箱功能可检查指定服务的状态;如果状态很危急,虚拟机可以从容关闭,并重启;下一次启动后,虚拟机被实时迁移到另一个主机。

  由于虚拟机到父分区的通信可能会引发安全和隐私问题,只更改一个比特,就表明应用程序处于危急状态。虚拟机监控还可以由第三方来扩展,赛门铁克公司已经展示了Symantec Application HA for Hyper-V,它增添了更主动的管理功能,可以重启应用程序,甚至从备用映像恢复虚拟机,此外本身提供了故障排查步骤。

责任编辑:老门 来源: 51cto
相关推荐

2013-05-13 10:28:32

Hyper-VWindows Ser

2011-11-21 10:37:51

虚拟化微软虚拟化Hyper-V

2013-05-10 10:02:28

Hyper-VWindows Ser

2013-04-18 09:47:47

Hyper-V网络

2013-06-08 10:12:52

Hyper-V虚拟化迁移

2013-04-15 10:00:14

Hyper-V虚拟化网络

2013-05-10 09:27:56

Hyper-V存储评测

2010-03-18 10:29:11

Hyper-V

2013-12-04 09:46:56

Hyper-VNUMA

2013-05-13 10:31:51

Hyper-VWindows Ser

2021-12-09 05:36:16

云存储可扩展性数据存储云存储

2013-05-10 10:07:46

Hyper-VWindows Ser

2021-09-02 09:42:11

测试软件可扩展性开发

2017-03-07 09:31:30

Windows SerHyper-V Manager

2013-05-07 09:31:14

Hyper-V灾难恢复

2023-06-15 15:40:36

2017-01-05 19:29:10

公共云云存储微软

2023-10-11 13:46:26

缓存Web应用程序

2022-09-05 15:17:34

区块链比特币可扩展性

2012-06-04 11:04:46

虚拟化
点赞
收藏

51CTO技术栈公众号