“不要害怕 RAID!”-kafka磁盘必备

2023-10-09 02:18

本文主要是介绍“不要害怕 RAID!”-kafka磁盘必备,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者 | louwrentius@gmail.com

译者 | 苏本如,责编 | 郭芮

头图 | CSDN 下载自视觉中国

出品 | CSDN(ID:CSDNnews)

以下为译文:

我在互联网上经常看到这样的说法:RAID很危险,RAID磁盘阵列在重建过程中失败的可能性几乎是100%,因为硬盘驱动器已经变得非常大。

我觉得没有什么比这种说法更离谱了,所以我写了这篇文章来反驳这种荒诞的说法。

对于家庭用户和小型企业来说,RAID磁盘阵列仍然是在一个地方存储大量数据的可靠和高效的方法。

对RAID可靠性的认识

互联网上有很多关于居家用户突然发现他们的RAID磁盘阵列失效的可怕故事。这些故事可能导致了人们普遍对RAID持消极态度。

你可能会指责我责怪受害者,但在很多情况下,我确实想知道这些事件到底是由于用户错误、运气不佳或真正由于RAID导致的问题。我们都知道,报道总有一种偏见:你不会听到无数没有问题的人的声音。

无论如何,对RAID的伤害已经造成了,但我仍然认为(软件)RAID是完美的。

关于不可恢复读取错误(URE)的荒谬说法

这个问题是从2007年ZDNET上发表的一篇糟糕的文章开始的。

在那篇文章中,有人认为,随着驱动器变得更大,但是由于没有同时变得更加可靠,你将看到更多的不可恢复读取错误(URE)。更多的容量意味着更多的扇区,因此任何一个驱动器出现问题的风险变得更大。

不可恢复读取错误(URE)是硬盘驱动器无法读取扇区的严重事件。对于我这样的老人来说,这听起来像是“坏扇区”的定义。那篇文章认为,平均每读取12.5TB的数据就会遇到一个URE错误。

根据ZDNET上这篇文章的逻辑,从14 TB驱动器复制所有数据可能是一个不可能完成的任务,因为在完成复制之前,你可能会遇到一个错误的扇区。

这对于RAID磁盘阵列来说是一个非常大的问题。RAID磁盘阵列重建包括完整读取所有剩余驱动器的内容。所以在RAID重建期间,你一定会遇到URE错误。

好消息是你不必担心这些。因为这不是真的。

实际上,硬盘并不是那么不可靠。相反地。我认为它们非常可靠。如果你不确认,你可以参考Backblaze 2020年第1季度硬盘统计报告。

那篇臭名昭著的ZDNET文章的预言并没有实现。硬盘驱动器的URE规范描述的是最坏的情况,它似乎更多的是关于营销(一种区分企业驱动器和消费者驱动器的方法)而不是现实。

如果ZDNET上的那篇文章是真的,那么我自己应该会遇到很多URE错误,因为许多RAID阵列的scrub/patrol读取已在不同的RAID阵列中完成。

RAID从来没有停止工作,而且将会继续发展。

清理(Scrubbing)可以抵御不良扇区的影响

当一个只能容忍一个硬盘驱动器出现故障的RAID磁盘阵列中的一个驱动器出现故障时,非常重要的一点是,所有剩余的硬盘都不能再出现任何读取错误。由于这个阵列不再有冗余,由坏扇区引起的任何读取错误都可能意味着整个阵列丢失,或者至少某些文件损坏。

每个RAID磁盘阵列都支持“清理”。它是一个RAID阵列中每个扇区都被读取的过程,这实际上会导致所有硬盘驱动器的所有扇区都会被读取。

清理(Scrub)是预先检查坏扇区的过程。如果在一个硬盘驱动器上发现坏扇区,则可以更换该硬盘驱动器,以便在将来可能的重建过程中不会造成问题。更换硬盘驱动器本身将导致磁盘阵列的重建,但是如果清理没有发现任何其他硬盘驱动器上有坏扇区,重建将不会出现问题。

一个没有经过常规清理的RAID磁盘阵列随时可能有灾难性的后果。坏扇区可能在另一个硬盘驱动器上累积,当一个硬盘驱动器实际发生故障时,整个磁盘阵列可能会因为剩余硬盘驱动器(其中一个)上未检测到的坏扇区而丢失。

如果要在RAID磁盘阵列上以可靠的方式存储数据,则需要确保对磁盘阵列进行定期的清理。即使你不使用RAID,我还是建议每个月对你拥有的每个硬盘进行一次长时间的SMART测试。

默认情况下,Ubuntu会对Linux软件RAID磁盘阵列一周进行一次清理。有关这方面的详细信息,请查看/etc/cron.d/mdadm的内容。

如果你在Linux上使用ZFS,而且运行的Linux发行版是Ubuntu,你的磁盘阵列会在每个月的第二个周日自动进行一次清理。

默认情况下,Synology或QNAP等NAS供应商都启用了数据清理。请根据你的特定NAS手册来调整清理频率。我建议每个月至少安排一次清理,且在夜间进行。

为什么RAID 5被认为是有害的?

坦白说,我也很好奇。

我注意到网上有很多人声称不应该使用RAID 5,但是这一点我不能苟同。这完全取决于具体情况。在成本和风险之间找到平衡是很重要的。

这篇文章可以追溯到2003年,它提倡不要使用RAID 5,但是它关注的是企业环境,然而即使在企业,我也看到了RAID 5的价值。

对于具有5个或更少驱动器的小型RAID磁盘阵列,我认为RAID 5非常适合。特别是如果你运行一个4托架的小型NAS,那么使用RAID 5将完全有意义。你可以在容量和可用性成本之间获得很好的平衡。

不建议创建更大的RAID 5阵列。与单个硬盘驱动器相比,具有8个硬盘驱动器的RAID磁盘阵列发生硬盘驱动器故障的可能性要高8倍。这样做的话,你就将单个硬盘驱动器出现故障的风险放大了8倍。对于较大的阵列,双驱动器故障将成为一个严重的风险。

这就是为什么对更大的RAID磁盘阵列建议使用RAID 6,因为RAID 6可以容忍两个同时发生的驱动器故障。我以前使用过RAID 6,现在我使用RAIDZ2(ZFS)作为当前NAS的基础。

我仍然在我的一台服务器上运行了一个8个硬盘驱动器的RAID 5,它承载的数据不太重要,我仍然想保留这些数据,我希望不丢失它们,但并非不惜一切代价。这都是关于风险和成本之间的平衡。请同时阅读这篇文章的后记,你会喜欢的。

确实,在重建过程中,硬盘驱动器的压力会更大,但除非RAID磁盘阵列也被大量使用,否则硬盘驱动器上的负载不会太大:数据是按顺序读取的,这对硬盘驱动器来说非常容易。

RAID的重建性能主要由硬盘驱动器的大小决定,而不是由RAID磁盘阵列中的硬盘驱动器数量决定。

几年前,我运行了一个带有20个1 TB硬盘驱动器的RAID 6,它在5小时内完成了重建。最近,我在RAID 5中测试了8个硬盘驱动器的重建(使用相同的硬盘驱动器),它也花费了将近5个小时(4小时45分)。

RAID写漏洞(write hole)

RAID 5/6的“写漏洞”经常被认为是你应该害怕的东西。

基于奇偶校验的RAID(如RAID 5和RAID 6)可能会受到一个称为“写漏洞”的问题的影响。简而言之:如果计算机突然断电,对RAID阵列的写操作可能会中断。这可能会导致对RAID阵列的部分写入,使其处于不一致的状态。

作为补充说明,我始终建议使用UPS(电池备份)来保护你的NAS,以便你的服务器可以在电池耗尽而断电之前以干净的方式关闭。

ZFS RAIDZ不受“写漏洞”问题的影响,因为它在将数据写入实际阵列之前先将数据写入日志。

Linux MDADM软件RAID还通过使用位图(默认情况下启用)来防止“写漏洞”现象。

硬件RAID还通过使用缓存的电池备份来防止这种情况。计算机重新开机后,高速缓存内存中的数据就会被写入磁盘。

对重要的数据设置警报

我认为关于RAID的可怕故事都是基于这样的一个事实:人们可能永远没有注意到关于RAID的任何问题,直到为时已晚,因为他们从未设置过任何类型的警报报(通过电子邮件或其他方式)。

理想情况下,你还应该确保系统监视硬盘驱动器的智能数据,并在关键数字(如:重新分配的扇区计数和当前挂起的扇区计数)开始上升时发出警报。

这也是个人反思的时刻。你在运行RAID磁盘阵列吗?你是否设置了警报?或者你的RAID磁盘阵列是否会在此时失败而你却不知道呢?

不管怎么说,我认为缺乏合适的警报是使RAID陷入困境的一个“好”方法。事实上,任何不受监控的存储解决方案都将是一场等待发生的灾难。

为什么人们选择不使用RAID?

如果RAID磁盘阵列发生故障,所有数据都将丢失。人们对这种风险感到不安。他们可以接受丢失一些硬盘驱动器的数据,但不能是全部。

Unraid和SnapRAID等解决方案使用一个或多个专用硬盘来存储冗余(奇偶校验)数据。其他硬盘驱动器是用你选择的文件系统格式化的,可以作为普通硬盘驱动器访问。虽然我没有使用这个产品的经验,但StableBit DrivePool的工作方式似乎与此类似。

如果你有六个硬盘驱动器,即五个硬盘用于存储数据和一个硬盘用作存储奇偶校验位,那么两个硬盘驱动器的失效将导致数据丢失,就像RAID 5一样。但是,其余四个驱动器上的数据仍然是完整的。数据丢失仅限于一个硬盘驱动器上的数据。

这样就降低了在常规软件RAID上会发生的“全有或者全无”的风险。我自己并不认为这些风险没有那么大,但Unraid和snapraid是流行的产品,我认为它们是合理的替代品。。

Mergerfs也可能是一个有趣的选项,尽管它只支持镜像。

备份仍然很重要

将数据存储在任何类型的RAID磁盘阵列上都不能替代备份。

如果要保护数据,你仍然需要将数据复制到其他存储区。你可能会选择只备份所有数据的一个子集,但至少你要承担知情的风险。

结束语

希望在以上部分,我已经充分说明了为什么RAID仍然是一个有效和可靠的数据存储选项。

如果你想发表任何观点,请在评论中分享。

附注

在撰写本文时,我对我的包含8个硬盘驱动器的RAID 5阵列(基于2 TB硬盘)进行了一次清理。我的服务器只有在我需要的时候才开机,关机的时候,很容易错过它们的定期清理窗口。

为了验证我的观点,我做了一次清理实验。你瞧,其中一个驱动器被从我的Linux软件RAID阵列中踢了出来:

sd 0:0:4:0: [sde] tag#29 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
sd 0:0:4:0: [sde] tag#29 Sense Key : Medium Error [current] 
sd 0:0:4:0: [sde] tag#29 Add. Sense: Unrecovered read error
sd 0:0:4:0: [sde] tag#29 CDB: Read(10) 28 00 9f 42 9e 30 00 04 00 00
print_req_error: critical medium error, dev sde, sector 2671943216

接送出现:

md/raid:md6: Disk failure on sde, disabling device.
md/raid:md6: Operation continuing on 7 devices.

这个硬盘驱动器显然被踢出了,因为它遇到了坏扇区。对智能数据(SMART data)的快速检查显示,已有300多个扇区被重新映射,但其中存储的数据无法恢复,从而导致读取错误。

这项清理工作显然已经完成,因为RAID仍然可以工作。

在将这个有缺陷的硬盘驱动器替换为备用硬盘驱动器后,我启动了重建过程,耗时4小时20分钟。我的RAID 5重建完成,现在一切都很好。

如果这样的事件还不能让你明白清理的重要性,那我真的无话可说了。

1.有时我读到人们用来存储的硬件时,我就会想起John Glenn(译注:传奇宇航员,第一个绕地球飞行的美国人)的这句话:“如果你准备好发射,并且你知道你坐在200万个部件的上面,我完全能体受你的感受,因为这些部件都是由政府合同中出价最低的人建造的。”

2.ZFS的工作方式不同,它只读取包含实际数据的扇区。

3.当你向RAIDZ(2/3)VDEV添加更多硬盘驱动器时,ZFS重建或“resilver”的速度似乎会变慢。我不确定最近的ZFS版本是否仍然如此。

4.ZFS和MDADM都会因为使用日志/位图来影响性能。两种解决方案都支持使用SSD来加速日志/位图以消除性能影响。大多数家庭用户可能不需要这个。

5.对于旧而小的硬盘驱动器来说,它能够存储的最小存储单元,通常是4K或512字节。

6.硬盘驱动器最好在一个有着良好空调环境的数据中心工作,你在家里可能没有这种环境。但是只要你能够将硬盘的温度控制在一定范围内,我认为这没什么大不了的。

7.ZFS既是一个RAID解决方案,又是一个文件系统,可以准确地告诉你哪个文件受到了影响。这是一个很好的功能。

原文:https://louwrentius.com/dont-be-afraid-of-raid.html

【END】

这篇关于“不要害怕 RAID!”-kafka磁盘必备的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/169634

相关文章

电脑不小心删除的文件怎么恢复?4个必备恢复方法!

“刚刚在对电脑里的某些垃圾文件进行清理时,我一不小心误删了比较重要的数据。这些误删的数据还有机会恢复吗?希望大家帮帮我,非常感谢!” 在这个数字化飞速发展的时代,电脑早已成为我们日常生活和工作中不可或缺的一部分。然而,就像生活中的小插曲一样,有时我们可能会在不经意间犯下一些小错误,比如不小心删除了重要的文件。 当那份文件消失在眼前,仿佛被时间吞噬,我们不禁会心生焦虑。但别担心,就像每个问题

常用MQ消息中间件Kafka、ZeroMQ和RabbitMQ对比及RabbitMQ详解

1、概述   在现代的分布式系统和实时数据处理领域,消息中间件扮演着关键的角色,用于解决应用程序之间的通信和数据传递的挑战。在众多的消息中间件解决方案中,Kafka、ZeroMQ和RabbitMQ 是备受关注和广泛应用的代表性系统。它们各自具有独特的特点和优势,适用于不同的应用场景和需求。   Kafka 是一个高性能、可扩展的分布式消息队列系统,被设计用于处理大规模的数据流和实时数据传输。它

工程文档CAD转换必备!在 Java 中将 DWG 转换为 JPG

Aspose.CAD 是一个独立的类库,以加强Java应用程序处理和渲染CAD图纸,而不需要AutoCAD或任何其他渲染工作流程。该CAD类库允许将DWG, DWT, DWF, DWFX, IFC, PLT, DGN, OBJ, STL, IGES, CFF2文件、布局和图层高质量地转换为PDF和光栅图像格式。 Aspose API支持流行文件格式处理,并允许将各类文档导出或转换为固定布局文件格

Kubernetes排错(十)-处理容器数据磁盘被写满

容器数据磁盘被写满造成的危害: 不能创建 Pod (一直 ContainerCreating)不能删除 Pod (一直 Terminating)无法 exec 到容器 如何判断是否被写满? 容器数据目录大多会单独挂数据盘,路径一般是 /var/lib/docker,也可能是 /data/docker 或 /opt/docker,取决于节点被添加时的配置,可通过 docker info 确定:

ios开发必备10款第三方类库

因为iOS SDK相对比较底层,所以开发者就得受累多做一些体力活。不过幸运的是,有很多第三方的类库可以用来简化很多不必要的工作.经过作者团队的慎重讨论,他们 评选出了10款能够极大提高iOS开发效率的类库,根据原文作者的评价来看,基本上有了这10款工具,做iOS开发就真的跟泡Cocoa一样了。 MBProgressHUD(进度指示符库) 地址:https://github.com/jdg/

Kafka中的数据本身就是倾斜的,使用FlinkSQL该如何处理

又是经历了一段不太平的变动,最近算是稳定了点,工作内容又从后端开发转换成了sql boy,又要开始搞大数据这一套了。不同的是之前写实时任务的时候都是用的java代码,新环境却更加偏向与使用flink sql 解决,所以记录下使用flink sql 的一些感悟和遇到的问题吧。 查看反压:         如果flink任务是这么一坨或者几坨task组合在一起,有些时候是如法看

搭建大型分布式服务(四十)SpringBoot 整合多个kafka数据源-支持生产者

系列文章目录 文章目录 系列文章目录前言一、本文要点二、开发环境三、原项目四、修改项目五、测试一下五、小结 前言 本插件稳定运行上百个kafka项目,每天处理上亿级的数据的精简小插件,快速上手。 <dependency><groupId>io.github.vipjoey</groupId><artifactId>multi-kafka-starter</ar

「Bioconductor」不要轻易相信AnnotationHub的物种注释包

Bioconductor开发的物种注释包系列集合了一个物种不同来源的注释信息,能够根据基因ID对其进行多种来源的注释,比如说基因的别名,基因的功能等。 我之前也写过一篇文章用Bioconductor对基因组注释介绍如何使用AnnotationHub下载注释数据库, 使用select(), mapIds等函数进行注释操作。我自己写一个流程也用到了它给基因ID, 如AT1G14185, 注释别名和功

Linux|操作系统运维|磁盘性能检测之fio和iostat的初步使用

前言: 有的时候,我们接手一个新的服务器的时候,需要了解该服务器的磁盘性能是否可靠,比如,磁盘是否有坏道,磁盘的读写性能是否能够符合我们将要部署的服务,例如数据库服务,如果该数据库是一个读写比较频繁也就是IO比较高的数据库,那么,该磁盘是否能够支持高IO呢? 针对以上需求,建议使用工具fio和iostat这两个工具 一、 iostat在centos7下的安装 配置update源即可 i

打破数据分析壁垒:SPSS复习必备(六)

一、数据的报表呈现 1.报表概述 (1).SPSS中的报表功能 1)Base 模块 2)Custom Tables 模块 3)  Original Tables 模块 (2).报表的基本绘制步骤 步骤一:确定基本结构 步骤二:使用对话框绘制表格的基本结构 步骤三:完善细节 步骤四:添加其余变量和统计量 步骤五:对表格中的文本进行修饰 步骤六:审核 步骤七:保存