今天和 NOC 对项目实施中工程布线、服务器安装情况进行现场检查,除了部分已知问题外,在检查一台做 RAID5 的服务器时,客户提出的一个问题引起了我的思考。 RAID5 要是有一块硬盘出现故障,会导致停机业务中断吗?现在我们机房没有 24 小时值班,如果半夜硬件故障是不是要到现场才能解决问题? <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

以前做集成方案时,对于 RAID 的选择,我通常是这样的:

若主机有连外部存储,服务器本身配置 2 146GB 15Krpm 硬盘,做 RAID1 无热备盘,仅用于安装操作系统及搭建应用环境,应用数据放在外部存储上;若主机没有连接外部存储,根据项目经费、应用所需存储空间进行配置选择,由于主机 RAID 通常不支持 RAID10 ,一般配置 N RAID1 或全局 RAID5 ,无热备盘。

现在想想客户提出的问题,确实是我事先没考虑的。由于项目采购了一台类似冷备机的服务器,这个问题现场总算是搪塞过去。本着刨根的精神,离开现场就 Google 一通。总算是弄清楚了在 RAID5 下一块硬盘出现故障对业务系统的影响。

RAID5 的实现机制就不在此描述了,网络上有很多形象的示意图一看就能明白。当一块硬盘因故障离线,读显然是不会有问题,因为故障盘的数据可以通过 RAID 校验信息重新计算得到。主要的问题纠结在写入操作,关于写入操作首先引导冬瓜头对本问题的回复:“ RAID5 坏一块盘依旧可以写,具体机制就是如果目标是坏盘上的地址,那么转为写其它盘。具体算法,写其它好盘的地址该怎么写还怎么写,如果要写坏盘上的地址,那么在内存中算好之后,并丢弃坏盘地址对应的数据,好盘的数据依然写入好盘。坏的如果是 parity 盘,该怎么写就怎么写。”

这么看来 RAID5 一块盘故障,读的性能是要降低的,毕竟大概 1/3 的数据需要通过 RAID 校验信息重新计算得到。对于写入性能影响不明显,因为故障盘所对应的数据块在 CPU/ 内存处理时就已丢弃。但由于此时写入没有冗余信息,对生产系统来说有一定的危险。因此,部分存储产品在 RAID5 一块硬盘离线,又没有热备盘的情况下,会将 RAID5 置为只读模式。当然了,这个操作是很愚蠢的,我几乎没看到没有写入的应用系统,至少还得有日志写入吧,所以如果真把 RAID5 置为只读也不就高可用了。

参考文档:

http://site.doit.com.cn/viewthread-67984