一个大型 RAID 10 阵列——服务器存储的新标准
在 20 世纪 90 年代末,构建一台新服务器的标准经验法则是将操作系统放在它自己专属的小型 RAID 1 阵列上,并将应用程序和数据分离到单独的 RAID 5 阵列中。这样做有若干原因,其中许多原因如今已离我们远去,消逝在时间的长河之中。主要的驱动因素在于,当时存储容量极其昂贵,磁盘容量很小,文件系统经常损坏,而且与其他类型的故障相比,物理硬盘的故障率非常高。人们的迫切需求是防范物理硬盘故障、防范文件系统损坏,并获取足够的容量以满足需要。
如今,存储格局已经发生了变化。文件系统极其健壮,文件系统本身造成的损坏几乎闻所未闻,而且得益于日志记录等技术,损坏几乎总能被快速有效地纠正,从而保护最终用户免遭数据丢失。如今几乎没有人会担心文件系统损坏。
现代文件系统所能处理的容量也远超以往。在 20 世纪 90 年代末和 21 世纪初,轻松构建一个比任何单一文件系统所能处理的容量都更大的磁盘阵列并不罕见。如今情况已不再如此,因为所有常见的文件系统至少都能处理数 TB 的数据,往往还能处理 PB、EB 乃至更大规模的数据。
硬盘比 20 世纪 90 年代末可靠得多。整块硬盘发生故障的故障率非常低,即便是价格较低的硬盘也是如此。事实上,故障率之低,以至于阵列故障(即整个 RAID 阵列中的数据丢失)所关注的主要是阵列本身的失效,而非硬盘的故障。我们不再毫无节制地频繁更换硬盘。大型阵列在其整个生命周期内不损失任何一块硬盘的情况,已并不罕见。
容量已经实现了惊人的增长。我们安装的不再是 4.3GB 的硬盘,而是 3TB 的硬盘。与不到十五年前相比,单个盘片上的容量增长了将近一千倍。
这些因素共同作用,催生了对一种截然不同的服务器存储设计方法的需求,也促使关于存储设计起点的“经验法则”发生了变化。
旧的方法可以写作 RAID 1 + RAID 5。RAID 1 的空间用于操作系统,而通常大得多的 RAID 5 空间则用于数据和应用程序。这种设计将两类存储关注点分开,把最大的努力投入到保护操作系统上(操作系统在发生灾难时极难恢复,而数据的可访问性又依赖于它),将其置于高度可靠的 RAID 1 之上。成本较低的 RAID 5 虽然风险略高,但通常被选来存放数据,因为在大多数情况下将数据存储在 RAID 1 上的成本过高。这在当时是一种合情合理的权衡。
如今,面对我们截然不同的关注点,需要一种新的方法,而这种新方法被称为“一个大型 RAID 10 阵列”(One Big RAID 10)——意即用单个大型 RAID 10 阵列将操作系统、应用程序和数据全部存储在一起。当然,这只是我们为了方便而采用的说法;在一个对性能或容量的需求不超过单块磁盘的系统中,我们会说“一个大型 RAID 1 阵列”,但由于许多人将 RAID 1 归入 RAID 10 这一类别,所以采用前一种说法更为简便。
为了更加简便,我们将其缩写为 OBR10。
由于存储成本已大幅下降,如今不再稀缺而是通常供应充足;由于文件系统极其可靠;由于 RAID 1 和 RAID 10 具有相同的性能特征;又由于非磁盘故障所引发的阵列故障已从背景噪声变成了数据丢失的主要原因——转向 RAID 10 并消除阵列拆分,已经成为新的标准做法。
有了 RAID 10,我们如今便能为所有数据提供以往仅供操作系统享有的高可用、高弹性的存储。我们既获得了镜像 RAID 的性能优势,又获得了为所有数据提供额外盘片的优势。我们还获得了更高的磁盘容量利用率,以及基于这种利用率提升所带来的性能提升。
甚至连数据库通常会做的日志文件传统拆分(即臭名昭著的 RAID 1 + RAID 5 + RAID 1 方法)也不再需要,因为 RAID 10 在所有数据上都保持了最佳的性能特征。有了 RAID 10,我们便消除了几乎所有曾经促使我们拆分阵列的因素。
前面尚未提及的、传统上被视为拆分阵列有益处的唯一重要因素,是访问争用——即不同进程需要在同一时间访问磁盘的不同部分,从而导致磁头以远非理想的方式移动,进而降低磁盘性能。在 20 世纪 90 年代末,当旧的经验法则形成之时,争用曾是一个大问题。
如今,磁盘争用依然存在,但已通过使用大容量 RAID 缓存而得到极大缓解。在 90 年代末,磁盘缓存充其量只有几 MB,而且往往根本不存在。如今,256MB 已是很小的缓存,普通服务器在部署时仅 RAID 卡上就配备了 1-2GB 的缓存。一些系统开始集成额外的固态硬盘缓存,在控制器上的内存缓存之外再增加一级二级缓存。这些缓存可以轻松增加数百 GB 速度极快的缓存,能够缓冲几乎任何盘片操作,使其无需担心争用问题。因此,争用问题多年来已通过其他方式得到解决,而且与其他技术变革一样,它有效地将我们从需要拆分阵列的传统顾虑中解放了出来。
与阵列争用类似,20 世纪 90 年代末拆分阵列的另一个远不那么常见的原因,是为了提升通信总线的性能,因为当时的 SCSI 和 ATA 技术存在局限。随着现代阵列转向 SAS 和 SATA 这类串行通信机制,这些问题也已被消除。我们不再受限于每个阵列单一总线的容量,能够以比以往更高的灵活性扩展到大得多的规模。总线争用几乎已被彻底消除。
如果确实需要划分出空间以作保护,例如应对日志文件的增长,这可以通过分区来实现,而非通过物理阵列的拆分。一般而言,你会希望尽量减少分区,因为分区会增加开销,并降低磁盘自我调优的能力,但也存在分区是更优方法的情形。不过,它并不要求像传统做法那样拆分底层的物理存储。比分区更好的方法(在可用时)是逻辑卷管理,它能实现类似分区的分隔,却没有分区的种种局限。
所以归根结底,服务器存储新的经验法则就是“一个大型 RAID 10 阵列”。不再有 RAID 5,不再有阵列拆分。这关乎可靠性、性能、管理的便捷性以及适度的成本效益。与所有经验法则一样,它并不适用于每一个个例,但它的适用范围远比旧标准曾经所及的要广泛得多。RAID 1 + RAID 5 作为一种标准,始终是一种用某种不尽如人意的方案“将就”、在糟糕处境中力求最优的尝试。OBR10 则并非如此。新标准是一种被人们所期望的标准——它是我们真正想要的运行方式,而不是某种我们“被迫接受”的东西。
在为新服务器设计存储时,请从 OBR10 入手,只有当它确实无法满足你的技术需求时才偏离它。你永远不必为使用 OBR10 而辩护,只需为不使用它而辩护。
