华为RAID2.0+是华为存储在传统RAID基础上研发的新一代RAID技术,也称为块虚拟化技术。该技术将物理空间和数据空间分散分布成分散的块,可以充分发挥系统的读写能力,方便扩展,也方便了空间的按需分配,数据的热度排布,迁移。
RAID 2.0+最典型的特点是不再使用整块的硬盘作为RAID基础单元,而是将硬盘切分成一定容量的小块,从不同的硬盘上选取一个小块就可以组成一个小的RAID组。这样,RAID单元不再局限在单一盘,通过更多的盘提供输出能有更高的盘性能。而且遇到硬盘失效时,并发多盘写入可以解决重构写入瓶颈问题,理论上重构性能可以达到与参与重构盘数量同样的性能提升。
华为RAID2.0+采用底层硬盘管理和上层资源管理两层虚拟化管理模式。在系统内部,每个硬盘空间被划分成一个个小粒度的数据块,基于数据块来构建RAID组,使得数据均匀地分布到存储池的所有硬盘上。同时,以数据块为单元来进行资源管理,大大提高了资源管理的效率。
要了解为什么会出现RAID2.0,就不得不思考传统的RAID存在的问题和弊端。那么传统的RAID有哪些问题和弊端呢?
传统RAID弊端:
(1)数据恢复时间较长
传统RAID在数据重建方面表现较差,由于传统RAID技术的可靠性是通过磁盘间的冗余来实现,随着数据量的不断增大,我们知道数据重构时,需要通过读取非故障数据和校验数据,并对读取的数据进行相应处理,将数据恢复到热备盘中,更换故障硬盘后再将热备盘数据回拷到更换后的硬盘中,这个重构的过程可能需要十几个小时,甚至几十个小时才能完成,这样就有发生二次损坏的概率,一旦发生二次损坏,可能会造成数据全部丢失无法恢复。
(2)读写性能瓶颈:
传统RAID技术中,热备盘是写操作性能瓶颈点,同时RAID组中的其他磁盘是读操作性能瓶颈点,大容量磁盘对传统RAID技术的挑战就在于此。
(3)扩展性差:
传统RAID技术中,当存储容量增加时,需要增加更多的磁盘来组成更大的RAID组,导致RAID组中的磁盘数量过多,难以维护和管理。
(4)可靠性问题:
传统RAID技术中,当RAID组中某块磁盘发生故障时,处于同一个RAID组中的其他盘将会存在大量的读操作去获取条带数据,然后生成故障盘上的数据,写入热备磁盘中,这是一个完整的数据重建过程。这个过程会造成若干块磁盘存在读操作,一块磁盘存在写操作,增加了系统的复杂性和故障点。
考虑到传统RAID技术存在诸多弊端,于是华为推出RAID2.0技术,来解决现代大容量硬盘在使用中面临的问题。
那么华为RAID2.0是通过什么方式来解决传统RAID存在的问题的呢?在讲RAID2.0的实现方式之前,需要先了解华为RAID2.0+相关的概念。
硬盘域:硬盘域是由多块相同或不同类型的硬盘组合而成。不同的硬盘域间相互隔离,如果将不同的业务承载到不同硬盘域中,就隔离了业务之间的性能影响和故障影响。
存储池:存储池创建于硬盘域中,是存放存储空间资源的容器,所有应用服务器使用的存储空间都来自于存储池。
存储层:存储池中相同性能的存储介质集合,用于管理不同性能的存储介质,以便为不同性能要求的应用提供不同存储空间。
CHUNK:硬盘上划分的连续的固定大小的物理空间,简写为CK。
CHUNK Group:由不同硬盘的CK组成的逻辑集合。CHUNK Group具有RAID属性,简写为CKG。
块虚拟化:一种新型RAID技术。该技术将硬盘划分成若干固定大小的块(CHUNK),然后将其组合成若干个CKG。当某一硬盘发生故障时,故障硬盘中CHUNK所在CKG的来源硬盘都参与重构,大大增加了参与重构的硬盘的数量,从而消除传统RAID组的重构性能瓶颈,提高了数据重构的速度。块虚拟化技术将数据分布到系统所有硬盘,充分发挥系统的读写处理能力。
Extent:Extent是在CKG中划分的固定大小的块(默认4MB)。它是组成thick LUN的基本单位,也是存储池中申请空间、释放空间和迁移数据的最小单位。
Grain:Grain是在Extent中按照固定大小进一步划分的更细粒度的块(默认64KB)。它是组成thin LUN的基本单位,Grain内的LBA(Logical Block Address)是连续的。
热备空间:块虚拟化技术中用于重构故障块数据的空间。在某一CK故障时,系统将使用热备空间中的CK顶替故障的CK,并通知CKG中其他CK向该热备空间进行数据重构,以保证数据的安全性和读写性能不受影响。
重构:重构是当某块硬盘发生故障时,将故障硬盘的数据恢复到热备空间的CK中,并将该热备空间的CK代替故障硬盘中的CK的过程。数据重构时,需要通过读取非故障数据和校验数据,并对读取的数据进行相应处理,将数据恢复到热备空间中,从而数据的安全性和可靠性。采用传统技术重构时,仅仅是故障硬盘所在的RAID中的所有硬盘参与重构。采用RAID2.0+技术重构时,故障硬盘所在的硬盘域中的所有同类型硬盘都参与重构,可以极大提升数据重构速度,缩短数据恢复时间。
存储的数据最终都会存储到SSD盘上,如果有些盘片上存放的数据不均匀,就可能导致某些压力大的SSD盘成为系统的瓶颈。
为应对该问题,RAID 2.0+块虚拟化技术通过更细粒度的划分,实现所有LUN的数据均衡的分布在每个SSD盘上,实现盘的负载均衡。
1、存储系统所有硬盘划分为多个硬盘域,每个硬盘域可以由多块相同或不同类型的硬盘组成。硬盘域的硬盘类型决定了存储池可以创建的存储层级。不同硬盘域之间相互隔离。
2、存储系统将各存储层的硬盘划分为固定大小的CHUNK。
3、每一个存储层的CHUNK按照用户在DeviceManager上设置的“RAID策略”和“热备策略”组成CHUNK group和热备空间。
4、存储系统按照用户在DeviceManager管理界面上设置的“数据迁移粒度”将CHUNK group划分为更小的Extent,它是组成thick LUN的最小单位。
5、当用户创建thin LUN时,存储系统还会在Extent的基础上再进行更细粒度的划分(Grain),并以Grain为单位映射到thin LUN,从而实现对存储的精细化管理。
这样一来,当前端业务在往后端存储写入数据时,数据以一种负载平衡的方式写入硬盘域的所有硬盘中,数据读取时同样是从所有硬盘中读出,华为RAID2.0相比传统RAID的数据读取速度要快于十几甚至几十倍。
相比传统RAID机制,RAID2.0+具备如下优势:
1、业务负载均衡,避免热点。数据打散到资源池内所有硬盘上,没有热点,硬盘负荷平均,避免个别盘因为承担更多的写操作而提前达到寿命的上限。
2、快速重构,缩小风险窗口。当硬盘故障时,故障盘上的有效数据会被重构到资源池内除故障盘外的所有盘上,实现了多对多的重构,速度快,大幅缩短数据处于非冗余状态的时间。
3、全盘参与重构。资源池内所有硬盘都会参与重构,每个盘的重构负载很低,重构过程对上层应用无影响。