NoOps

Ops make no ops | Ops的目标是没有Ops,嗯!

SSD阵列卡方案优化:考虑使用RAID 50替代RAID 10

作者: |   11,951 浏览  | 

大家都知道SSD成本比较高,而不少用户在考虑可用性时都会选用RAID 10作阵列,这样无疑又增加了成本。然而RAID 10的可用性也并非百分百完美。为了能够平衡可用性和成本,因此最近一直在研究性价比更高的RAID 50,它提供了接近RAID 10的可用性并且接近RAID 5的成本,像是在高可用的RAID 10和低成本的RAID 5之间的取了一个平衡点。

 

为了能够直观了解不同RAID类型下的故障可用性,我们首先做个简单的可用性分析(以8盘RAID 10的同等容量作对比):

RAID 50中:4块盘组成单组RAID 5,然后两组RAID 5再组成RAID 0最后得到8块盘的RAID 50

ssd_r50_r10_01b

案例分析:

  • 第1块盘的容错概率都是100%,可见磁盘阵列最基本的能力就是容错,然而不同级别的阵列能够提供的数据保护能力也是不同的;
  • 从第2块盘开始除了RAID 6能够提供100%的故障可用性以外,其他包括RAID 10在内都不能提供完美的解决方案。同时我们可以发现RAID 5的容错能力是四者中最差的,但是要达到同样容量所需要的盘数量也是最少的,如果故障运维较为及时的话RAID 5是一个性价比较高的方案,不然在第一块盘故障后至阵列修复期间如果发生第二块盘故障就会导整个阵列故障(数据全部丢失),这就是风险所在;
  • RAID 6当然是较为可靠的方案,但是它要牺牲两块盘的容量并且性能也较差(后面有性能测试说明),所以要权衡性能和可用性;
  • 当然重点还是RAID 10和50:我们发现50在第二块盘故障时的可用概率和10比较接近,由于上述案例中只有两组RAID 5因此只能提供至最多两块盘的容错,如果RAID 5的组数量更多的话能够容错的盘数也将更多,且可用概率也会更高。

我们以9块盘RAID 50(3组RAID 5)为例作分析(达到相同容量的RAID 10需要12块盘):

ssd_r50_r10_02

再以12块盘RAID 50(4组RAID 5)为例作分析(达到相同容量的RAID 10需要16块盘):

ssd_r50_r10_03
上面对比中RAID  50已经能够容忍第3甚至第4块盘的故障,只是可用性相比RAID 10低了些,但是两者都不能达到完美的100%,所以权衡可用性和成本RAID 50还是有相当大的优势。

 

接下来看看性能,为了能够很好地分析性能,我们沿用了第一组对比方案的作性能分析:

ssd_r50_r10_04

 随机读分析:

  • 理论上认为R10性能最好,真实测试数据显示4K、8K数据块下R5、R50、R6的性能都要优于R10;
  • 当数据块增大到16K、32K时,R10的多盘优势才被逐渐体现出来。

随机写分析:

  • 4K由于R50、R5由于有大量校验计算一定程度上影响了性能,但随着数据块逐渐增大,盘数量的优势也显现出来。当数据块达到和超过8K时,R50性能全面超越了R10;
  • R10由于存在R1的写同步问题,因此只有4块盘在支撑并发写,随着数据块的增大,R50和R5的多盘性能优势开始发挥。

混合随机读写分析:

  • 得益多盘和无校验计算,混合读写R10领先;R50其次,和R10相差27%,性能也较为接近,R5和R50性能为线性关系,R6性能最差。

顺序读分析:

  • 由于不存在校验计算,顺序读性能基本上由盘的数量决定;R50和R10性能也较为接近,同盘数的R6和R50性能相当,而盘数较少的R5性能相对前三者要弱一些,符合预期。至于为何R10性能无法线性增加,主要是因为阵列卡本身的性能限制。

顺序写分析:

  • 顺序写R5被优化得最好;R50由于需要同时计算两次校验因此损失了一些性能,和R10性能相当,当数据块达到512K时,多盘优势进一步体现出来了,拉开了与R10的差距;R6由于校验和计算的实现较为复杂,顺序写性能也是最差的。

 

再来看看这些阵列方案的性能和容错特性:

ssd_r50_r10_05

性能测试结论:

  • 性能测试显示,相同容量的R50和R10性能接近:其中小块文件的随机读R50要全面好于R10,随机写4K虽然R50和R10差距在28%,但是块增大后R50要全面优于R10。顺序读写方面,R50和R10十分接近。
  • 容错方面,R50接近R10:第二块盘容错率R50十分接近R10,两者相差30%。R10的优势主要是在有一定的概率提供第三、甚至第四块磁盘的容错率,但是考虑到并非100%容错,因此从容错角度来看R50虽然和R10有一些差距,但也已体现出较好的容错率,至少优于R5。而且R50搭配灵活,甚至可以指定3组R5以达到最大3块磁盘的容错;
  • 成本方面,R50有很大优势:按这个配置计算R50只有R10的3/4。

 

总结:

RAID 50提供了接近RAID 10性能、可用性以及接近RAID 5成本的特性,具有较好的整体性价比优势,所以考虑使用RAID 50替换RAID 10把!

9 Comments

  1. 2015/03/18 at 4:55 下午
  2. 4admin2root
    2015/04/16 at 12:13 下午

    可以考虑下craid

  3. 2015/04/20 at 11:19 下午

    请教小米运维团队,关于性能分析的中的数据具体是使用那种工具测试得出的(IOzone?),另外那张图很漂亮不知道是如何制作的?

    • 2015/04/20 at 11:20 下午

      补充一下自己的猜测,图片不会是使用Excel制作的吧?

    • 麒麟
      2015/05/06 at 3:36 下午

      fio

  4. 2015/05/05 at 5:47 下午

    首先感谢楼主的分享,看得出来,小米在这方面下过一些功夫。但是几点要说明一下,免得对其他人造成误解:
    1、R10和R50的盘数不一样,这样的对比是不是过于牵强了?我觉得,保证二者在相同盘数上的性能情况,比保证二者在相同容量上的性能情况来得更加有意义一些吧。
    2、stripe size对其中的影响也很大,不能在不考虑strip size的情况下,说、片面地说大于8K时的随机写R50要优于R10。
    最后,补充一句,现在如果真的要提升SSD的利用率,大部分情况下,使用直连卡,比Raid卡要经济很多,在软件层来保证数据的安全性,其可靠性不比raid卡低,这一点在我厂已经得到了验证。同时,据我所知,腾讯、百度在全SSD机型上都是使用的直连的方式。

    • 麒麟
      2015/05/06 at 3:47 下午

      同样的容量是基于对成本优化的考虑;
      条带默认设置都是128K,阵列卡下SSD在条带化后存在数据位偏移(Offset),非4KB原生对齐;再加上阵列卡缓存以及SSD缓存,影响8K+的随机性能已经不是条带大小;因此你的说法偏理论和理想化,实际场景中IO子系统的结构更复杂;
      最后那一点,使用阵列卡考虑的是业务的使用场景,分布式业务用直连卡自然是更合适。

  5. race
    2015/05/22 at 4:46 下午

    如果一个raid5组中坏了2块盘,是不是raid50也就不可用了?上面的表格是每组raid5各坏一块的统计么?

  6. 2015/08/16 at 10:13 下午

    强烈支持,正在考虑SSD方案。

4admin2root 进行回复 取消回复