专家博客 关于SSD和RAID管理的一些想法

大多数存储管理员在RAID(独立磁盘冗余阵列)层级的选择上都是相当保守。出于习惯的惯性,当性能是主要目标的时候,我们选择RAID-1或10;当我们需要空间甚于速度的时候,我们选择RAID-5(或者RAID-6)。我现在想的是,如果你有6个或60个SSD(固态驱动器)而不是旋转型磁盘需要管理,那么上面的这些定律可能不再适用。

一个典型的问题是服务器管理员坚持在服务器启动卷上使用硬件RAID控制器和RAID-5。去年我曾看到一个系统有三个73GB驱动器,管理员使用SAN(存储局域网)来用于数据卷。如果他们使用一对镜像73GB驱动器,那么整个系统可以更便宜、更快、更简单、更环保和更低错误率。当我问到他们为何使用RAID-5而不是RAID-1的时候,我从来没听到比"RAID-5应该比RAID-1更好因为它层级更高"更好的回答,通常的回答就是"我们一直如此"。我将在未来的几篇博文中详细讨论这个问题。

我必须承认,我很晚才接受RAID-5。好几年来,我在NetWare的镜像上有很愉快的经验,这种设置在慢速磁盘年代(Maxtor XT-1140)可以带来很好的I/O安排。后来我在早期服务器RAID控制器、Windows NT和200Mhz Pentium Pro(高能奔腾)处理器上使用RAID-5曾碰到不愉快的经历。使用RAID-1来处理随机工作负荷的理由是它们可以将读取请求分布到一对驱动器,不过每次写入需要两个I/O操作,每个针对一个驱动器。假定在RAID-5内有n+1个读取,尤其是顺序读取,这些读取将分布在集内的所有驱动器上。不过,小型写入需要至多2n次I/O操作,因为控制器需要读取现有数据来计算条带新的校验码。如果顺序读取的大小超过条带大小则不需要读取旧数据来计算校验码,而是每个读取请求执行N+1次I/O操作,不过镜像的系统则仍然需要进行2n次I/O操作。

在最基本的层面上,是选择镜像还是选择在多个驱动器上分布化数据和校验码其实就是一个如何在随机I/O性能和容量之间取得平衡的问题。旋转式磁盘,即使是1.5万转驱动器,在单位容量成本上都很便宜,但是单位I/O操作成本却比较贵。RAID-1在可接受的范围内牺牲一定容量,但是最大化了有价值的IOPS(每秒输入输出)。另一方面,SSD的单位容量成本虽高,但是它的单位IOPS成本却比较便宜。

一旦你已经决定花大笔钱购买SSD,那么你一般会倾向于最大化性能并镜像化这些SSD。如果你的阵列厂商走的是STEC ZeusIops这条路(比如Compellent、EMC、日立数据系统等厂商),因为你只要购买2个或4个SSD,因此这可能是最好的方式。另一方面,如果你的阵列厂商(比如Nimbus、Equallogic、3PAR和Pillar)使用的是大量不那么昂贵的SSD RAID-6甚至RAID-5,那么你可以有足够的性能和空间来将新的SSD用于加快最关键应用程序以外的其他应用程序。当你不那么需要IOPS的时候,你可以牺牲一定IOPS来获取大容量。