RAID0代替RAID1或5,这很疯狂吗?


14

我正在考虑为我们的一个SQL Server群集使用RAID0设置。我将概述情况,并在寻找为什么这可能不是一个好主意。同样,如果您有用例,白皮书或其他文档的人,您可以在这个主题上向我指出,那就太好了。

我们在2个数据中心中有3台服务器,它们是SQL群集的一部分。它们都在可用性组中运行SQL Server。主数据库旁边有一个副本,另一个数据库中有另一个副本。他们正在运行具有自动故障转移功能的同步复制。所有驱动器均为企业级SSD。他们将运行SQL Server 2017或2019。

我认为与其他方法相比,在RAID0阵列上运行它们会带来多种好处,并且几乎没有真正的缺点。我目前看到的唯一负面消息是主服务器上缺乏冗余,因此失败率增加了。作为专家:

  1. 如果驱动器发生故障,而不是一直运行到慢速,降级的状态,直到有人收到手动操作的通知,服务器将立即失败,导致辅助服务器保持完整的操作能力。通知我们有关故障转移的更多好处,因此我们可以更快地调查原因。

  2. 它减少了每TB容量整体发生故障的机会。由于不需要奇偶校验或镜像驱动器,因此减少了每个阵列的驱动器数量。使用更少的驱动器,发生驱动器故障的机会就更少了。

  3. 这更便宜。需要更少的驱动器以达到我们所需的容量显然会降低成本。

我知道这不是传统的商业思想,但是我有没有在考虑什么呢?我会喜欢任何赞成或反对的意见。

我并不想这样做,以提高查询性能,但是如果有有意义的建议,请随时指出。我最关心的是无法考虑或解决我从未想到的可靠性或冗余性问题。

操作系统位于单独的镜像驱动器上,因此服务器本身应处于启动状态。这些驱动器之一可以更换并再次镜像。它很小,除了系统DB之外没有任何数据库文件。我无法想象这需要花费几分钟的时间。如果其中一个数据阵列发生故障,我们将更换驱动器,重建阵列,还原并与AG重新同步。以我个人的经验,恢复比RAID5驱动器重建快得多。我从来没有遇到过RAID1故障,所以我不知道该重建是否会更快。还原将来自备份,并前滚以匹配主数据库,因此,仅将最后几分钟的日志与恢复的副本同步,主服务器上的负载增加应该非常小。


1
关于这个问题的讨论已转移到聊天中
保罗·怀特9

Answers:


19

我认为您的评估中有一个非常重要的方面:

您打算如何恢复?

当raid5丢失驱动器时,它将以降级状态运行,直到自动恢复为止。(至少如果您手边有一个热备用)。

当raid0丢失驱动器时,它将根本无法恢复。这意味着您丢失了冗余,要恢复它,您需要重建raid0,并将所有数据(不仅仅是损坏的驱动器上的数据)从现在处于生产负载的辅助数据库复制回去。也就是说,现在不是整个性能下降的raid5阵列,而是整个生产设置。

如果您无法应对raid5(或raid6)的降级状态性能损失,则应该改用raid 1 + 0。是的,它的成本更高,但是磁盘价格却是合理的,这笔钱将物有所值。

也许“主动监视raid5状态,并在驱动器发生故障时将负载转移到主驱动器上”是可以为您带来大部分好处而没有任何缺点的解决方案吗?(余不失运行的凉意因素没有任何本地冗余的,当然。)如果你的RAID5驱动器恢复花了很多时间超过一个完整的数据库中的数据同步,无论是你的团队的软件行为异常,或者你有严重的超大硬盘,我想。


16

此处应考虑驱动器故障。

想象一秒钟,我们在特定日期的驱动器的故障率为1/1000。想象一下,我们的3个阵列中每个都有20个驱动器。

因此,单个驱动器在阵列中发生故障的机会为20/1000 = 1/50。同一阵列中两个驱动器发生故障的机会接近20/1000 * 20/1000 / 2 = 200/1000000 = 1/5000。因此,通过从RAID 0切换到RAID 5,我们已经大大降低了杀死其中一个阵列的可能性。

因此,我们可以更进一步-如果一天中一个阵列失败的机会为1/50,那么一天中两个阵列失败的机会为1 /(50 * 50)= 1/2500。假设使用相同的磁盘集,两个相同的RAID 0阵列发生故障的可能性是一个RAID 5阵列发生故障的可能性的两倍。失败几率呈指数增长应该引起您的关注,因为它大大增加了多个阵列一次失败的几率

由于这些磁盘的使用寿命可能很长,因此您可以按上述方式运行这些数字并直接查看其对可靠性有什么影响-如果您可以发布驱动器规格,则可以将该计算结果添加到这篇文章中。风险是否可以接受则由您的组织决定。

要注意的另一项是,通过利用同一批次(同一工厂,同一时间)内制造的SSD可以增加驱动器故障的可能性。如果您不小心,则可能会由于此问题而导致所有3个节点都关闭。

免责声明:以上计算已简化-它们仍然相对准确。


有关此答案的对话已转移至聊天
保罗·怀特9

13

我认为与其他方法相比,在RAID0阵列上运行它们会带来多种好处,并且几乎没有真正的缺点。

当运行带有内部/直接连接存储驱动器的AG时,这是一种非常常见的配置。特别是对于NVMe或其他基于PCI的闪存存储设备。

它仅相当于将驱动器故障像服务器故障一样对待。如果使用少量的固态驱动器,则驱动器的MTBF确实没有比服务器的其他固态组件低很多,因此您只需将每个驱动器视为故障的点即可。服务器,并在驱动器发生故障的情况下更换/重建服务器。


2

我对您要达到的目标很感兴趣?您提到自己,您不是想从这种设置中获得性能提升,那么您想获得什么收益呢?

请注意性能问题:如果您正在运行企业级SSD,那么RAID计算是否真的需要改善它的瓶颈?

考虑到您的3个职业选手,我认为您没有充分考虑过这一点:

  1. SQL故障转移会立即发生吗?是什么导致故障转移自动触发?一旦有人碰到服务器,服务器将使驱动器脱机吗?如果它只是一个磁盘上的坏扇区怎么办?如果SQL不会损坏坏扇区,它将进行故障转移吗?我对此不确定100%。

  2. 它是否减少了每TB容量整体发生故障的机会。您的想法似乎是更少的磁盘意味着更少的故障点,但是我认为这是不对的。如果您有1个磁盘或10个磁盘(或100个磁盘),则出现1个磁盘故障的几率保持不变,但是对于RAID 0,这也意味着灾难性故障。

  3. 要获得RAID5,额外的SSD花费太多吗?我知道RAID1或1 + 0可能会增加预算,但是增加1个磁盘?

在没有冗余的情况下,如果磁盘发生故障且RAID脱机,则该节点将脱机,直到您重建RAID并从头开始还原所有数据库。您将采取什么流程来实现这一目标?您无法从可用性组中删除数据库,因为这将停止向DR的复制,但是如果您不执行任何操作,则其他两台服务器将无法截断其日志文件。那样行吗?如果在一个漫长的周末的星期五晚上失败了,该怎么办?还可以吗 您的中学可以应付这么多的数据吗?

我最后的问题是您提到的重建时间会更快。您是否100%确定会更快?快多少?

Brent Ozar服务器设置仍然是我设置新SQL实例的指南。本指南的第一点是确认您没有对任何驱动器使用RAID0。

====更新====

再想一想,当辅助服务器与主服务器不同步时会发生什么?即使使用了同步复制,您的辅助服务器仍可以自动恢复为异步状态,一旦这样做,您将失去自动故障转移的能力,因为任何故障转移都将导致数据丢失。发生这种情况的几个示例:

  1. 重建非常大的索引-复制可能落后于两个或两个辅助数据库
  2. 修补辅助磁盘时,RAID0上的磁盘故障。您正在修补的服务器可能由于主服务器离线而无法恢复在线。

它们是极端情况,但可以根据当时丢失的内容进行分类。


关于第3点,如果增加或减少三个磁盘的成本是预算的成败原因,那么当一个磁盘发生故障时,从哪里来更换磁盘的钱又将从何而来呢?
的CVn

@Greg我可能没有仔细考虑所有事实,这就是为什么我问这个问题。我想我会说我正在整体上提高效率。要回答您的问题:1.是。阵列的故障将立即导致AG发生故障到另一个节点。坏扇区取决于是否是可恢复的位错误,但是无论磁盘是否在任何类型的RAID中,这都会导致故障。2.更少的磁盘将减少阵列中发生故障的机会。RAID0将增加阵列故障的机会。3.不,省钱是振作。
zsqlman

@Greg很好的跟进问题,有些还没有完全充实。服务器具有三层冗余,其中有许多层冗余。恢复所有数据库都可以轻松编写脚本。如果某个节点发生故障,我们将从AG踢出该副本,从而消除了Tlog积压问题,即使不删除该节点,我们也有足够的空间来容纳几天的日志增长。关于恢复时间,我只有一个数据点,没有更多的备用硬件要测试。我们只有1个RAID故障,恢复花费了2天以上的时间,我们可以在8个小时内完成恢复。
zsqlman

@zsqlman-我添加了一个额外的时间来考虑由于没有RAID而可能丢失数据的时间。另外,我认为减少故障的逻辑仍然存在缺陷。RAID中包含较少磁盘的一个磁盘发生故障的几率与RAID中包含冗余的一个磁盘发生故障的几率相同。减少磁盘数量并不能减少任何一个磁盘发生故障的风险-每个磁盘与其他任何磁盘发生故障的可能性一样。
格雷格

您是正确的,每个磁盘都有相同的故障几率。更少的磁盘意味着更少的故障机会。
zsqlman
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.