软件 RAID10 适合后期扩展

软件 RAID10 适合后期扩展

我想知道在 Linux 上的软件中创建 RAID10 的最佳做法是什么,并且能够稍后通过添加磁盘或扩展下面的卷来进行扩展。

我在亚马逊上使用 EBS,我想创建 8x1GB RAID10,但可以根据需要进行扩展,尽可能减少数据迁移(当然还有停机时间)。

如果 MDADM/LVM 中的任何一个组合是最佳的,那么哪种组合是最佳的,我需要注意性能或稳定性方面的权衡吗?

答案1

Amazon 不推荐使用 RAID1(它是 RAID10 的一部分)。请参阅“Amazon EBS 卷耐用性”http://aws.amazon.com/ebs/他们指出:

“由于 Amazon EBS 服务器在单个可用区域内复制,因此在同一可用区域内跨多个 Amazon EBS 卷镜像数据不会显著提高卷的耐用性。”

根据第三方基准和亚马逊的声明,我相信 RAID0 可以提高性能。我的印象是,人们似乎在 RAID0 中使用最多 4 个 EBS 卷可以获得最大的好处,而超过这个好处就会减少。确保您使用的是具有高 IO 带宽的 EC2 实例类型。

LVM 本身可以跨多个 EBS 卷进行条带化,从而有效地实现 RAID0。如果您已经打算使用 LVM 来添加卷以扩大文件系统,那么这可能比在 mdadm RAID0 之上使用 LVM 更容易管理。

答案2

对你的问题的简短回答是,据我所知,你不能扩大 Linux 软件 RAID 分区,所以 RAID 不会帮助你,但是 RAID10 出于许多其他原因是一个好主意,而 RAID0 几乎总是一个坏主意如果你关心你的数据或停机时间。我在互联网上看到很多关于使用 RAID0 与 EBS 卷的建议,除了最特殊的情况外,这绝对是一个糟糕的想法。

对于如此小的卷集(您说的是 8x1GB,因此可用 4GB),我将跳过所有这些复杂性并使用单个卷,您可以使用 XFS 快照将其扩展到 1TB。只有几 GB 的数据,您应该能够足够频繁地对卷进行快照,这样数据恢复就变得很容易,并且您不会最大化 I/O。或者,如果您能负担得起超过当前每月 0.80 美元的磁盘费用,那么现在就将其扩大,不用担心这个头痛问题。如果您真的是指 8x1TB 而不是 8x1GB,请继续阅读。


几周前我写了一篇关于这个的文章 http://blog.9minutesnooze.com/raid-10-ebs-data/ 并于 5 月份在 Percona Live 上简要讨论过这个主题: http://www.percona.tv/percona-live/running-an-e-commerce-database-in-the-cloud

我将在这里总结一下。

在物理硬件领域,磁盘发生故障的方式是众所周知的,而且在某种程度上是可以预测的。另一方面,EBS 卷的故障方式却很不寻常。您不会看到磁盘“崩溃”——mdadm 永远不会自动将磁盘标记为故障。您看到的是卷经历了严重且不可恢复的性能下降。有时卷只是速度很慢,但有时它们会完全锁定,利用率为 100%,没有执行 IOPS,基本上变得不可用。有时磁盘会恢复到足以从中获取数据的状态,但有时不会。这就是 2011 年 4 月 EC2 大灾难中发生的事情。

如果您的 RAID0 处于这种情况,那么您将没有多少选择。阵列将被锁定,数据将卡在其中。有时您可以对阵列中的卷进行快照并恢复快照,但一致性很难保证,并且您将有停机时间 - 可能几个小时,因为写入快照是一个非常缓慢的过程,并且 RAID 阵列往往很大。

但是,如果您使用 RAID10,并且最终得到其中一个性能不佳或严重降级的卷,您需要做的就是将降级的卷标记为故障,将其从阵列中删除,然后替换它。我在我们的活动主数据库服务器上执行过很多次此操作,这些服务器在 RAID10 组中有 10-20 个卷(不要使用那么多。除非您需要 10TB 阵列,否则这是过度的)。

我对此的证明可以追溯到我使用 EC2Pocalypse(以及多次其他小型 EBS 中断)的经历。虽然互联网上一些最受欢迎的网站停机了 4 天,但我的雇主在我们的生产环境中经历了不到一小时的停机时间,因为我们能够通过移除故障磁盘来恢复 RAID10 阵列。如果是 RAID0,那将是一个 SOL 情况。

缺点是薄弱环节综合症……阵列的性能与性能最差的成员有关。卷越多,性能下降的几率就越大,但这实际上是一个监控问题。如果愿意,甚至可以自动恢复,尽管我没有这样做。使用 RAID10,您会增加阵列出现问题的几率,但也会增加恢复的几率。使用 RAID0,每个额外的驱动器只不过是额外的负担。

我希望这会有所帮助。

答案3

我前段时间做过这个基准测试。我使用的命令如下:http://wiki.linuxwall.info/doku.php/en:ressources:articles:benchmark_ebs

据我所知,将存储拆分成这么多 EBS 卷,然后使用 mdadm 和 lvm 进行聚合,这样做没有什么好处。但是,使用 RAID 1 和 LVM 可以防止单个卷丢失,同时保留稍后添加另一对 RAID 1 的容量,这样做有明显的优势。

但是,回答你的问题:

您无法扩大 RAID 卷。如果您创建 RAID 10 (4xEBS) 并使用 LVM,则可以添加另一个 RAID10 并将其添加到您的 LVM 卷。但您无法扩大初始 RAID 10。

您可以使用以下命令创建 RAID 10:

# mdadm --create /dev/md1 --verbose --level=raid1 --raid-devices=2 /dev/sdh1 /dev/sdh2
mdadm: size set to 104857536K
mdadm: array /dev/md1 started.

# mdadm --create /dev/md2 --verbose --level=raid1 --raid-devices=2 /dev/sdh3 /dev/sdh4
mdadm: size set to 104857536K
mdadm: array /dev/md2 started.

# mdadm --create /dev/md3 --verbose --chunk=32 --level=raid0 --raid-devices=2 /dev/md1 /dev/md2
mdadm: array /dev/md3 started.

您可以使用以下命令在此 RAID10 上创建 LVM 卷:

# pvcreate /dev/md3
  Physical volume "/dev/md3" successfully created

# vgcreate RAID10 /dev/md3
  Volume group "RAID10" successfully created

# lvcreate -L 190G -n store RAID10
  Logical volume "store" created

答案4

这并非 EBS 所特有的,但 mdadm 3.3 发布公告中有一个好消息:

这是一个重要的新版本,因此如果出现一些问题,请不要太惊讶......

以下是一些亮点:

...

  • RAID10 阵列可以重新塑造以改变设备数量、更改块大小,或更改“near”和“offset”之间的布局。这将始终更改 data_offset,如果没有空间移动 data_offset,则会失败。

...

根据这个答案在 U&L 上,您至少也需要 linux 3.5。

相关内容