企业级存储基本功能是提供高性能和大容量的存储服务,除此之外,企业级存储还能提供很多其他服务特性。这也是为什么有些企业会花费几百万甚至上千万来购买企业级存储的原因。
企业级存储最为重要的一个特性是数据的可靠性。不同于一般的存储设备(如普通硬盘),企业级存储必须保证超高的可靠性。原因很简单,如果你在银行存了一个亿,那天发现这一个亿变成了一百万,你会是什么心情。所以,对于企业级存储,数据可靠性是首要的。
最早的存储系统其实并不像现在的存储系统那样成百上千块硬盘构成,而是通过一个非常大型的设备来提供高可靠和大容量的存储的。这个可以类比计算领域,目前互联网多采用廉价的服务器集群来提供计算能力,而之前普遍的做法是使用大型机和小型机(其实现在银行等领域仍然在使用大型机和小型机。
比较早的大型存储系统比如IBM的3380(如上图所示),或者Fujitsu的M2361A等。以IBM的3380为例,其单个单元的存储容量可以达到1GB以上。如果拿到今天来看,这个容量简直是太小了,但是要知道同时代主流机械硬盘的容量只有几十MB!
虽然IBM的3380存储系统可以提供大容量、高可靠的存储需求,但是价格却是奇高的。以当时可以提供1.89GB容量的AK4型号为例,其价格达到12.8万美元。而当时消费级的CP3100只有3.5英寸大小,容量可以达到100MB,价格才1000美元。消费级硬盘虽然价格便宜,但是有两个缺点,一个是容量比较小,另外一个是可靠性太低。如下图是两者详细的对比信息。
通过对比价格和容量,我们可以通过19个CP3100就可以提供相当于IBM3380的容量,而价格只有IBM3380的15%左右。当时大卫·帕特森 (David A Patterson)就在思考,如何通过这种廉价的硬盘提供像IBM 3380存储系统这样大容量、高可靠性和高性能的存储呢?
大卫·帕特森想到的方法很简单,就是基于多块廉价硬盘构建为一个虚拟的硬盘(Virtual Disk)给用户用,有的地方称为逻辑硬盘(Logical Disk)。也就是说,虽然底层是多块硬盘,但从用户的角度来看只是一块硬盘。这正是其论文《A Case for Redundant Arrays of Inexpensive Disks (RAID)》的核心思想,这也是术语RAID的来源。
在其论文中,大卫·帕特森一共提到了5种级别的RAID,分别是RAID1、RAID2、RAID3、RAID4和RAID5。当前常规RAID级别,除了大卫·帕特森提出的5种RAID级别外,还包括RAID0和RAID6等。而基于上述常规RAID级别,还可以进行组合,比如常见的RAID10、RAID50和RAID60等。
上述RAID级别是基础的RAID级别,存在各种缺陷。随着技术的发展,又出现了不同种类的RAID,如EMC的Mapped RAID、NetApp的RAID-DP和华为的RAID2.0等。不过万变不离其宗,这些高级RAID的基础还是大卫·帕特森提出的5种基础RAID级别。
具体到RAID的概念,其原始英文全拼是Redundant Arrays of Inexpensive Disks(“廉价磁盘冗余阵列”),也就是通过廉价的磁盘构成一个阵列,然后对外提供存储服务。现在该英文全拼有所变化,为Redundant Array of Independent Disks,翻译为中文是“独立磁盘冗余阵列”。无论如何变化,其本质是通过一组硬盘构建一个高可靠的虚拟硬盘给用户使用。
至于如何虚拟出这样一个虚拟硬盘,自然是通过软件来实现的,具体如上图所示。这个软件如果是在操作系统层面实现的,那么称为软RAID,如果软件在一个硬件(适配卡)内实现,则称为硬RAID,因为RAID是在一个独立的硬件上,不占用系统资源。
通过这个软件,当用户对虚拟硬盘进行数据读写时,软件通过内部算法的计算可以确定该请求应该对应哪个物理硬盘。而这些对用户来说是透明的,用户看到的是一个线性的,非常大空间的硬盘,与常规硬盘没有任何差异。
对于软RAID来说,由于其在操作系统层面实现,因此其运行会消耗系统计算资源和内存资源。同时,操作系统中通常会提供相应的工具进行RAID的操作,比如创建、删除和查看状态等。在Linux操作系统下有一个命令行工具mdadm。而在Windows下面则是通过GUI界面操作的。
对于硬RAID来说,RAID的功能在一个硬件板卡当中,RAID算法使用该板卡的计算资源和内存资源。这个板卡前端可以通过PCIe插槽插到服务器的主板上,或者本身就集成在主机的主板上,而后端则可以与多个硬盘相连,实现对硬盘的管理。下图是一个示意图,为了强调板卡的作用,我们这里将板卡画到了服务器的外部。
另外一种场景是RAID卡在一个独立的物理设备中,服务器与该物理设备通过SAS等方式连接。RAID卡可以管理该设备中的硬盘,而且可以同时配置多种不同级别的RAID,比如可以同时配置多个RAID5和RAID6,这样在服务器端看到的跟本地的普通硬盘没有任何差异。
以服务器的硬RAID为例,通常是进入BIOS进行的设置的。如下图是某厂商服务器RAID配置界面。通过该界面可以看到配置RAID的常见参数,比如RAID等级、拟创建虚拟盘的大小、物理盘列表和一些高级选项。
这里我们只是简要介绍了一下RAID的由来以及基本概念,接下来我们将介绍RAID的等级,让大家更深一步的了解RAID的相关内容。