阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

你知道RAID中的Write Hole问题吗?

276次阅读
没有评论

共计 2683 个字符,预计需要花费 7 分钟才能阅读完成。

RAID 系统中会存在一个称之为 Write Hole 的问题,这到底是一个什么问题?会给用户带来什么影响?目前开源 RAID 系统中如何解决这个问题?这类问题需要采用什么方式来解决呢?存储老吴从研发的角度和大家一起分析一下这个问题,看看这个问题的本质以及解决思路。

Write Hole 是一种非常形象的描述。对于一个采用条带内部通过校验数据进行数据保护的系统,当应用程序正在更新条带内部数据的时候,如果系统突然断电,条带数据无法正常更新完成,那么此时就会出现条带中的数据部分更新完成。在这种情况下,当系统重启之后,条带中的数据是不完整的,校验数据和条带中的有效数据无法匹配上,条带处于数据不一致的情况。这种问题就被称之为 Write Hole 问题,如下图所示:

你知道 RAID 中的 Write Hole 问题吗?

在更新条带数据的时候,D2 数据被更新成了 D2’,但是条带的校验数据 P、Q 没有被更新完成,此时系统由于发生故障而重启。在这种情况下,条带数据处于不一致的状态。系统重启之后,通常 RAID 系统无法感知这种数据不一致的条带。在这种情况下,如果条带中的 D3 再次发生了故障,那么需要通过校验数据 P 恢复 D3。在数据恢复过程中,使用到了 D2’数据,那么显然恢复出来的数据会发生错误,不再是原来的 D3 数据。所以,数据不一致的条带将会进一步引入数据正确性的问题。即 Write Hole 问题不仅破坏被更新过的数据,进一步会潜在影响未更新数据的正确性,在极端情况下会影响整条带数据的正确性。

考虑在发生 Write Hole 问题的时候,即在条带数据更新时,系统突然断电,RAID 系统中出现若干数据不一致的条带。在系统重启之后,针对这些数据不一致的条带,可以采用全系统扫描的方式对数据不一致条带进行修复。这也是目前很多 RAID 系统所常用的方法,通过这种方式可以防止数据不一致条带进一步导致未更新数据的正确性问题。在 RAID 系统中通常存在 SYNC 功能,当系统非法重启之后,可以通过 SYNC 功能对 RAID 中的所有条带进行检查,并且将数据不一致条带进行修复。这种方式可以防止 Write Hole 问题的扩散,但是还是会导致 RAID 系统中部分数据的彻底丢失。

为了彻底解决 Write Hole 问题,在设计 RAID 的时候可以采用如下两种方法:

1,采用文件系统的 Journal(日志)的设计思想,实现写请求的原子处理

2,借助于采用非易失性内存做为写缓存,达到原子写操作的目的

这两种思路本质上是类似的,第二种是对第一种的优化。我们知道文件系统在数据更新的时候为了保证数据更新的原子性,可以采用日志的方式,把一次数据更新操作看成一次 transaction(事务)。即不管一次数据更新操作有多少次 IO,从外部来看这是一次原子操作,可以称之为 atomic write。当 atomic write 中间过程发生故障时,系统重启之后可以继续操作,保证数据要么更新完成,要么完全没有写入,不会存在中间状态。RAID 系统想要解决 Write Hole 的问题,也需要引入这种 Atomic write 的机制。很直接的想法是在每次 RAID 进行条带数据更新的时候,首先记录一下日志,保存事件类型以及相关的数据;然后再将数据提交到条带中;当条带数据全部更新完成之后,清除日志数据。这种方式可以保证原子写,即使在条带数据更新过程中发生系统故障,系统重启之后,通过日志数据可以继续写过程,保证条带数据完全更新完毕,并处于数据一致的状态。

日志的方式看似完美,但是会严重影响性能。在磁盘存储系统中,日志更新非常耗时,一次更新需要进行多次磁盘 IO 操作,如果日志存储空间和条带存储空间在物理上不连续,那么将会引入磁盘抖动问题,严重影响性能。对于闪存存储系统,引入日志系统之后,所有的数据操作将会引入双倍的数据写入操作,写放大问题变得非常棘手。所以,在开源 RAID 系统中,都没有提供这种日志操作方式,通常需要上层的文件系统来解决这种 write hole 的问题。在商用的一些 RAID 系统中,为了保证极致的数据可靠性,有些系统实现了这种日志数据更新方式,达到 Atomic Write 的目的。

另一种比日志方式更好的方法是引入非易失内存 NVRAM。在更新 RAID 数据的时候,首先将数据写入非易失内存中,当 NVRAM 中的数据聚合完毕之后再更新写入条带。当条带中的数据更新完毕之后,再将 NVRAM 中的数据清楚。在条带数据更新的过程中,如果系统出现异常重启,由于 NVRAM 中依然存在未完成更新的数据,所以,条带中的数据将会被再次更新,不会存在中间数据状态,不会存在 Write Hole 的问题。

采用 NVRAM 的这种方法是比较完美的 Write Hole 解决之道。对于硬 RAID,往往采用热备电池或者超级电容的方式保护 RAID 卡上的内存,起到的就是这个作用。所以,和软 RAID 相比,硬 RAID 在这一点上会更胜一筹。在软 RAID 中,可以在系统中使用 PCIe NVRAM 或者 NVDIMM 来实现 RAID 的非易失数据缓存。通常在存储系统中,软 RAID 会和文件系统、上层的应用系统进行配合,因此,NVRAM 也会和文件系统进行共享,从而解决掉 Write Hole 的问题。EMC 的很多存储系统就会采用非易失内存 NVRAM,让文件系统与 RAID 进行配合,避免 RAID 处于 Write Hole 的状态。

Write Hole 是 RAID 的一个比较难于解决的问题,但是借助于最新 NVDIMM 等非易失内存技术之后,该类问题可以有效的避免和解决。

如何在 Linux 上构建 RAID 10 阵列  http://www.linuxidc.com/Linux/2014-12/110318.htm

Debian 软 RAID 安装笔记 – 使用 mdadm 安装 RAID1 http://www.linuxidc.com/Linux/2013-06/86487.htm

常用 RAID 技术介绍以及示例演示 (多图) http://www.linuxidc.com/Linux/2013-03/81481.htm

Linux 实现最常用的磁盘阵列 – RAID5 http://www.linuxidc.com/Linux/2013-01/77880.htm

RAID0+ 1 和 RAID5 的性能测试结果 http://www.linuxidc.com/Linux/2012-07/65567.htm

Linux 入门教程:磁盘阵列(RAID)http://www.linuxidc.com/Linux/2014-07/104444.htm

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2015-08/122119.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计2683字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中