说起RAID,学计算机的同学马上会说RAID技术简单啊,就是将数据条带化,然后计算一些冗余数据,一并写入磁盘。通过RAID技术一方面提高系统的IO性能;另一方面提高系统的可靠性。单纯从RAID的原理来讲,RAID技术的确没有太多复杂的东西,而且RAID所涉及到的算法也非常简单,但是,自从加州大学伯克利分校发明第一个磁盘阵列至今,虽然已经有很多厂商推出了自己的盘阵,但是核心的RAID卡却只有那么几家,这足以说明RAID产品并不容易实现,不管是RAID硬件还是RAID软件都有一定的技术难度。
RAID硬件的核心是RAID控制器,RAID控制器的核心包括嵌入式CPU、PCI-E桥路控制器和SAS/SATA控制器。嵌入式控制器通常采用低功耗的ARM核,不管是Intel的IOP还是LSI的控制器,都以ARM为核心,并且这些控制器会为RAID算法提供特殊硬件支撑,提高了RAID冗余算法运算效率。PCI-E桥路控制器和SAS/SATA控制器的难点在于物理层transciver的实现。目前,能够提供控制器的厂商有LSI、Marvell、3ware等。
RAID软件是RAID产品的灵魂,通常来讲,实现一个科研性质的RAID原型是比较简单的,因为原型系统不会考虑复杂的出错处理,不会太在意各种应用模式下的性能,但是,作为一个优秀的产品,不投入几年的时间,是无法推出一套可用的RAID产品。那么,对于一个RAID产品,需要做哪些细致的工作呢?
1, 完成IO读写框架,实现RAID数据的条带化和冗余数据的高效计算,并且需要考虑数据小写问题,采用何种策略与技术减少小写,提升IO读写性能。
2, RAID的元数据分布和可靠性问题。RAID的元数据是RAID重构的依据,因此,需要考虑元数据的分布和冗余,使得元数据的存储最为可靠。
3, RAID条带数据的完整性问题。对于一般的认识,RAID条带的写操作是一次普通的IO操作,这种思路忽略了断电问题,一旦断电,条带可能会处于数据不一致状态,因此,可以将IO操作当成transaction,并且采用NVRAM等高速存储介质作为RAID操作过程中的log。另外,磁盘介质上的数据会存在位翻转等错误,这种错误会导致条带恢复出错,并且不被软件发现,因此,需要考虑CRC等条带容错机制。
4, 磁盘故障检测问题。磁盘的故障分为很多种,在用户实际的存储系统中,磁盘故障的表现多种多样,有时是链路问题,有时是存储介质问题,有时是控制器问题,并且有时会非常不稳定,甚至会出现hotplug风暴,因此,如何认定故障磁盘是一个问题,对于不同的故障,可以采用不同的策略,这里有很多设计和考虑。
5, RAID重构问题。当磁盘发生故障时,RAID系统需要进行数据重构操作,数据重构时,RAID处于degrade状态,此时需要考虑重构写和用户写之间的并发操作问题。另外,一个更为致命的问题是RAID重构的时间特别长,一方面用户数据的IO性能会非常低;另一方面长时间的降级运行降低了系统的可靠性,在降级运行时间内,如果再次发生故障,系统数据可能会丢失。如何缩短重构时间是RAID研发的一个难点。
6, RAID数据拯救设计。数据拯救似乎与RAID本身无关,实则不然,作为一个优秀的产品,必须考虑到当磁盘发生故障时,如何尽最大可能恢复RAID中的数据,这也是RAID产品设计时需要考虑的。
7, RAID重启和管理软件。为了方便客户的应用,RAID还需要一套完整的管理软件,并且在重启时能够做到高效、快速。
RAID作为一个产品,需要考虑的因素很多,其最主要考虑的问题是性能和可靠性。一年前LSI推出的Mega-RAID中集成了快照功能,其实现了块级快照,提高了应用数据的可靠性。块级快照是RAID之上的一种存储技术,很多存储技术(重复数据删除)都往盘阵迁移,慢慢地盘阵将成为一种基础的、功能丰富的存储系统。
文章评论(0条评论)
登录后参与讨论