早在我还是一个服务技术新手的时候,我对系统管理一无所知,我们一直想要了解的话题之一就是RAIDD——廉价冗磁盘阵列(Redundant Array of Inexpensive Disks)。
它是解决我们所有存储难题的钥匙。有了RAID,我们可以扩大文件系统,获得更好的吞吐量甚至是增加冗余性,让我们幸免于磁盘丢失事件,尤其是在那些经常发生此类事件的日子里。 随着NAS和SAN存储应用的出现,使用物理存储的技巧和利用这些技巧来满足系统需求快速地消失了。这并不是一件好事。因为我们将存储卸载到外置设备上的做法并没有改变这样一个事实,我们需要从根本上了解我们的存储情况,通过配置存储来满足系统的特定需求。 最近五到十年似乎出现这样一种误解,认为RAID可以等同于系统备份。而事实并非如此。RAID只是容错的一种形式。 备份和容错从概念上来讲是xx不同的。备份让我们可以在灾难发生之后实施恢复。而容错旨在降低灾难发生的几率。容错就像是在悬崖上搭建一个防护网,而备份就像是悬崖下面建造一座医院。你恐怕永远也不希望既没有防护网也没有医院,但他们是xx不同的两个事物。 一旦我们为驱动器部署了RAID,不管是本地附加还是在存储网络中的远程应用,现在我们有四种主要的RAID解决方案可以用于业务中:RAID 1(镜像)、RAID 5(带校验的磁盘条带)、RAID 6(带双重校验的磁盘条带)以及RAID 10(带有条带的镜像)。 还有其他类型的等解决方案,例如RAID 0,但如果你真正了解你的驱动器子系统需求,那么你就知道这些只能用于少数环境中。另外人们使用的还有RAID 50和RAID 51,但是更加少见,而且效率并不那么高。十年前,RAID 1和RAID 5是很常见的,但是今天我们已经有了更多的选择。 下面让我们来逐个分析这些选择并讨论一些基本的数据。在我们的例子中,我们将使用“n”来代表阵列中的驱动器数量,“s”代表任何单个驱动器的大小,以此来表示一个阵列的可用存储空间,更直观地进行存储容量对比。 RAID 1 这种类型的RAID是对驱动器进行镜像。你有两个驱动器,它们同时在一起做所有事情,因此称做“镜像”。因为这个过程非常简单,所以镜像是非常稳定的,但是如果你之前从来没有使用过RAID的话,这就要求你必须购买是实际需要两倍的驱动器,因为第二个驱动器作为冗余之用。 RAID 1的好处在于你可以确保写入到磁盘中的每个字位都被写入两遍以达到保护的目的。因此,使用RAID 1我们的存储容量应该是(n*s/2)。RAID 1比非RAID驱动器性能要略高一些,写入速度接近于非RAID系统,而读取速度几乎是大多数情况下的两倍,因为在读取操作过程中驱动器可以并行地进行访问,从而提高了吞吐量。RAID 1限制于两个驱动器。 RAID 5 带校验的磁盘条带。在这种类型的RAID中,数据以复杂条带的形式写入到阵列中的所有驱动器中,同时所有驱动器中都有分布数校验块。这样RAID 5就可能使用三个或者更多磁盘组成的任意大小的阵列,只牺牲相当于一个磁盘的存储容量用于校验。但是这种校验是分布式的,并不单独存在于任何一个物理磁盘中。 RAID 5由于在大型阵列中牺牲的存储容量较少,所以它具有成本效益的特点,从而被人们所广泛使用。与镜像不同的是,带有校验的条带要求必须在磁盘之间进行针对每个写入条带的计算,这造成了一部分的开销。因此,吞吐量并不总是一个容易计算的项目,它在很大程度上取决于系统在做校验计算时候的计算能力。 计算RAID 5的容量非常简单:就是((n-1)*s)。RAID 5阵列可以避免这列中任何单个磁盘的丢失。 RAID 6 带双重校验的磁盘条带。RAID 6与RAID 5非常相似,但它的每个条带使用两个校验块,而不是一个,这加强了应对磁盘故障的保护能力。 RAID 6是RAID家族中的新成员。RAID 6是其他几个RAID类型实现标准化几年之后增加的。RAID 6比较特殊,因为它可以承受阵列中任意两个驱动器的故障,同时防止数据丢失。但是为了配合额外的冗余度,RAID 6阵列需要牺牲阵列中相当于两个驱动器的容量,并要求真列中最少有四个驱动器。RAID 6的容量可以用((n-2)*s)来计算。 RAID 10 带条带的镜像。从技术上来说,RAID 10是一种混合的RAID,包括存在于一个非校验条带(RAID 0)中的一对RAID镜像。 当一个阵列中只有两个驱动器的时候,很多厂商会称其为RAID 10(或者RAID 10+),但从技术上来说这应该是RAID 1,因为阵列中至少有四个驱动器才会发生条带化。对于RAID 10来说,驱动器必须是一对一对添加的,因此阵列中的驱动器数量只可能是偶数。 RAID 10可以在丢失近半数驱动器组的情况下正常运转,同是最多只能承受每个驱动器中一个驱动器发生故障或者丢失。RAID 10不包含校验计算,这使得它相对RAID 5和RAID 6来说具有一定的性能优势,而且阵列对计算能力的要求也更低。RAID 10提供了超过任何一种常见类型RAID的读取性能,因为在读取操作中阵列中的所有驱动器都可同时使用。但是RAID 10的写入性能要低很多。RAID 10的容量计算方法和RAID 1相同,都是(n*s/2)。 在当今的企业中,很少有IT部门有迫切的需要考虑除了上述这四种RAID之外的驱动器配置,不管他们是否已经部署RAID软件或者硬件。以前,RAID阵列决策中最主要的一个考虑因素是可用容量。这是因为以前驱动器不仅昂贵而且容量很小。 现在,驱动器都很大因此存储容量基本不是什么问题,至少不再像几年前那样,而且成本也大幅度降低,购买更多驱动器以获得更高冗余度也不是什么难事。当容量是主要考虑因素的时候,RAID 5是一个比较受欢迎的选择,因为相比其他阵列类型来说,RAID 5损失的容量最少。 现在我们还有其他方面的顾虑,主要集中在数据安全和性能方面。多花一些钱来加强数据保护应该是一个显而易见的选择。RAID 5只能接受损失一个驱动器。对于只有三个驱动器的阵列来说,这相比RAID 1所提供的保护能力来说还要更危险一些。 我们可以接受三个驱动器中丢失任何一个驱动器。与丢失两个驱动器中任何一个相比这并没有那么令人害怕。但如果是一个大型阵列呢,例如16个驱动器?能够安全地损失16个驱动器中的一个,这的确会让我们质疑可靠性。 这时候RAID 6填补了这一空白。RAID 6常被用于大型阵列中,损失的存储容量和性能非常小,而且接受丢失任何两个驱动器。带校验码的条带化RAID的支持者经常引用这些数字来安抚管理层,称RAID 5/6可以提供足够“物廉价美”的存储子系统。但是用户还有其他因素需要考虑。 RAID 10应用 在谈论RAID可靠性(很少被提及的一个话题)中,有一个几乎被忽略掉的问题,那就是校验计算可靠性。 对于RAID 1和RAID 10来说,不需要通过计算来创建带校验的条带。数据只是以一种稳定的方式被写入。当一个驱动器发生故障,它的另一个配对驱动器就会接过负载,在更换驱动器之前驱动器性能可能会有一些降低。既没有影响现有驱动器数量的重建流程,也没有校验条带的重建。 带校验的RAID阵列操作中包括计算出结果是什么以及应该把哪些放到驱动器上。虽然这种计算很简单,但是也有可能出错。 RAID 1或者RAID 10出现阵列控制故障从理论上来说可能是向驱动器内容中写入坏数据,但是控制器中并没有一个能对其本身进行驱动器更改的流程。因此这种情况发生的几率非常低,因为除了创建镜像之外系统没有一个“重建”流程。 当带有检验的阵列执行重建操作的时候,他们通常会实施一个复杂的流程,逐步检查阵列的所有内容,将丢失数据写回到被替代的驱动器上。对其本身来说这是非常简单的,而且不需要有什么担心。 我和其他人首先注意到一个有些不同的场景,由于与阵列的连接器松动所导致的磁盘连接性的丢失。随着时间的推移,服务器中的驱动器有可能会松动,尤其是在一个持续运行的系统中服务好几年以后。 在极端的情况下,当阵列控制器认为一个或者多个驱动器连续发生故障,驱动器的好数据会被坏校验数据所覆盖,然后重新在线并进行重建。在这种情况下,驱动器本身并没有发生故障,而且也没有数据丢失。理论上来时需要的只是重新调整驱动器的位置就可以。 在热插拔系统中,驱动器重建管理往往是根据故障驱动器的移除或者更换规则而实现自动化的。因此,这种丢弃和更换驱动器的流程可以在没有任何人为干预的情况下进行。在这个过程中,驱动器系统面临风险,如果驱动器阵列再次发生这种情况,根据驱动器的状况,系统开始对坏数据进行条带化,覆写好的文件系统。 对于服务器管理员来说,最令人沮丧的事恐怕是看到没有驱动器故障的系统仅仅因为不必要的重建操作而丢失整个阵列。 从理论上来说,这种情况是不会发生的,而且有专门的人员会预防这种情况的发生。但是判断底层驱动器控制器当前和过去的情况以及保存数据的质量并非表面上看到的那样容易,而且有可能会发生错误。 虽然不太可能,但是这种情况还是会发生的,同时也让RAID 5和RAID 6系统风险计算变得难上加难。除了阵列可以接受驱动器故障之外,我们必须考虑校验故障的风险。随着驱动器可靠性不断提高,校验故障风险的重要性也突显出来。 除此之外,因为校验计算的缘故,RAID 5和RAID 5校验还给系统带来更多开销。校验计算一般是通过高级RAID硬件来处理的。这种计算给驱动器子系统带来了延迟,这种延迟很大程度上取决于硬件和软件两个方面。这使得不同类型RAID之间性能水平对比变得更加困难,因为每一种部署都是{dywe}的。 现在,RAID选择中一个{zd0}的问题可能就是我们可以方便地获得存储效率和驱动器容错的测量标准,但是可靠性和性能方面的指标却非常几乎没有。测量标准所带来的危险之一就是,人们将重点关注那些很容易测量的项目上,而忽略了那些不方便测量的项目,尽管这些因素可能会有很重要的影响。 虽然现在所有类型的RAID都找到了自己的一席之地,但关键的是要结合使用背景以及可接受的风险范围来进行考虑。我们应该努力将整个行业从默认RAID 5引导到默认RAID 10上来。驱动器很便宜了,但是数据丢失的代价很高。 更多服务器内容详见: |