1 传统RAID
硬盘阵列(Redundant Arrays of Independent Disks,RAID),是由很多块独立的硬盘,组合成一个容量巨大的硬盘组。
1.1 阵列卡
现如今,基本所有的服务器都通过RAID卡对硬盘进行管理。硬盘插入到服务器的槽位后由背板的线缆连接RAID卡进行一个统一的管理,然后提供给操作系统,操作系统不能直接使用硬盘。
以下为一些常见的RAID级别:
RAID 0
将数据分成若干相等大小的数据块,把他们写在不同的硬盘上,以独立的方式实现多块硬盘的并读访问,并发执行I/O操作。基本能够发挥出所有硬盘的性能,但是RAID0没有冗余机制,硬盘越多固然性能越好,然而出现故障导致卷组不可用的概率也越高。建议配合上层应用能够提供冗余的场景一起使。
- RAID 1
当上层数据下发时,会将数据完全一致地写在两块硬盘上,实现数据冗余,可以用两块硬盘中读取数据,提升读性能。当一块硬盘发生故障,系统自动从另一块硬盘读取数据,提高可靠性,但是成本更高,适用于对数据可靠性要求高的应用,如:将系统盘放在RAID 1上面。
- RAID 5
将数据和相对应的奇偶校验信息分别存储在不同的硬盘上,奇偶校验信息占一个硬盘的空间,允许损坏一个硬盘。当一个硬盘损坏时,可以根据剩余的数据和相对应的奇偶校验信息计算出损坏的数据,恢复数据时性能会受到较大的影响。RAID 5写性能偏低,尤其是随机写性能,建议在读写不太频繁的场景上使用,如:用作数据备份。
- RAID 6
与RAID 5 相似,拥有两套独立的奇偶校验信息,可以允许损坏两块硬盘。
1.2 缓存策略
RAID卡除了将硬盘组建不同RAID级别的功能之外,还能提供加速读写的缓存功能。
每张RAID卡都拥有大小不等的缓存。
- Read Policy
1、Read Ahead:预读缓存模式,将当前读取的后续块数据也预先读取保存在缓存中,可以快速对应后续的读取操作。当第二次读取相同的数据时,不需要再次从硬盘里面读取数据,频繁读取的热点数据保存在缓存中,可以大大提升读性能。
2、No Read Ahead:不通过缓存进行读取操作。
- Write Policy
1、Write Back:WB回写模式,该模式会将上层的数据先写入RAID卡缓存当中,再将缓存中的数据写入硬盘中,对于上层应用而言,当数据写入缓存中时就已经认为落盘成功了,因此WB模式可以提升写性能。
2、Write Througt:WT直写模式,该模式会直接将数据写入到硬盘当中。
开启WB模式的前提是RAID卡带有电池,确保在服务器断电的情况下依然能将缓存里面的数据写入硬盘中。当服务器的RAID卡电池出现故障或者电量不足的情况,WB模式会被强制切换成WT模式,防止出现数据丢失,然而读策略不会受到任何影响,这是因为写到缓存里面的数据是脏数据,与硬盘里面的数据不一致,而读到缓存里面的数据与硬盘里面的数据完全一致,即使丢失了也没有任何关系。
WB模式能够提升写性能,这有个前提是上层下发的数据量不大,可以被RAID卡缓存所容纳,但是当上层下发大量数据时,缓存很快就会被击穿。我们可以通过一个实验去验证,将一块硬盘的写策略调整为WB模式,然后利用fio工具去模拟上层数据下发
可以看到,当上层有大量数据下发时,缓存很快就被击穿,写性能呈现断崖式下划
1.3 性能对比
上文提到了各个RAID级别的特点及优劣势,下面我们通过fio工具测试,直观的感受一下不同RAID的性能。
一块盘RAID0基本可以发挥这块盘的所有性能,通过以上测试数据可以发现:
- RAID1使用两块盘,读能发挥出两块盘的性能,而写性能基本与单块盘一致,说明可以同时从两块盘读取不同的数据内容,而写时需要将相同的数据写在两块盘中。
- RAID5使用三块盘,读能基本能发挥出三块盘的性能,但是写性能不高,尤其是随机写性能更是惨不忍睹
2 VROC
现如今,对硬盘的性能要求越来越高,SATA、SAS因为本身的缺陷,性能基本不会超过600MiB/s,因此对NVMe盘的需求越来越多,尤其是数据库等对底层硬件性能要求比较高的行业。
NVMe盘直通到cpu,无法通过RAID卡进行管理,因此也不能通过RAID卡去创建不同的RAID级别。目前给NVMe做raid的方式有两种,一种是软RAID,另一种是Intel VROC
软RAID
软RAID的实现没有硬件参与,完全通过软件模仿磁盘阵列的方式来实现,通过CPU内核计算RAID逻辑
Intel VROC
Intel VROC 是一种混合 RAID 解决方案。它的属性与硬件 RAID 类似,是因为英特尔卷管理设备(英特尔 VMD)的一项关键芯片功能是通过新的英特尔至强可扩展处理器提供的。英特尔虚拟 RAID on CPU (VROC)利用英特尔 VMD 来聚合 NVMe 固态盘,从而实现可引导 RAID。英特尔 VROC 还具有软件 RAID 等属性。例如:它使用一些 CPU 内核来计算 RAID 逻辑。由于这种软件与芯片相结合,英特尔 VROC 称为混合 RAID 解决方案。
2.1 VROC的使用方式
目前,英特尔至强可扩展处理器基本都支持VMD,但是并不是cpu支持就可以使用VROC了,需要满足以下几个条件:
1.VMD是一个比较新的技术,需要将服务器的引导模式调整为UEFI引导模式。
2.需要VROC Key,Intel VROC 是一种通过 OEM 或 ODM 与支持服务级别协议一起销售的许可产品。Intel VROC 硬件密钥是获取Intel VROC 软件许可的机制。某些 OEM/ODM 通过在其主板上添加密钥标头,构建了支持Intel VROC 的服务器和工作站。每个VROC Key的售价在100美金左右。
VROC Key有几个不同的型号,每个型号Key的功能都有一些差别,有些型号的Key可以支持其余品牌的NVMe盘,但是出于兼容性考虑,还是不建议使用其余品牌的NVMe盘 。
3.服务器支持,并不是每一台服务器都可以安装VROC Key,需要服务器的主板有相应的槽位可以插入VROC Key。
2.2 VROC与软raid
VROC的管理方式以及系统上面的展示与软RAID非常相似。 \
VROC与软RAID都使用mdadm的命令进行管理,VROC需要安装相对应版本的mdadm rpm包。
rpm –U mdadm-4.0-13.1.IntelVROC6.0.el7.x86_64.rpm
VROC与软RAID这么相似,那么在性能上有什么差距吗?我们可以通过实验看一下
- RAID 0
为了效果更加明显,使用了三块盘创建RAID0,结果显示VROC与软RAID没有明显的性能差距
- RAID 1
VROC与软RAID组建RAID1各项性能基本一致
- RAID 5
VROC与软RAID组建的raid5各项性能基本一致,但是两者的写性能都是偏低的,通过观察cpu的使用率可以发现,VROC与软RAID都是单核进程,所在core的使用率也已经被打满了,cpu的性能也是制约RAID5写性能的一项因素
通过以上的测试可以发现,VROC与软RAID的性能基本是一致的,因为两者都需要使用cpu内核去来计算RAID逻辑。而VROC有硬件的支持,具备了一些其他的功能
2.3 VROC其余功能
1 可引导RAID
VROC可以作为系统盘使用,VROC有硬件的支持,在没有安装操作系统之前就可以在BIOS里面使用NVMe盘创建RAID,然后再将系统安装在这块raid卷组上面。
2 备份功能
VROC拥有热备功能,当检测到设备故障时,热备盘可用于重建RAID
3 NVMe盘定位
NVMe盘一直没有很好的方式去定位,而VROC可以准确定位到NVMe盘
ledctl locate=/dev/nvme0n1
通过以上命令可以使指定的NVMe盘闪灯
3 总结
性能方面,VROC与软RAID基本一致。软RAID的优势是不需要额外的成本,而VROC优势是有硬件的支持,具备一些特性(可引导RAID、NVMe盘定位等),以及有Intel的技术服务。两者各有优势,所以,可以根据实际的需求去选择使用哪一项技术