如何在*磁盘*级别实现 raid?

如何在*磁盘*级别实现 raid?

如果磁盘有 512 字节物理扇区,并且您有 10 个磁盘使用 RAID 50,条带大小为 1MB,那么它如何工作在磁盘级别

如果我错了请纠正我,但从概念上讲,将有 2 个跨度,每个跨度由 5 个磁盘的 RAID-5 阵列组成,其中一个磁盘镜像到另一个磁盘。因此,“条带”将由 4x256KB 数据块以及每个条带的单个 256KB 奇偶校验数据组成?或者“条带”包括奇偶校验?

如果您考虑一个 12 磁盘的 RAID 10 阵列,结果会怎样?将有 6 对镜像磁盘,并在这些镜像上进行条带化。因此,对于 1MB 条带大小,条带将除以 6,即每磁盘 174,762.666 字节,即每条带 341.333 个物理扇区。这真的是每条带 342 个物理扇区吗?

对于那些想知道我为什么要问的人;我正在尝试确定相对于 RAID 类型的最有效磁盘数量,以及最佳的条带大小。


此外,我还看到https://en.wikipedia.org/wiki/Nested_RAID_levels在提出这个问题之前,我做了大量的工作,在大量 SCSI / SAS / RAID / SAN 供应商网站上寻找低级设计细节,但没有看到任何关于条带实际磁盘格式的内容。条带只是在高度概念化的层面上讨论,这很好,但并没有真正回答这个问题。

答案1

您将找到所有相关详细信息这里

基本上,您的所有假设都是正确的:RAID 50 是 RAID 5 阵列的条带化(RAID 0),而 RAID 10 是 RAID 1 阵列的条带化。

这是怎么回事身体上然而,实现在很大程度上取决于磁盘控制器;有时,额外的空间用于存储内部信息,所以你无法知道确切地除非您询问控制器供应商,否则您不知道每个字节是如何、何时和在何处使用的。

关于条纹大小:这几乎与此无关,除非你感兴趣重的性能调优;在这种情况下,它有影响,但这(再次)取决于您使用的控制器和磁盘,以及操作系统、文件系统和实际 I/O 负载。

根据经验法则,最好使 RAID 阵列的条带大小与将要格式化该阵列上的卷的文件系统的群集大小相匹配;并且应根据卷预计处理的 I/O 负载(许多小文件还是大量大文件?)来选择该大小;但这只是一个一般建议;同样,许多其他参数也会影响 I/O 性能。

另外,请记住,您可以在同一个 RAID 阵列上拥有多个卷(如果您使用的是 SAN 而不是本地存储,则更是如此),每个卷可能使用不同的群集大小并处理不同的 I/O 负载。

如果你真的想要将您的存储微调到这样的级别,您不仅需要完全控制从物理磁盘到在其上存储数据的实际应用程序的每个元素,还必须仔细分析它们并自定义许多参数,其中条带大小只是其中之一。


一个简单的案例研究:Exchange 按顺序将数据库事务日志写入 1 MB 文件;在正常操作下,它们大多被写入而很少被读取;它们会占用一些空间,但如果执行定期备份,则不会占用太多空间,因为每次完成数据库的完整备份时,它们都会被截断(即删除最旧的文件)。

存储此类数据的最佳方法是使用两个磁盘的 RAID 1 阵列,条带大小为 1 MB,电池备份写入缓存,使用 NTFS 文件系统格式化的单个卷,簇大小为 1 MB;哦,当然,你还必须存储仅有的交易日志单身的此卷上的数据库;如果您有更多数据库,则需要使用不同的卷和磁盘阵列,否则您将失去顺序 I/O 的所有好处。(顺便说一句,实际的数据库数据必须转移到完全不同的地方,不仅是为了性能,而且更主要是为了数据安全;如果您需要更多详细信息,请查看 Exchange 文档;但基本要点是,它们具有完全不同的 I/O 模式,您绝对不想失去两个都数据库和事务日志同时运行。

正如你所见,这种评估是非常强烈取决于预期的 I/O 负载,并且除了在非常特定的设置中存储 Exchange 事务日志之外,它还不足以满足任何其他要求;它可能会阻碍任何其他工作量。

存储微调是一门艺术,需要大量的分析和经验才能做到正确。

答案2

Massimo 给出了一个很好的总结,正如他所说,很大程度上取决于你所运行的工作量类型。

此外,控制器及其固件也发挥着重要作用。例如,我家里有一个 LSI 8 端口 SAS/SATA HBA,可以将其刷新为 RAID 控制器运行。戴尔也标有相同的硬件,但固件设置了不同的队列深度以支持特定的戴尔磁盘。当我在家用机器中使用 5 个 4TB WD 消费级磁盘时,我的 OEM 固件比戴尔固件的性能高出约 30%。如果我用 OEM 固件刷新戴尔卡,性能是相同的。

ConcernedOfTunbridgeWells 注意到您有旋转磁盘......

如果您能够在 Linux/Unix 上运行此工作负载,您可能会考虑使用允许 SSD 缓存磁盘的文件系统之一。

在家里,我在 Linux 上运行 ZFS,由于其灵活的奇偶校验和基于哈希的连续一致性检查,它非常可靠。它本身支持 SSD 缓存,并且仅使用适中的 SSD 缓存驱动器即可实现闪电般的速度。在 HBA 模式下使用 LSI 的 ZFS 阵列比使用 LSI 作为硬件阵列更快。工作负载是 Openstack 虚拟化(这是我的实验室机器)。

更好的方法是使用适当的 SAN 甚至 NAS,它知道如何根据特定工作负载调整控制器、缓存、条带化等。

相关内容