11月 192013
 

MD是linux软RAID标准实现,MD RAID-1有两种故障处理 :resync和recovery,resync处理异常宕机导致的成员磁盘数据不同步。 recovery处理新加入或者替换磁盘时的数据恢复。

MD RAID-1故障处理的优点是故障恢复在线完成,且不太影响读写响应时间。 以resync为例: resync的同步策略是从第一个正常成员盘同步到其他成员盘,并从第一个Chunk(可以看成是RAID阵列上较长一段连续空间)开始按照扇区号增序同步。resync过程中能正常处理读写请求,读操作总是发往第一个可用的成员磁盘(可用磁盘指的是已经同步了该扇区的成员磁盘,可通过recovery_offset识别)。写操作处理则和非故障流程完全一致。读写均不需要等待resync完成, 也不需要与sheepdog一样使用读时修复机制,所以读写响应时间基本无影响。

raid-1故障处理主要缺陷是降低可靠性。 即使是三副本raid-1, resync过程中,第一个盘仍然成为单点故障点, 降低系统可靠性。举个例子:

假设给定一个三副本RAID-1阵列, 由三个成员磁盘disk1,disk2,disk3组成,给定一个扇区sector, 初始内容为99

初始状态: disk1,disk2,disk3 = 99, 99, 99
write 100 sector
write 100 on disk2
crash
当前状态为: disk1,disk2, disk3 = 99,100,99
restart
begin resync, (sector尚未开始同步)
read sector
disk1 return 99
disk1 failed
read sector
disk2 return 100 (只有两种选择,一种是报IO错误,还有一种是返回100,无论哪种情况都有问题)

resync整个磁盘的代价较高, raid-1采用两个策略降低同步的概率和范围。首先,超级快中设计一个in_sync标志, 没有IO时,in_sync设置为1,并写回磁盘。 写操作遇到in_sync=1时,则先修改in_sync=0并写回 磁盘之后才执行。其次,提供可选的写意向位图, 每个Chunk对应1位,含义是Chunk是否为脏。写操作之前若Chunk对应的位不为1,则先设置Chunk位图位, 写完成之后,再异步清除Chunk位图位。若Chunk对应的位已经为1,则直接执行写操作。有了写意向位图之后, resync只需处理设置为1的Chunk就可以了,同步数据量大大减小。写意向位图另外一个作用是加速磁盘临时故障处理(磁盘临时故障多出现于iSCSI等远程输出的存储设备),磁盘故障期间写意向位图不清零,作用是记录故障期间改动过的Chunk,当故障盘再次加入阵列时,写意向位图可加速同步过程。
写意向位图的缺点是增大写代价:增加了1次同步io,一次异步io。位图的开销与IO访问模式特别相关,若IO特别集中, 性能影响不大,若IO特别随机影响影响比较大。

参考资料:
1. md manual, http://linux.die.net/man/4/md, 说明了写意向位图, write-behind, resync, recovery等概念。
2. linux_软RAID阅读笔记.pdf, http://knighraincn.spaces.live.com/ ,吴素贞整理

Source:http://backend.blog.163.com/blog/static/20229412620121117111821131/

 回复

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>