磁盘阵列是最常用的存储设备,从最简单的单控磁盘阵列到复杂的矩阵交换结构的多控阵列,可以满足不同级别的应用需求。单控磁盘阵列组成比较简单,其核心是一个RAID控制器,一个机柜中可以配置十多块磁盘,通过RAID控制器实现RAID功能。这种磁盘阵列通常会支持逻辑卷管理的功能,可以将RAID设备池化,然后根据应用需求导出不同的LUN设备。在导出协议这一块,通常会采用ISCSI协议,满足低端IPSAN的应用需求。
单控磁盘阵列的最大优势是成本低,但是可靠性比较差。RAID控制器出现问题时,无法提供持续存储服务。为此,在单控的基础上发展成双控磁盘阵列。双控磁盘阵列可以分为Active-Standby,Active-Active工作模式,前者工作模式比较简单,Standby的控制器需要对Active控制器进行心跳监测,一旦发现Active控制器出现问题时,可以接替该控制器的角色,继续为用户提供存储服务。Active-Standby增强了系统可用性,但是,没有因此带来吞吐量的提升。Active-Active不仅增强系统可用性,而且提升了存储系统性能。在实现上,后者复杂了很多,不仅要解决存储共享的问题,而且需要两个控制器进行内存同步。为了解决控制器间高效内存同步的问题,可以采用PCI-Express的非透明桥技术。
通常我们看到的IPSAN磁盘阵列就是一个Box,存储容量是有限的,在面向中端用户的应用中,需要容量和性能更高的存储设备。为此,出现了一个机头带一堆盘柜的存储设备,该类设备的结构如下图所示:
机头通过multipath的方式连接所有盘柜,所有盘柜通过环形连接的方式串联起来。这种系统连接方式比较简单,带来的问题是盘柜数量会影响系统IO性能。在老系统中,后端是通过FC总线互连的,在现有的很多系统中都是通过SAS总线进行互连。这种存储系统拥有独立的控制设备,因此具有很强的处理能力,不仅可以实现单个磁盘设备中的RAID,卷管理,而且可以实现存储虚拟化、快照和文件系统等复杂功能。但是,单个控制器容易引入单点故障问题,因此,很多存储设备厂商提供的设备多为双控制节点的架构。如EMC的VNX的存储设备就采用诸如此类的双控架构:
双控多机柜的方式虽然可以满足容量上的需求,但是很难满足一些高性能应用的需求。通过扩展磁盘柜可以实现容量的扩展,但是,系统的导出接口以及后端的盘柜串行结构会是系统的IO性能瓶颈点。为此,双控多机柜的架构很难在高端存储应用得以应用。
为了获取高性能,只有将后端的盘柜串行网络打破,并且采用多控制器的方式,实现整体系统的高性能。CC-NUMA结构是高性能计算中的重要架构,同样在存储领域得到了大量应用。著名的Symetrix DMX和VMAX都是典型的CC-NUMA结构,该类存储系统的结构可以描述如下:
从结构中我们可以看出,该架构的本质是双控或者单控设备的集群,并且通过集群互连总线共享内存,组成NUMA系统,在软件上看到一个统一的内存,简化软件实现。在VMAX设备中,两个控制器构成一个HA对,共享盘柜组,避免了上述示意图中的单点故障问题。所有控制器通过RapidIO总线互连,从而每个控制器都可以快速访问本地内存,而且可以通过RapidIO访问remote内存。VMAX将这种互连总线称之为matrix interface,这种互连方式的最大缺点在于可扩展性比较差,没有办法扩展足够多的节点。VMAX中的两个控制节点的内存结构示意图如下所示:
在存储领域中,HP的3PAR采用和VMAX类似的结构,但是互连总线采用的是PCI-Express。这类系统虽然具有单机很高的性能,但是,很难真正做到Scale out。为了构建更加灵活的存储系统,不仅具有很高的性能,很大的存储容量,而且需要做到极高的可扩展性和高可用性。为此,很多厂商在MPP集群系统的思想指导下,推出了MPP集群存储系统,该类存储系统的体系结构如下所示:
和CC-NUMA体系结构相比,MPP集群不会共享内存,因此,后端网络采用的是交换互连网络。每个控制器和盘柜组构成一个独立的存储节点,所有的存储节点之间通过后端交换互连网络连接在一起,实现集群存储。当系统中的任意节点接收到数据信息之后,都会通过后端网络将这个处理之后的信息进行转存或者进行数据冗余。这种架构最大的好处在于可扩展性强,不受制于matrix interface的限制。最大的劣势在于后端网络往往是系统性能的瓶颈点。在现有产品中,EMC的Isilon就属于这种架构,其后端网络采用Infiniband进行互连,目的就是为了增强后端网络性能。在MPP的架构中,上述示意图将盘柜组和控制器进行了绑定,当然,我们也可以将所有盘柜组和后端互连网络连接在一起,这样可以共享所有盘柜组。IBM的XIV存储系统就是采用的这种架构:
MPP架构在可扩展性和可靠性方面表现非凡,但是对后端网络的设计要求苛刻,通常也是性能的瓶颈点所在。上述很多的存储架构都是在优化控制器和磁盘柜之间的关系,试图通过控制器和磁盘柜的访问并行化来提高性能和可靠性。但是,有没有一种在更高层次既实现简单又能达到相同目的集群架构呢?答案是肯定的,其实在集群文件系统的角度可以比较容易的实现数据存储的集群化。HDFS和国内的蓝鲸文件系统就是采用的这种架构,该架构的示意图如下图所示:
该架构可以被称之为带外模式。设备一共可以分成两大类,一类为存储节点;另一类为元数据服务器。Client想要获取数据的时候首先访问元数据服务器,从而得到访问块所在设备以及具体的位置信息。得到这些元数据之后,数据访问就可以直接在Client和存储设置之间进行了。为了提高性能,元数据访问可以在Client端进行Cache,不能让元数据服务器成为一个系统瓶颈。一旦消除这个瓶颈,这种带外模式效率还是很高的。
本文对当前几种流行的存储架构进行了分析,个人认为在不断追求scale out的今天,软件主导的集群方案将会越来越受到关注和欢迎。