固态盘到底该怎么做Raid?(2)
另外,目前的内核自带软Raid也并没有在其他方面对固态盘场景做感知和优化,比如寿命问题,SSD的寿命是可预知的,很有可能同一个Raid组中的多块固态盘短时间内同时达到寿命终点从而引起多盘失效而丢失数据;再比如Raid组的初始化过程,是个完全浪费时间和没有必要的过程,只会白白浪费固态盘寿命;无法感知逻辑数据对象(比如逻辑盘),只能整盘重构,白白浪费寿命. Memblaze的FlashRaidTM重新定义软RaidMemblaze(忆恒创源)作为国内知名固态存储提供商,曾经推出过国内第一块NVMe SSDPblaze4,能够达到将近800K的IOPS. 为了持续建设NVMe生态,开发一款能够发挥出NVMe固态盘性能的软Raid模块的这个设想,很早就引起了公司内部的重视.终于,在2016年的6月份,Memblaze将隆重正式发布这款产品——FlashRaidTM.先来看看其是否强劲: FlashRaid性能如此强悍的关键原因在于无锁队列技术.FlashRaid模块在达到百万IOPS时对CPU耗费也就是30%左右,Xeon 2640双路,30核心.FlashRaid的开发负责人吴忠杰表示,mdraid模块内部对多线程的优化太差,存在大量锁,效率非常低,尤其是处理写IO的时候.而FlashRaid团队的专家们经过反复思考,最终找到了能够实现基于无锁队列的生产者消费者模型的办法,并申请了专利.无锁队列的好处就是总体性能能够能够随着线程数的增多而呈现更好的线性增长特性.IO根据目标LBA地址范围被Hash然后均衡的下发到多个队列中. 除了性能方面的优化,FlashRaid在架构、固态存储感知优化等方面大量采用及创造业界前沿技术,可以说是一场技术盛宴! 1. 基于Raid2.0架构构建整体架构上,FlashRaid采用Raid2.0思想实现.一组物理盘首先被逻辑分割为chunk,多个chunk形成storagepool(可创建多个池),池内的chunk与chunk之间做成各种类型的Raid组从而组成一个条带,也就是container,然后多个container再组成逻辑卷.Chunk的大小是可调节的.Container的chunk该如何在众多chunk中分配,由Resource Allocator根据多方面因素优化决定. Raid2.0架构的好处就在于能够极大加快重构速度,以及智能重构,只重构被数据块占用的区域. 2. 带优先级的精准重构技术假设某个存储池内有两块硬盘损坏,某个Raid6类型的container中恰好有两个chunk分别属于这两块硬盘;同时,另一个Raid6类型的container中只有一个chunk落入了这两块硬盘中的任意一块中,此时,前者这个chunk的处境更加危险,因为其已经没有冗余性了,而后者这个chunk依然能允许一块盘故障,此时FlashRaid会智能判断该场景并且优先重构第一个container.该技术的确为业界创新技术,冬瓜哥之前没有看到过任何其他产品实现该技术.同理,在一块盘故障之后,受影响的Raid5类型的container总是优先于受影响的Raid6类型的container得到重构. 3. 细粒度实时重构如果遇到某个数据块发生不可恢复错误,那么系统会动态实时的对该块进行重构,而无需等到整个盘故障后才重构. 4. 动态可变长条带初始时,用户选择使用4D+1P方式的条带/container,但是可能池中的某个SSD容量不够了,系统此时会在后台动态的将4D+1P条带改变为3D+1P,该过程为透明后台执行,不会影响前端应用的IO访问. 5. 全局磨损均衡和逆均衡当某块SSD的寿命剩余较多时,会拥有最高的被分配权重,这样可以均衡寿命,而当池中的所有SSD的寿命均耗费殆尽的时候,为了方式寿命过于均衡可能导致的同时多盘失效,此时系统启动逆均衡措施,强行选择寿命即将耗尽的SSD,增加其数据写入权重,这样,其就会有更大几率先于其他盘坏掉,然后系统发起重构恢复冗余性. 6. 完善的CLI和GUI配置和监控
除了上述特色之外,FlashRaid还专门对运维方面做了一些增强,比如对链路闪断进行处理,对磁盘热插拔进行处理等等.另外,FlashRaid具备良好的可移植性,并且对SPDK做了适配,可以迁移到用户态空间运行. FlashRaid绝非仅仅是一款普通的Raid管理模块,FlashRaid的最终形态会是一款具备强大功能的存储系统平台了,得益于其对固态存储优秀的优化,其被广泛用于分布式块存储系统底层的那一天,很快就会到来! 文/冬瓜哥 原文出处——大话存储微信公众号 (编辑:ASP站长网) |