资源计量是Hyper-V 2012时新增的功能,严格来说它应该是Hyper-V的功能,但是为什么要和WSFC在一起说,因为老王发现资源计量和资源池可以和群集相整合,因此特地分享给大家


资源计量是Hyper-V 2012开始原生自带的虚拟化资源使用收集技术,默认处于关闭状态,开启后可以帮助我们收集各个虚拟机的CPU,内存,硬盘,网络消耗


Hyper-V资源计量典型的应用场景


1.宿主机上面的托管了很多虚拟机,这些虚拟机可能被不同的部门所使用,管理员需要确保每个虚拟机使用符合的资源,不要影响到其他虚拟机,一方面可以通过资源计量监视,一方面可以通过QOS策略限制调整

2.提供数据和接口,供计费系统调度,可以是Chargeback 或 Showback,在没有SCOM和SCSM的情况下也能够实现简单的计费管理


Hyper-V资源计量的技术特点


1.无图形化界面,可以通过powershell或API调用管理

2.使用全新的调用方式,相比以前使用性能计数器轮询的方式更节省资源

3.可以被用于统计单个虚拟机或资源池

4.资源计量将会跟随虚拟机,不论虚拟机被迁移到那个主机,计量数据存储在虚拟机配置XML文件

5.支持对于虚拟机或资源池执行reset重新计量

6.对于性能消耗低,仅在输出报告时会有一些磁盘和CPU活动

7.不是虚拟化监控解决方案,只会收集有限的参数用于计量,监控仍需配合WMI性能计数器与事件日志使用,如希望执行更深入的虚拟化监控,建议使用SCVMM,SCOM



Hyper-V资源计量可以收集的数据


1.平均 CPU 使用率,在一定时间内以兆赫为单位进行测量。

2. 平均物理内存使用量,以兆字节为单位进行测量。

3. 最小内存使用量(物理内存的最低数量)。

4. 最大内存使用量(物理内存的最高数量)。

5. 分配给虚拟机的最大磁盘空间容量。

6. 针对虚拟网络适配器的传入网络总流量,以兆字节为单位进行测量。

7. 针对虚拟网络适配器的传出网络总流量,以兆字节为单位进行测量。


其中需要注意的地方


  1. 最小内存使用量仅记录VM开机状态的数据

  2. 平均内存使用量记录VM开机以及VM关机的数据,以提供虚拟机在计费周期内使用内存的准确视图

  3. CPU使用量使用转换后的MHZ计量 ,不使用%,微软认为如果报告百分比,虚拟机移动到具有不同处理能力的主机将失去意义

  4. 磁盘计量总值将显示当前分配的容量,而非当前实际使用,因此对于动态磁盘,会显示分配的磁盘最大数值

  5. 磁盘计量总值部分会包括快照大小

  6. 磁盘计量不包括直通磁盘,DAS磁盘,ISCSI,虚拟光纤通道磁盘

  7. 网络计量通过在虚拟机网络适配器上设置ACL进行计量,ACL包括方向,IP,动作,开启资源计量后动作为计量


Hyper-V资源计量自带Command


启用/禁用资源计量
Get-VMResourceMetering 
Disable-VMResourceMetering 


配置用于计量的VM资源
Set-VMProcessor 
Set-VMHardDiskDrive 
Set-VMMemory 
Set -VMNetworkAdapter 
Add-VMNetworkAdapterAcl 
Remove-VMNetworkAdapterAcl 


创建/删除资源池
New-VMResourcePool 
Set-VMResourcePool 
Remove-VMResourcePool 


测量VM和池
Measure-VM 
Measure-VMResourcePool 
Reset-VMResourceMetering


以上为大家简单介绍了下Hyper-V资源计量的功能,帮助大家复习或了解下这个概念,关于Hyper-V资源计量我的好朋友徐庭写了很好的单机实践博客,这方面老王不再重复,我们将主要实践后面资源计量,资源池与群集的整合


接下来我们再看下Hyper-V资源池的概念,此资源池非彼资源池,在目前微软的企业级生态圈中hyper-v资源池的概念主要被用于集合收集资源计量,或资源的冗余与负载均衡,针对于资源的冗余与负载均衡主要体现于虚拟交换机


根资源池


  1. 默认情况下在hyper-v中,所有资源都属于一个根资源池,图形界面无法看到,如单独创建资源池,根资源池则会显示出来。

  2. 根资源池默认处于禁用状态,即不会发挥作用

  3. 当我们针对于虚拟机启用资源计量时,根资源池被启用

  4. 根资源池是默认的集合,所有主机托管的虚拟机资源都在里面,用于汇总显示资源计量数据


资源池


  1. 创建资源池后可以通过资源计量汇总显示某个资源池的整体使用情况

  2. 用户自定义创建的池将会以根资源池的子集存在,但可以有独立的配置

  3. 提供虚拟交换机资源池的冗余及负载均衡,实现虚拟机接入资源池,而非单个虚拟交换机,单个虚拟交换机故障,不会影响虚拟机通信

  4. 虚拟交换机资源池可以实现跨主机,如果不同主机资源池名称一致,则可以执行迁移

  5. 默认情况下虚拟机属于根资源池,如果需要加入自定义资源池需关机后加入

  6. 同一主机不同资源类型资源池名称可以一致

  7. 针对于VHD资源池可以通过在不同主机创建不同路径,但相同名称的VHD资源池,以实现虚拟机迁移过去自动更新存储路径


资源计量,资源池,与WSFC的整合


基础打好后接下来该来到我们的主戏了,如果这两项功能和群集在一起会怎么样?


事实上老王相信如果企业部署了多台虚拟化主机,则一定会考虑部署高可用群集,以实现业务连续性,避免单机故障影响上面的虚拟机,那么如果这时候如果我们需要资源计量应该如何去使用,恰好,群集虚拟机配置文件是存放共享区域,而我们虚拟机资源计量的数据也是存在虚拟机配置文件,因此对于一个群集的虚拟机,我们仅需要在群集层面开启资源计量,不论虚拟机迁移到任何一个节点,都不会影响到资源计量,针对于资源计量的层面也从单机上升至整个群集


实验环境介绍


AD&北京ISCSI

Lan:10.0.0.2 255.0.0.0

ISCSI:30.0.0.2 255.0.0.0

 

12HV01

MGMT: 10.0.0.50 255.0.0.0 DNS 10.0.0.2

ISCSI:30.0.0.50 255.0.0.0

Heart:18.0.0.50 255.0.0.0


12HV02

MGMT: 10.0.0.51 255.0.0.0 DNS 10.0.0.100

ISCSI:30.0.0.51 255.0.0.0

Heart:18.0.0.51 255.0.0.0


当前群集承载虚拟机三台,虚拟机处于关机状态,本文使用12R2群集为例,该功能在16上面并无变化


2018-01-11_131152.png


实验1.演示群集下开启管理资源计量


群集本身并没有提供资源计量的功能,老王这里找到一个通过Powershell function实现的方法,下载地址如下 

ClusterResourcePoolFunctions.PS1

打开之后可以在ISE中看到function的实现,加载function后才可以使用ClusterResourcePool命令

2018-01-11_132612.png

#获取群集计量状态

Get-ClusterResourcePool -Cluster hvcluster

2018-01-11_132948.png

#开启群集虚拟机资源计量

这里我们可以通过VMFilter配合命令来控制资源计量,例如我们可以针对于虚拟机以国家,部门,用途命名,开启资源计量仅针对一个命名范围内开启

Enable-ClusterResourcePoolVM -Cluster hvcluster -VMFilter OGIT*

2018-01-11_134352.png

#开启虚拟机

Start-VM -ComputerName 12HV01 -Name OGIT-SPDB

2018-01-11_134614.png

#获取群集资源池计量状态,可以看到当前部分已经为True,所有资源属于根存储池,由根资源池负责汇总数据

2018-01-11_134906.png

#获取群集资源计量报告

Measure-ClusterResourcePoolVM -Cluster hvcluster -VMFilter OGIT*

这里我们同样可以利用VMFilter命令仅获取群集某一个逻辑范围内的计量数据,可以看到这里只有SPDB的数据,因为开启资源计量后其它虚拟机还没开机过一次,一旦其它虚拟机开机后也会产生数据

2018-01-11_135040.png

如果我们在命令后面加上format-list参数,则可以显示出资源计量所收集的所有数据,可以看到,由于我们使用了function,因此会显示出群集所有节点开启资源计量虚拟机的数据

2018-01-11_135250.png

2018-01-11_135300.png


实验2.演示群集下创建资源池,以配合资源计量使用


#创建群集资源池

New-ClusterResourcePool -Cluster hvcluster -ResourcePool OGITPOOL

2018-01-11_141216.png


#获取虚拟机所属资源池状态

Get-ClusterResourcePoolVM -Cluster hvcluster -VMFilter OGIT* | Format-Table 

2018-01-11_141716.png

#设置虚拟机资源池为新创建群集资源池,需在虚拟机关机状态下执行

Set-ClusterResourcePoolVM -Cluster hvcluster -ResourcePool OGITPOOL -VMFilter OGIT*

2018-01-11_145803.png

#再次获取群集虚拟机资源池状态

Get-ClusterResourcePoolVM -Cluster hvcluster -VMFilter OGIT* | Format-Table 

2018-01-11_142305.png

#开启资源池内范围内虚拟机

Start-VM -ComputerName (Get-ClusterNode -Cluster hvcluster).name -Name OGIT* 

2018-01-11_142537.png

#获取群集资源池资源计量报告,现在我们可以通过资源池来汇总显示群集里面一定范围内虚拟机的计量数据,如果群集各节点中有很多虚拟机,现在我们可以通过这种方式汇总出来我们需要的计量数据

Measure-ClusterResourcePool -Cluster hvcluster -poolname -OGITPOOL

2018-01-11_142807.png


实验3. 重置虚拟机,资源池资源计量数据


#关闭资源池范围内虚拟机,事实上如果不关机也可以执行重置操作,但是在线重置之后数据会立刻增加,如果为了重新初始化数据,建议还是关机执行操作

Stop-VM -ComputerName (Get-ClusterNode -Cluster hvcluster).name -Name OGIT*

2018-01-11_145101.png

#获取群集资源池计量报告

measure-ClusterResourcePoolVM -Cluster hvcluster -VMFilter OGIT*

2018-01-11_145230.png

#重置单台虚拟机计量数据

Reset-ClusterResourcePoolVM -Cluster hvcluster -VMFilter OGIT-SPDB

2018-01-11_145442.png

#重置整个群集资源池计量数据,重置完成后再次开机时虚拟机将重新计量

Reset-ClusterResourcePool -Cluster hvcluster -ResourcePool OGITPOOL

2018-01-11_145557.png


实验4.关闭群集虚拟机资源计量,群集资源池


#将虚拟机从自定义资源池移除,返回根资源池(需在虚拟机关机状态下执行)

Set-ClusterResourcePoolVM -Cluster hvcluster -ResourcePool "Primordial" -VMFilter OGIT*  

2018-01-11_160244.png


#关闭群集虚拟机资源计量

Disable-ClusterResourcePoolVM -Cluster hvcluster -VMFilter OGIT*

2018-01-11_160344.png


#删除自定义资源池(需确保资源池下无内容后执行)

Remove-ClusterResourcePool -Cluster hvcluster -ResourcePool OGITPOOL

2018-01-11_160515.png


#获取群集虚拟机计量开启状态

Get-ClusterResourcePool -Cluster hvcluster

2018-01-11_160708.png


#获取虚拟机资源池状态

Get-ClusterResourcePoolVM -Cluster hvcluster -VMFilter OGIT*| Format-Table * -AutoSize

2018-01-11_160917.png


参考链接:http://www.hypervrockstar.com/dd_resource-metering/


到这里我们完成了本章的全部实验,通过老王的介绍相信大家对于资源计量,资源池,以及与群集的配合会有新的思考,严格来说这是三个不同的功能,但是结合在一起就能发挥出更好的效果,资源计量可以针对于单机,主机全部,群集,资源池虚拟机进行使用计量,资源池可以针对虚拟资源进行汇总分析,实现冗余和负载均衡,配合群集,可以实现资源计量群集里面的指定范围虚拟机,通过资源池汇总群集里面指定范围虚拟机的计量,希望未来这项功能可以越来越实用,有更多的场景可以用上,希望看到的朋友都能有自己的收获