存储空间存储分层

在谈到存储分层之前,我们需要了解Windows Server存储空间里面包含了多少层以及如何定义每一个分层。基于读写性能快慢的相对值,存储空间分为两个数据存储层,一个存储层为快速层,通常由SSD硬盘提供,用于存储热数据,也即经常访问的数据;另一个存储层为慢速层,通常由HDD硬盘提供,用于存储冷数据,也即不经常访问的数据。默认情况下,存储空间具有这两个存储速率不同的存储层的虚拟磁盘,存储分层目的在于平衡 SSD性能和硬盘驱动器 (HDD)容量。在存储层都有可用空间时,新的数据通常往慢速层写入,然后存储空间将会根据访问数据的频率,以透明方式在两个层之间移动子文件级的数据。存储层可以通过将最常用的热数据移到SSD存储来满足热数据的性能要求,将冷数据移动到HDD层来满足普通数据的容量要求。存储分层工作原理如图1所示。        

wKioL1jPl4uzl2ftAAv8g9Hdnjo674.jpg-wh_50                   

1存储空间分层技术

存储控制器服务器操作系统Windows Server 2012和Windows 8及后续版本内置了存储分层管理服务(Storage Tiers Management Service),该服务在安装Windows Server文件服务器角色后被激活处于运行状态。存储分层管理服务可以自动计算数据热度并按照默认策略在每天晚上1点启动冷热数据移动。要观察存储分层任务和行为,可以登录存储控制器服务器,打开服务器的控制面板里找到计划任务程序,在计划任务程序里依次展开“计划任务程序”—“Microsoft”—“Windows”下找到名为“Storage TiersManagement”的项目,打开Storage Tiers Optimization 属性,在触发器选项卡里我们就能看到存储分层管理服务在每天凌晨1点触发冷热数据迁移的计划任务,如图2所示。这个默认设置不是一成不变的,可按照需求和实际情况修改触发分层任务的时间。 

wKioL1jPl4yQEO-sAABlFfj_khE674.jpg-wh_50

2存储空间自动分层任务

       除了修改分层操作任务的触发时间,还可以不依赖计划任务程序完成存储分层。为了找到Storage Tiers Management Service如何实现存储分层,我们可以从预置的计划任务里找到分层操作相关的命令和参数。点击Storage Tiers Optimization 属性窗口的操作选项卡,在详细信息栏可看到Storage Tiers Management Service所执行的具体任务和相关参数,事实上存储分层使用defrage命令和-c -h -g -#这4个参数完成,如图3所示。

wKiom1jPl46hKwKUAABMMRI_vsI814.jpg-wh_50

3存储空间分层调度操作

       获取到分层存储命令及参数后,我们就可以使用命令手动触发冷热数据迁移了,只要在命令提示符里输入C:\ Windows\system32\defrag.exe-c -h -g -#即可。

如果熟悉Windows里磁盘优化(碎片整理)会发现做存储分层移动的命令和磁盘碎片整理的命令一样,只是参数不同。在Windows Server 2012/Windows 8之前的版本里微软并没有引入存储空间,也没有存储分层这个技术,所以使用defrag.exe /? 命令获取帮助后,在Windows Server2012 R2/Windows 8.1系统里面会多出-g这个参数。这个参数非常重要,其意义意义在于优化存储层,按照数据热度为数据找到合适的存储层。

需要强调的是,存储分层基于数据的粒度而非文件的粒度,存储分层服务按照1MB的单位分析和移动数据。如果文件大于1MB,而且只有部分“热”数据,那么一个文件只有一定比例的数据会被移动到SSD层,比如有一个虚机虚拟磁盘上面的数据只有20%热数据,只有这20%的数据会被移动到SSD分区,而不会把整个虚拟磁盘文件移动到SSD分区。举个实际的例子,一台虚机的VHDX大小一共100GB,里面安装了SQL Server 实例,在实例下20GB的数据库和日志文件用于交易系统,该交易系统每天产生过万条交易,那么这20GB的数据将会移动到SSD分区,而剩余的80GB系统文件和其他文件的数据则不一定会移动到SSD分区。至于存储空间如何进行数据热度计算,请参考另外一篇博客《Windows Server 软件定义存储存储空间IO的分发》http://ichbinleo.blog.51cto.com/11948851/1900880 。

存储分层是后台自动运行数据迁移的过程,如果某些特定的虚机需要持续运行在高速的SSD层,或者对性能要求不高的虚机需要固定在大容量的HDD层来为其他虚机提供更多的快速SSD层,则可以考虑使用固定命令将该文件固定到某个磁盘层。固定和分层不同的是分层是数据级别操作的,而固定是文件级别操作的。比如要将\\FileServer\Share\VM01.VHDX固定在SSD层,按照如下步骤完成:

1) 运行PS C:\>Get-StorageTier|ft FriendlyName PowerShell命令获取已有分层友好名。

2)返回如下结果,根据MediaType选择类型为SSD的层

FriendlyName      MediaType    
------------      ---------      
SSDTier           SSD      
HDDTier           HDD

(3)运行以下示例命令将VM01的虚拟磁盘固定到SSD层,使用Clear-FileStorageTier解除将文件固定到某一层

PS  C:\> Set-FileStorageTier -FilePath "\\FileServer\Share\VM01.VHDX  " -DesiredStorageTierFriendlyName  "SSDTier" SSD

运行固定文件的命令,存储不会立刻将文件数据移动到指定的分层,而是等待下一次磁盘分层优化运行任务开始才开始,如果等不及,那么就按上面提到的方法,在计划任务程序、命令提示符或者PowerShell里手动触发数据移动操作。

 

存储空间缓存管理

在传统存储中,存储包含了读缓存命中和写缓存,写缓存又分为回写(Write-back)和透写(Write-through)缓存,在缓存机制中还具备缓存镜像和缓存保管等技术防止掉电等故障造成缓存数据的丢失。在Windows Server SDS里我们同样具备相似的缓存技术,我们先看看Windows Server SDS的回写缓存。

 

回写缓存

应用通常都是以小数据随机写入到存储,作为SSD硬盘重要属性,回写缓存可以将小的随机写入缓存到SSD硬盘避免发生过多次数的磁盘写入I/O。从Windows Server 2012 R2 开始,存储空间支持创建回写式缓存,缓存使用池中SSD上的少量空间来缓冲小规模随机写入操作并减小对其他并行的数据写入的影响,并通过降低随机写入的延迟来提高存储的写入性能。常见的工作负载随机写入操作将定向到 SSD缓存,稍后再写入 HDD。回写缓存另外的用途在于对数据进行掉电保护。存储空间如果存在SSD硬盘,虚拟磁盘会默认创建大小为1GB的回写缓存空间,如图4所示。

回写缓存对管理员来说是透明的,存储空间在有足够数量的SSD的前提下,新建虚拟磁盘的同时将创建好回写缓存。磁盘布局和对SSD数量要求说明如下:

  • 简单布局要求具有一块SSD硬盘;

  • 双重镜像和单奇偶校验要求具有两块SSD硬盘;

  • 三重镜像和双奇偶校验要求具有三块SSD硬盘。

wKiom1jPl47iKLEfAAAVArhMa8g190.jpg-wh_50

4回写缓存

Journal

我们在设置硬盘用途的时候硬盘的Usage参数里有个Journal值,Journal(暂无信达雅的中文翻译)和回写缓存有着类似的作用,都是负责处理重新组织路径上活动的I/O,但是在存储空间里,二者的作用和设置有明显的区别。Journal只能用于奇偶校验布局的存储空间,回写缓存适用于所有的存储空间布局,并能支持分层存储。我们可以为奇偶校验的存储空间设置专用的Journal硬盘,通常使用快速的SSD硬盘,配置了专用Journal硬盘的奇偶校验存储空间能很大程度上提高存储写入性能,尤其是顺序写入的时候,此外,使用两块以上的Journal硬盘可以实现自身的镜像保证I/O的冗余。