如何使用qos管理分配存储iops

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用qos管理分配存储iops相关的知识,希望对你有一定的参考价值。

参考技术A 尽管任何硬件资源都有可能成为影响虚拟机性能的瓶颈,但存储IOPS往往是限制因素之一。因为存储IOPS往往供不应求,所以虚拟化厂商提供了允许管理员限制虚拟机存储I/O消耗的功能。然而高效率地使用上述功能的关键是了解存储IOPS当前是如何在虚拟机之间分配的。
  每个hypervisor厂商都有各自的测量并分配存储IOPS的方式。以微软Hyper-V为例,调节存储IOPS消耗的主要机制借助于QoS管理功能,该功能往往被称为存储QoS。
  使用QoS管理
  QoS管理设置基于单块虚拟硬盘。如图A所示,该功能可以被用于限制虚拟机消耗更少的存储IOPS。作为一个替代方案,QoS管理可以被用于为虚拟机预留存储IOPS,这样就可以保证虚拟机能够获得的最小IOPS值——如果有更多可用的IOPS,那么虚拟机能够使用的IOPS将相应增加。
  图A. 虚拟硬盘QoS管理配置界面
  QoS管理功能允许管理员基于单块虚拟硬盘预留存储IOPS或者对其进行限制。
  尽管QoS管理功能很便利,但只有管理员知道可用的存储IOPS有多少以及当前使用情况时,该功能才能够派上用场。不幸的是,Hyper-V Manager并没有提供该信息,但可以使用PowerShell检索与Hyper-V相关的存储性能信息。
  虚拟机指标追踪
  PowerShell提供了一个名为Measure-VM的cmdlet,使你能够追踪各类虚拟机指标。在能够使用该cmdlet前,需要启用虚拟机的资源消耗计量。输入如下命令可以启用运行在当前Hyper-V服务器上所有虚拟机的资源消耗计量:Get-VM | Enable-VMResourceMetering
  输入如下命令可以确认是否已经启用了虚拟机的资源消耗计量:
  Get-VM | Select-Object Name, ResourceMeteringEnabled
  启用虚拟机的资源消耗计量并且生成了一些计量数据后,你可以使用Measure-VM cmdlet显示虚拟机的资源使用情况。例如,如果你想针对所有虚拟机使用默认的资源计量数据,可以输入如下命令:
  Get-VM | Measure-VM
  图B显示了启用虚拟机计量、确认虚拟机计量以及用以及显示默认计量数据的过程。
  图B:你可以使用Measure-VM cmdlet显示虚拟机计量数据
  如上图所示,资源计量机制运转良好,显示值为零表明虚拟机未启动。然而问题是并没有显示与存储IOPS相关的信息。
  显示IOPS数据
  尽管Measure-VM cmdlet默认没有显示存储IOPS数据,但可以做到。实际上,cmdlet可以显示每台虚拟机的IOPS平均值、平均延迟情况、磁盘数据写入以及磁盘数据读取情况。
  只需要在Measure-VM cmdlet后追加 Select-Object参数就可以显示上述数据,然后指定你想显示的指标即可。然而,务必牢记在生产环境中虚拟机往往位于使用共享存储的故障切换集群中。因此全面获取IOPS数据的唯一方式是查看所有服务器上的所有虚拟机。可以尝试利用如下命令创建一个简单的脚本:
  $Servers = "Hyper-V-4", "Prod1"
  ForEach ($Server in $Servers)
  $VMs = Get-VM
  ForEach ($VM in $VMs)
  $VM | Measure-VM | Select-Object VMName, ComputerName, AggregatedAverageNormalizedIOPS, AggregatedAverageLatency, AggregatedDiskDataRead, AggregatedDiskDataWritten | Format-List
  
  
  脚本的第一行列出了将要被监控的每台Hyper-V主机的名字。简单起见,这里只列出了两台服务器,但你通常要输入所有Hyper-V服务器的名字。该脚本使用循环检查所有的服务器,每次检查一台。然后嵌套循环检索并显示当前服务器上所有虚拟机的性能数据。你可以看到图C中脚本的部分输出结果。脚本列出了每台虚拟机的性能数据、虚拟机名以及虚拟机当前所在的主机服务器。
  图C. 脚本显示虚拟机的存储性能数据
  Hypervisor功能,比如QoS管理有助于分配存储IOPS。然而为了高效率地使用该功能,你需要知道IOPS目前的使用情况。

Windows Server 2016软件定义存储之QoS


 存储QoS简介

Windows Server 2016文件服务器和Hyper-V群集默认集成了存储QoS功能,基于群集存储空间的存储无论是SOFS SMB共享还是CSV都支持存储QoS,存储QoS通过策略应用到Hyper-V群集上的虚机。文件服务器群集里默认开启QoS策略管理器,用于集中监视存储性能,保存在SMB或者CSVHyper-V虚机被策略管理器监视着。策略管理器和Hyper-V服务器形成一个存储QoS策略优化的闭环来反馈调节QoS,策略管理器保持着和Hyper-V沟通存储QoS策略、限制及保留信息,Hyper-V按照QoS策略缩放虚机VHDX的存储性能。如果存储QoS策略有更新的时候,策略管理器指挥Hyper-V对虚机虚拟硬盘QoS进行调整。存储QoS策略优化的闭环保证所有虚机的虚机硬盘遵循存储QoS策略,如图1所示。

技术分享

1 存储QoS逻辑结构图

 

设置存储QoS

Windows Server 2016 故障转移群集配置了CSV后,存储QoS功能自动启动,无需额外配置。在群集里添加可用的磁盘为CSV后,存储QoS资源便会在群集核心资源里显示。可以通过故障转移群集管理器或者PowerShell查看存储QoS资源。同样,Windows Server 2016 启用Hyper-V角色以后也会自动启动存储QoS功能,如图2所示。

技术分享 

2 Windows Server 2016群集存储QoS资源

 

检索文件流和卷的存储QoS

我们已经配置好S2D和超融合结构,在其CSV里存储着若干运行着的虚机,可使用PowerShell命令查看所有虚机文件流的IOPS和带宽情况,如下示例所示。

PS C:\>  Get-StorageQoSflow |Sort-Object InitiatorName | ft InitiatorName,MinimumIOPs,MaximumIOPs,StorageNodeIOPs,@{Expression={$_.FilePath.Substring($_.FilePath.LastIndexOf(‘\’)+1)};Label=”File”}  -AutoSize      
InitiatorName    MinimumIops    MaximumIops    StorageNodeIOPs    File    
------------     ----------     ----------     ---------------    ----    
SQL14        0         0         1           sql14.vhdx    
VMM16        0         0         3           vmm16.vhdx     
WS16-VM01      0         0         1           WS16-VM01.vhdx    
WS16-VM02      0         0         1           WS16-VM02.vhdx

除了可以查看虚机级别的QoS流的情况外,还可以查看卷(这里指的是群集共享卷)级别的QoS信息,使用PowerShell命令Get-StorageQoSVolume检索CSV QoS配置情况,如下示例所示。 

PS C:\> Get-StorageQoSVolume |fl      
Bandwidth          : 0    
BandwidthLimit       : 0    
Interval          : 300000    
IOPS            : 0    
Latency           : 0    
Limit            : 0    
Mountpoint          : C:\ClusterStorage\Volume1\    
Reservation         : 0    
Status           : Ok    
TimeStamp          : 8/5/2016 5:14:23 PM    
VolumeId          : 2406be47-4757-4b75-a193-c874b69c0e8c    
MaximumIops         : 0    
MinimumIops         : 0


创建存储QoS策略

       在规划好虚机QoS策略类型和QoS策略具体参数后,第一步先创建存储QoS策略,可以使用PowerShell命令New-StorageQoSPolicy设置专有和共享QoS策略。我们先创建一个名为HighPerf的专有QoS策略,最小IOPS设置为200,最大为800,不设置吞吐带宽。

PS C:\> New-StorageQosPolicy -Name  HighPerf -PolicyType Dedicated -MinimumIops 200 -MaximumIops 800

使用PowerShell命令Get-StorageQoSPolicy获取QoS策略,如下示例所示。

PS C:\> Get-StorageQosPolicy     
Name     MinimumIops    MaximumIops    MaximumBandwidth    Status    
----     ----------     ----------     ---------------     ------    
Default    0         0         0 MB/s         OK    
HighPerf   200        800        0 MB/s         OK

接着创建一个名为MediumPerf的共享QoS策略,设置最小IOPS100,最大为400,不设置吞吐带宽。

PS C:\> New-StorageQosPolicy -Name  MediumPerf -PolicyType Aggregated -MinimumIops 100 -MaximumIops 400

到此我们已经创建了两个不同大小的存储QoS策略,如下示例所示。

PS C:\> Get-StorageQosPolicy     
Name        MinimumIops      MaximumIops      MaximumBandwidth      Status    
----        ----------       ----------       ---------------       ------    
Default       0           0           0 MB/s            OK     
MediumPerf     100          400          0 MB/s            OK    
HighPerf      200          800          0 MB/s            OK

接下来我们将选取两台虚机分配存储QoS策略,一台虚机只有一个VHDX文件,这台虚机需要IOPS;另外一台虚机有三个VHDX文件,这台虚机只需要中等IOPS,而且三个VHDX共享一个存储QoS策略。

 

分配存储QoS策略

首先将名为HighPerf的专有策略分配给一台SQL Server虚机,使用PowerShell命令进行分配即可。在分配之前需要使用如下命令定义变量并获取存储QoS策略的ID,存储QoS策略ID将在分配QoS策略时作为QoSPolicyID要赋予的值。

PS C:\> $HighPerfQoS=Get-StorageQoSPolicy | ? Name -eq HighPerf
PS C:\> $HighPerfQoS.PolicyId
 
Guid
----
6b56f995-08d1-4bb0-9eaa-96f6de29a2ab

使用PowerShell命令将策略应用到选择的SQL Server虚机,QoSPolicyID这个参数后接名为HighPerfQoS策略ID

PS C:\> Get-VM -Name SQL14 | Get-VMHardDiskDrive | Set-VMHardDiskDrive -QoSPolicyID  6b56f995-08d1-4bb0-9eaa-96f6de29a2ab

  分配完毕,打开分配了QoS策略的虚机的设置窗口。大家会发现,我们以往在Hyper-V虚机设置窗口里直接对VHDX虚拟硬盘进行IOPS的最大最小值进行设置,但是应用了QoS策略的VHDX虚拟硬盘并没有显示QoS策略所定义的IOPS最大及最小值,取而代之的是QoS策略ID,如图3 所示。

技术分享 

3 查看虚机分配的QoS策略ID

       虽然在设置窗口看不到直观的IOPS值,但是要查看虚机分配QoS策略之后是否生效以及生效后虚机磁盘QoS值,可以运行Get-StorageQoSflow命令查看,示例命令和结果如下。

PS C:\> Get-StorageQoSflow |Sort-Object InitiatorName | ft InitiatorName,MinimumIOPs,MaximumIOPs,StorageNodeIOPs,@{Expression={$_.FilePath.Substring($_.FilePath.LastIndexOf(‘\’)+1)};Label=”File”}  -AutoSize      
InitiatorName    MinimumIops    MaximumIops    StorageNodeIOPs    File    
------------     ----------     ----------     ---------------    ----    
SQL14        200         800        0           sql14.vhdx    
VMM16        0         0         0           vmm16.vhdx    
WS16-VM01      0         0         1           WS16-VM01.vhdx    
WS16-VM02      0         0         1           WS16-VM02.vhdx

接着将名为MediumPerf的共享QoS策略分配给一台具有三块VHDX虚拟磁盘的虚机,同样使用PowerShell命令进行。在分配之前需要定义变量获取存储QoS策略的ID,如下示例所示,存储QoS策略ID将在分配QoS策略时作为QoSPolicyID后接参数值使用。

PS C:\> $MediumPerf=Get-StorageQoSPolicy | ? Name -eq MediumPerf
PS C:\> $MediumPerf.PolicyId
 
Guid
----
c0cea944-981e-445e-ad20-d6a33d294fb7

使用PowerShell命令将策略用应用到选择的虚机,QoSPolicyID这个参数后接名为MediumPerf QoS策略ID

PS C:\>Get-VM -Name  WS16-VM01 | Get-VMHardDiskDrive | Set-VMHardDiskDrive –QoSPolicyID  c0cea944-981e-445e-ad20-d6a33d294fb7

分配完毕,打开分配了QoS策略的虚机的设置窗口,和专有QoS策略一样,应用了QoS策略的VHDX虚拟硬盘并没有显示QoS策略所定义的IOPS最大及最小值,取而代之的是QoS策略ID,如图4所示。

 技术分享

4查看虚机分配的QoS策略ID

要查看虚机分配QoS策略之后是否生效以及生效后虚机磁盘QoS值,可以运行Get-StorageQoSflow命令查看。在查询结果中,可以看到具有三个VHDX文件的虚机应用了一个最小100,最大400QoS策略,那么每个VHDXIOPS最小为100/3取整,最大为400/3取整,如下示例所示。

PS C:\> Get-StorageQoSflow  |Sort-Object InitiatorName | ft InitiatorName,MinimumIOPs,MaximumIOPs,StorageNodeIOPs,@{Expression={$_.FilePath.Substring($_.FilePath.LastIndexOf(‘\’)+1)};Label=”File”}  -AutoSize      
InitiatorName    MinimumIops    MaximumIops    StorageNodeIOPs    File    
------------     ----------    ----------     ---------------    ----    
SQL14        200        800        0           sql14.vhdx    
VMM16        0         0         7           vmm16.vhdx    
WS16-VM01      33         133        0           WS16-VM01.vhdx    
WS16-VM01      33         133        0           DATADisk01.vhdx    
WS16-VM01      33         133        0           DATADisk02.vhdx    
WS16-VM02      0         0         0           WS16-VM02.vhdx

存储QoS策略的重设

       我们经常需要按照环境的变化对策略做对相应的调整,存储QoS也不会例外,比如某些应用应为访问量和数量增大时,对存储的读写速度提出了更高的要求。如果虚机的虚拟硬盘已经应用了存储QoS策略,那么我们不需要重新创建存储QoS策略分配给虚机的虚拟磁盘,而是在线调整已有的QoS策略,虚机虚拟硬盘的QoS策略会在线同步更新。接下来我们找一个之前应用到虚机的名为HighPerf的存储QoS策略,将IOPS值最小和最大值分别从200800调整到5001000。先使用如下PowerShell命令Set-StorageQosPolicy完成QoS策略变更,然后使用Get-StorageQosPolicy查询QoS策略修改结果,结果应如下示例所示。

PS C:\> Get-StorageQosPolicy  -Name HighPerf | Set-StorageQosPolicy -MinimumIOPS 500 -MaximumIops 1000 PS C:\> Get-StorageQosPolicy     

Name      MinimumIops    MaximumIops       MaximumBandwidth    Status    
----      ----------     ----------       ---------------     ------    
Default     0         0           0 MB/s         OK    
MediumPerf    100        400          0 MB/s         OK    
HighPerf    500        1000          0 MB/s         OK    
LowPerf     50         200          0 MB/s         OK

         调整完毕,不需要再次应用QoS策略到虚机,虚机虚拟磁盘会自动更新策略。使用PowerShell命令可查看到应用了名为HighPerf存储QoS策略的SQL Server虚机虚拟硬盘更新后的IOPS QoS信息,如下示例命令所示。

PS C:\> Get-StorageQoSflow |Sort-Object  InitiatorName | ft InitiatorName,MinimumIOPs,MaximumIOPs,StorageNodeIOPs,@{Expression={$_.FilePath.Substring($_.FilePath.LastIndexOf(‘\‘)+1)};Label="File"}  -AutoSize      

InitiatorName    MinimumIops    MaximumIops    StorageNodeIOPs    File    
------------     ----------     ----------     ---------------    ----    
SQL14        500        1000        0           sql14.vhdx    
VMM16        50         200         7           vmm16.vhdx    
WS16-VM01      33         133         0           WS16-VM01.vhdx    
WS16-VM01      33         133        0           DATADisk01.vhdx    
WS16-VM01      33         133        0           DATADisk02.vhdx    
WS16-VM02      0         0         0           WS16-VM02.vhdx

 

 


本文出自 “黄利军的博客” 博客,转载请与作者联系!

以上是关于如何使用qos管理分配存储iops的主要内容,如果未能解决你的问题,请参考以下文章

科技放大镜分布式存储如何向“云”而生?

Windows Server 2016软件定义存储之QoS

RDS 实例使用的 EBS 卷

如何把分布式存储的IO性能提升5倍?这里有一份技术秘籍

Azure虚拟机的磁盘管理

电信5M光纤,路由器Netcore NR235,10-15人使用,如何设置Qos主机带宽限制的上传速度和下载速度?