独立磁盘冗余阵列(RAID)是将多个机械硬盘(HDD)或固态硬盘(SSD)组合成一个逻辑卷,使其阵列避免或减少硬盘故障造成的损失的过程。有多种类型的RAID阵列。下面将讨论企业应该选择哪种RAID阵列。什么是RAID阵列?假设两块1TB的硬盘接在一台服务器上,这样就有2TB的可用空间。但在服务器环境下,最好将第二块硬盘作为备份,组建RAID阵列。这可以使用连接到硬盘驱动器并管理RAID阵列的RAID控制器实时完成。也有软件RAID阵列,但大多数服务器都有专用的RAID控制器。没有RAID阵列,就没有冗余。但这不是主要问题。虽然一个好的备份策略实际上永远不会丢失数据,但如果硬盘驱动器出现故障,服务器在恢复时可能会经历很长的停机时间。这在服务器环境中是不可接受的,并且比临时数据丢失更糟糕。RAID阵列可以在它仍然可用时重建,而无需在硬盘驱动器出现故障时从备份中恢复。这是RAID阵列的主要优点。服务器设计为即使在许多意外情况下也不会停机。工作人员可以从网络服务器上拔下硬盘驱动器,它会继续运行,尽管性能会降低。在许多方面,配置RAID阵列比配置更大的硬盘要好得多。大型8TB硬盘驱动器的弹性不如在RAID5阵列中配置的五个2TB驱动器。现在很难找到只安装一个硬盘的服务器。RAID阵列最适合与相同容量和品牌的硬盘一起使用。它可以与各种硬盘驱动器一起使用,但通常受到最慢速度和最小容量的限制,使其成为次优性能。这仅适用于用户自己管理服务器的情况,例如具有许多硬盘驱动器的家庭网络附加存储(NAS);在这种情况下,选择的RAID阵列类型非常重要。如果您从AWS或其他云计算提供商租用虚拟服务器,RAID阵列通常由托管商为用户配置,因为这一级别的控制是从企业中抽象出来的。在开始使用RAID阵列之前请注意:用于指定不同RAID级别的数字实际上没有任何意义。RAID5的性能不是RAID1的5倍。还有其他几种RAID级别,如RAID2、3和4,但它们在实际中没有使用,因此无需解释。JBOD在技术上不是RAID阵列配置,但这里需要解释一下。JBOD在技术上的意思是“JointBatchofHardDisks”,但它可以理解为“justabunchofharddisks”,因为基本上就是这样。JBOD只是将硬盘连接在一起成为一个大容量硬盘。这不会带来任何性能提升,不会提供任何冗余,用户也不关心插入了哪些驱动器。许多RAID控制器将提供JBOD模式。除非您有许多不同容量的硬盘并将它们连接在一起,否则不应使用它。RAID0阵列RAID0阵列中的数据分布在多个硬盘上;例如,如果你想从RAID阵列中读取一个文件,你会并行读取多个硬盘,这使得RAID0阵列读取速度比任何单个硬盘快得多。但是,由于没有镜像、奇偶校验或其他冗余机制,如果一个硬盘发生故障,整个阵列上的所有数据都会丢失。因此,当速度至关重要且不需要冗余时,可以使用RAID0阵列。在某种程度上,RAID0阵列与根本没有RAID阵列非常相似。它可以将所有硬盘放在一个大容量硬盘中,并获得更高的访问速度。但是,单个驱动器的故障会对阵列上的数据造成灾难性影响,因此除非是临时数据,否则切勿在没有备份解决方案的情况下运行RAID0阵列。RAID0阵列还可以最大化存储容??量,因为没有用于冗余的存储空间。如果您有两个1TB硬盘驱动器,则您的阵列的容量为2TB。但是,RAID0阵列仅限于阵列中最小的硬盘驱动器,如果您尝试使用2TB硬盘驱动器和1TB硬盘驱动器构建RAID0阵列,您将只有2TB的空间,而空间另一个1TB硬盘将完全浪费。使用SSD硬盘的RAID0阵列很常见,考虑到SSD硬盘的低故障率,还是比较合理的。这是高端服务器系统中的常见设置,因为速度比冗余更重要。RAID1阵列RAID1阵列是另一种基本类型的RAID阵列。类似于RAID0阵列,它使用两个或多个硬盘驱动器,但不是条带化数据,而是将数据从第一个硬盘驱动器镜像到第二个(以及阵列的其余部分)。如果有两个驱动器,其中一个驱动器将完全用作一种实时备份驱动器,在此过程中将总存储容量减半。如果一个驱动器出现故障,可以继续从另一个驱动器读取数据,并且可以通过更换故障驱动器来重建阵列。由于可以使用两个硬盘驱动器,它确实有一些读取性能优势,但由于它从每个硬盘驱动器读取相同的数据,因此它通常不如RAID0阵列。它的写入性能将受到最慢硬盘驱动器速度的限制。如果您有两个硬盘驱动器并且不能承受因硬盘驱动器故障而丢失数据,则RAID1阵列是唯一可行的选择。不过,它并不是最高效的,因为它将存储容量减少了一半,因此它的成本是单个硬盘驱动器的两倍。但是,服务器设置中的冗余阵列比单个硬盘的价格要高得多。如果您只需要基本的硬盘驱动器设置,您可以使用简单的RAID1阵列。当插入两个硬盘驱动器时,大多数RAID控制器将默认为RAID1阵列。RAID5阵列RAID5阵列开始变得有趣起来。RAID5阵列不像RAID1阵列那样复制数据,而是使用称为奇偶校验的更有效方法。奇偶校验是一种错误检查形式,类似于散列检查,但更简单。通常用于确保网络流量不被混淆。基本上,假设您有7位数据要发送给某人,并且您希望确保它完整无缺地传输。如果传输有什么混乱,他们就无从知晓。解决方案是计算所有正数。如果是偶数,则校验位为0。如果是奇数,则校验位为1。将此添加到发送的数据中,另一端的人收到时会自动计算校验位数据。如果发生错误,并且发生位翻转(甚至奇偶校验位本身),另一方将知道并请求重新发送数据。当然,如果一次传输出现两个错误,系统就会崩溃,但这并不常见。RAID5阵列不需要存储数据的副本(如两次发送消息),只需存储奇偶校验位。可以想象成一个带冗余的RAID0阵列,至少需要三块硬盘。除了一个驱动器外,所有驱动器都像常规RAID0阵列一样使用,但最后一个驱动器用于奇偶校验。如果其中一个驱动器发生故障,则奇偶校验计算可以反转以恢复任何驱动器上的所有数据(尽管这是一项漫长而费力的操作)。实际上,RAID5阵列不使用专用硬盘驱动器进行奇偶校验,因为在所有驱动器上剥离奇偶校验位更快,但在计算RAID5阵列将提供多少存储时可以考虑这种方式。本质上,将除一个之外的所有硬盘驱动器相加,这就是您将拥有的存储空间。RAID5阵列可以通过增加硬盘来提高空间效率。三个硬盘的效率是66%,但是10个硬盘的效率是90%。与RAID1阵列相比,这显着降低了成本。然而,RAID5阵列并非没有缺点。由于每次对硬盘进行写入时都必须计算奇偶校验,因此会降低写入性能。由于在硬盘中翻转一点需要读取所有硬盘以重新计算块的奇偶校验,这一事实加剧了这个问题。事实上,如果RAID0阵列可以扩展n块硬盘的性能,那么RAID5阵列可以提供n-1块硬盘的写操作性能。但是,如果数组足够大,问题就不会那么严重。另外,不管你有多少块硬盘,你只能承受一个硬盘故障的损失。这似乎不是一个主要问题,因为故障很少见,而且不太可能同时出现两个故障,但是阵列重建在硬盘驱动器上可能非常密集,基本上从每次故障最严重的时候开始vulnerable读取每一位数据都出现故障。因此,如果其中一个驱动器发生故障,则另一个驱动器很可能也会发生故障。如果你有3块硬盘,你应该选择RAID5阵列,因为RAID1阵列会浪费空间。如果您有4个硬盘驱动器,那么它可能仍然是最佳选择,但此列表中的其他两个选项也可以使用。RAID6阵列RAID6阵列类似于RAID5阵列,只是“奇偶校验磁盘”是镜像的。这使其阵列能够避免双硬盘故障。但是,n-2磁盘的写入性能较差,空间较小。如果您有大量驱动器(6个、8个或更多),您可能需要考虑使用RAID6阵列来提供额外的冗余。单独使用RAID6阵列可实现3-2-1备份策略:至少存储三份数据,两份备份在不同的介质上,其中至少一份在异地。RAID6阵列可以承受两个硬盘驱动器的故障,使其在功能上与具有三个磁盘的RAID1阵列相同(减去重建时间)。在实践中,RAID6阵列几乎永远不会出现阵列整体故障,尤其是在公式中添加了更多奇偶校验磁盘的情况下。结合其他数据中心的备份和副本,这就是AWSGlacier和Backblaze等归档服务如何实现99.999999999%的持久性。RAID10(1+0)阵列RAID10阵列在技术上是嵌套RAID阵列的一种形式,这本身就是另一种复杂情况。如果您有四个驱动器并且不想使用RAID5阵列或RAID6阵列,那么您唯一的其他选择是RAID0阵列和RAID1阵列,两者都有问题。相反,如果您将这些硬盘驱动器一分为二以形成两个RAID1阵列,然后使用这些阵列构建一个大型RAID0阵列。一个RAID10阵列至少需要四个硬盘,并且硬盘总数为偶数。这提供了RAID1阵列和RAID0阵列的所有优点,没有许多缺点,具有快速的读写速度、高冗余和易于重建,同时仍使用所有硬盘驱动器总空间的一半。RAID10阵列实际上比RAID1阵列更具弹性。在上图中,硬盘1和硬盘3有可能出现故障,阵列仍然可以完全重建(尽管如果硬盘0和硬盘1都出现故障,阵列将无法恢复)。RAID10阵列是服务器非常常见的RAID级别。它的速度非常快,并且可以在硬盘驱动器发生故障时幸存下来。唯一真正的问题是价格,因为您仍需支付双倍费用来保留所有数据的副本,但对于平均工作负载,RAID10阵列在速度方面优于所有其他RAID配置,并且仅输给RAID0阵列。一个RAID50/60阵列一个RAID50/60阵列基本上是两个RAID5阵列或一个RAID0阵列中的一个RAID56阵列。这提高了RAID10阵列的性能,最重要的是提高了写入性能,因为在计算奇偶校验时从其他硬盘驱动器读取数据的速度更快。它至少需要6个硬盘驱动器(在RAID60的情况下为8个),并且由于有一个单独的RAID5阵列,因此需要额外的奇偶校验驱动器,从而降低了空间效率但更具弹性。总体而言,RAID50阵列本质上是RAID5阵列的更高性能版本。
