赞
踩
(1)EC算法是跨节点的,4+2:1的冗余允许1个节点故障而不丢失数据,RAID5一般是由节点内的若干块盘组成RAID组的,只能容忍硬盘故障,不能容忍节点故障。
(2)EC算法采用全局热备的方式,不需要单独的热备盘,所有硬盘都可参与数据读写,只要系统中有剩余空间,就可以恢复故障数据;RAID5方式单节点至少准备一块全局热备盘。
(3)4+2:1的EC方式允许损害任意的2块盘而不丢失数据,RAID5方式每个RAID组最多只允许损害1块盘,所谓的允许损坏多块盘是建立在所有坏盘都不位于相同RAID组中的,从实际经验来看,把数据安全建立在理想情况下是不靠谱的。
(4)当出现硬盘故障时,EC方式是多块盘参与数据恢复,RAID方式只有1块盘(热备盘)能够写数据,这就导致EC方式的数据恢复效率(1TB/小时)是RAID方式的几十倍,这也大大减少了数据恢复期间硬盘再次故障的可能(目前单盘容量都达到数个TB使得该风险急剧增加),进一步提升了系统的安全性。
(5)EC方式的保护级别可以针对目录设置,重要的数据目录可以设置更高的保护级别以确保安全性,随着节点扩容,数据条带大小还能自动调整以获取更高的空间利用率;RAID方式所有数据的保护级别是相同的,RAID组一旦划分完不能够再调整。
(6)RAID方式需要独立的RAID卡,EC方式不需要额外的硬件支持。
传统的硬盘级RAID模式将数据存放于单节点内的不同硬盘,当整节点发生故障时,无法有效恢复数据。为了避免数据丢失,存储系统需要将数据在节点间进行冗余保护。Erasure Coding(简称EC,即纠删码)是一种冗余保护机制,通过计算校验片的方式实现数据冗余保护。
分布式存储系统在写入数据时,将数据切分为N个数据块(N为偶数),通过EC编码算法计算得到M个校验块(M取值2、3或4)。
服务器级安全:将N+M个数据块和校验块存储于不同的节点中,故障M个节点或M块硬盘,系统仍可正常读写数据,业务不中断,数据不丢失。
机柜级安全:将N+M个数据块和校验块存储于不同的机柜中,故障M个机柜、不同机柜的M个节点或M块硬盘,系统仍可正常读写数据,业务不中断,数据不丢失。
EC冗余方式的空间利用率约为N/(N+M),N越大,空间利用率越高,数据的可靠性由M值的大小决定,M越大可靠性越高。具体的冗余配比关系可以参见本章节末尾的“EC冗余配比表”,基于性能和可靠性综合考虑,推荐配置4+2。
说明:机柜级安全和服务器级安全的原理类似,以下内容以服务器级安全为例介绍其不同场景的读写原理。
当存储节点的个数≥N+M时采用N+M冗余配比,当(N+M)/M≤存储节点的个数<N+M时采用N+M:1冗余配比。
N+M:将N个数据块和M个校验块随机存储于不同的节点中(因为存储节点的个数大于N+M同时基于可靠性的考虑,数据块将存储于不重复的节点),此时存储池允许故障M块盘或M个节点。
以N=4、M=2、存储节点个数=7为例:
N+M:1(折叠):将N个数据块和M个校验块随机打散存放于所有节点,每个节点都存在存放M个分片的情况,此时存储池允许故障M块硬盘或1个节点。
以N=4、M=2、存储节点个数=5为例:
说明:扩容后,当存储节点数量≥N+M时,系统会通过后台自动均衡将N+M:1展开为N+M。
故障场景写原理(N+M冗余配比)
当故障后的剩余存储节点数量≥N+M,系统会重新分配一个新节点组成N+M冗余,保证数据冗余不降低。
以N=4、M=2、存储节点个数=7为例,如图1-6所示,当故障Node6节点后,剩余6个节点仍满足4+2的情况,系统分配Node7存放数据块D2。
图1-6 故障场景写原理(剩余存储节点的数量≥N+M)
当故障后的剩余存储节点数量<N+M时,在故障恢复前系统会将新写入的数据缩列为N/2+M,保证IO不中断的同时可靠性级别不降低,故障恢复后,系统冗余配比恢复为N+M。
以N=4、M=2、存储节点个数=6为例,如图1-7所示,数据Data1在以4+2的冗余配比写入过程中,EC成员节点突然故障,此时为了保证可靠性不变,系统将新写入的数据Data2缩列为2+2冗余配比。
图1-7 数据写入原理(剩余节点数量<N+M)
故障场景写原理(N+M:1冗余配比)
当故障1个节点或M块硬盘后,系统仍然将N+M个数据块和校验块写入所有正常节点中。
数据读取原理
当EC成员节点或成员盘故障时,系统会读取任意N个数据(不管是数据分片还是校验分片),通过EC解码恢复数据。
以N=4、M=2为例:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。