存储虚拟化技术其实不是一个新东西,在很早以前就有了存储虚拟化技术。技术发展到今天,在存储虚拟化技术之上又诞生了其他很多新的概念和技术。记得在2006年的时候,我们实验室在做一个非常宏大的项目叫VSDS,这个项目就是一个典型的存储虚拟化项目。

 

在这个项目中,采用了大量的存储虚拟化技术。首先将磁盘进行虚拟化,通过池化的方式将所有磁盘存储资源进行管理,然后再将磁盘存储池中的资源分配给系统中的存储卷。形成存储卷资源的动态分配。这个概念在当时是非常前卫的,和LVM卷管理系统有着截然不同的存储资源管理效果。在一个存储节点中会生成很多存储卷,多个存储节点中的存储卷资源在系统层级别再次形成一个分布式的存储池,该分布式存储池中的资源再动态分配给用户可见的逻辑卷。所以,VSDS本质上是一个分布式的集群SAN系统,在节点内部的卷级以及节点之间都采用了存储虚拟化技术。在当年这套系统所采用的技术是非常前沿的,即使在今天也是非常有价值的一套分布式SAN存储系统。

 

存储虚拟化技术是大家经常提及的东西,到底在存储系统中,该技术会出现在哪些层面,并且会封装成什么用户特性?用户又从该类技术中如何受益呢?存储老吴给大家剖析一下,不到之处敬请指出。

 

从整个存储系统的层次结构上来,如下图所示,存储虚拟化技术通常分成如下三大类:

  1. SAN虚拟化技术。这种技术我们也可以称之为节点间的虚拟化技术。

  2. 卷级虚拟化技术。这类技术主要在卷管理层面上使用虚拟化技术。

  3. 底层虚拟化技术。主要在RAID数据保护层使用虚拟化技术


说说存储虚拟化技术(1 )_第1张图片


我们首先谈谈底层虚拟化技术。底层虚拟化技术使用时间并不是很长,也就在2012前后,很多存储厂商开始发布采用这种技术做成的数据保护系统,用来替代传统RAID,解决传统RAID在数据重构过程中时间过长的问题。采用这种技术的厂商有NetAppDDP系统、华为的RAID2.0等。将存储虚拟化技术引入到RAID系统中,最核心的一个想法是打破传统RAID数据布局上整齐划一的特性,从而可以破解数据重构过程中读写性能的瓶颈点。

 

底层虚拟化技术在应用的过程中,解决了RAID所面临的一些问题,但同时也引入了其他很多问题,例如,虚拟化过程中资源分配是存在局限的,在同一个数据保护域内的数据不能被分配到相同的磁盘上。由于这个局限性,就会导致在存储资源不平衡前提下,即使存在存储资源都无法实现分配的情况。所以,当资源不平衡的时候,需要通过数据迁移的方式实现资源平衡。所以,底层虚拟化技术引入的数据迁移会导致应用性能下降。另一个比较重要的问题是虚拟化技术导致磁盘抖动,从而当磁盘数量较少情况下,数据重构性能反而低于传统RAID的数据重构性能。传统RAID在数据重构的过程中,如果没有应用IO的情况下,读写IO是完全分离的,因此,所有盘都能运行在最高带宽模式下。引入底层虚拟化技术之后,在数据重构过程中,所有盘上都存在读写操作,并且读写之间地址都是离散的,因此每块盘都运行在随机访问模式下,每块盘的性能都会变成原来的一半,甚至更低。所以,当磁盘数量不够多时,这种虚拟化技术所引入的损耗起了主导作用,总体性能低于传统RAID。下图引入底层虚拟化技术之后磁盘数据重构性能表现:


说说存储虚拟化技术(1 )_第2张图片


从上面的数据我们可以看出,当磁盘数量达到一定时,采用底层虚拟化技术之后的数据重构性能会随着磁盘数量的增加而线性增加(DiskPool曲线)。而采用传统RAID,其数据重构性能和磁盘的数量是无关的。

 

总体而言,底层存储虚拟化技术改造了存储数据的分布,提升系统数据保护的能力。但同时该技术的应用也是有条件的,不是在任何情况下都可以使用的。在华为的存储系统中,该类技术被称之为RAID2.0,在OceanStore9000集群NAS系统、OceanStore18000系统中得到了应用。在国外厂商中,和该类技术类似有IBM GPFS中的Declustered RAIDHP 3PAR存储系统中的VRAIDNetApp盘阵中所采用的DDP技术都具有类似的结构。由于底层虚拟化技术核心点是资源分配器,所以虽然这些系统都具备相同的结构,都具有资源池化的能力和思想,但是,资源池中的资源分配器算法各家肯定是不相同的,而这种资源分配器算法影响了数据在存储资源中的分布,影响到数据重构、应用性能和数据可靠性,是整个系统的核心所在。所以,当看到一个产品中提到采用存储池技术,就认为是RAID2.0,那是错误的想法。底层虚拟化技术在RAID中应用,已经将RAID技术向卷管理、文件系统方向发展了,RAID技术复杂度提升了。存储池不是该类技术的本质特征,只是外在表现,重要的是内部的资源分配器算法及策略。

 

(夜已深,今天写到这里吧,明天继续探讨存储虚拟化技术)