文章目录

  • 一、Erasure Coding(纠删码)和Raid比较
  • 二、Erasure Coding(纠删码)介绍
    • 2.1正常场景时EC读写原理
    • 2.2故障场景时EC读写原理
    • 2.3EC冗余配比

一、Erasure Coding(纠删码)和Raid比较

(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方式不需要额外的硬件支持。

二、Erasure Coding(纠删码)介绍

传统的硬盘级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。

说明:机柜级安全和服务器级安全的原理类似,以下内容以服务器级安全为例介绍其不同场景的读写原理。

2.1正常场景时EC读写原理

当存储节点的个数≥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为例:

  • 写原理:如图1-2所示,用户写入数据Data后被系统切分为4个数据块(D1D4),同时通过EC编码得到2个校验码(C1C2),系统将6个数据块随机存入6个节点中。
    图1-2 使用EC(N+M)写入数据

  • 读原理:如图1-3所示,系统从4个节点的不同硬盘中读取数据块(D1~D4),并通过Copy的方式将这4个数据块拼装成Data返回给用户。
    图1-3 使用EC(N+M)读取数据


N+M:1(折叠):将N个数据块和M个校验块随机打散存放于所有节点,每个节点都存在存放M个分片的情况,此时存储池允许故障M块硬盘或1个节点。
以N=4、M=2、存储节点个数=5为例:

  • 写原理:如图1-4所示,用户写入数据Data后被系统切分为4个数据块(D1D4),同时通过EC编码得到2个校验码(C1C2),系统将6个数据块随机打散存放在5个节点中。
    此时以Node3存放2个分片为例,故障Node3和其他任意一个节点时,故障的分片数量(3个)超过系统允许故障的个数M(2个),因此当N+M:1(折叠)时,只允许故障1个节点。
    图1-4 使用EC(N+M:1)写入数据

  • 读原理:如图1-5所示,系统从3个节点的不同硬盘中读取数据块(D1~D4),并通过Copy的方式将这4个数据块拼装成Data返回给用户。
    图1-5 使用EC(N+M:1)读取数据

说明:扩容后,当存储节点数量≥N+M时,系统会通过后台自动均衡将N+M:1展开为N+M。

2.2故障场景时EC读写原理

故障场景写原理(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为例:

  • 冗余配比N+M:如图1-8所示,Node6和Node5发生故障,无法读取该节点的数据块D2和校验块C1,系统会从其他正常节点读取4个数据D1、D3、D4和C2,并通过解码获取Data返回给用户。
    图1-8 故障场景数据读取原理(N+M)
  • 冗余配比N+M:1:如图1-9所示,Node3发生故障,无法读取该节点的数据块D2、D3,系统会从其他正常节点读取4个数据D4、D1、C1和C2,并通过解码获取Data返回给用户。
    图1-9 故障场景数据读取原理(N+M:1)

    故障场景时EC数据重构原理
    当系统的EC成员盘或成员节点发生故障后,将读取其他正常盘的N个数据,通过解码的方式获取故障盘的数据块并将其存放至其他正常盘中,具体原理如图1-10所示。
    图1-10 数据重构原理

    根据不同的故障场景,会采取不同的重构策略:
  • 当硬盘发生故障时,存储池等待15分钟后启动数据重构。
  • 当节点发生故障时,存储池还存在冗余保护时,延迟7天启动数据重构;当存储池不存在冗余保护时,延迟24小时启动数据重构。
    例如,6节点场景,EC冗余配比4+2,当故障1个节点,7天后启动数据重构;故障2个节点,24小时后启动数据重构。

2.3EC冗余配比

关于多副本和纠删码(二)--EC(纠删码)原理相关推荐

  1. Spring 框架源码(二) 事务Transaction源码深度解析

    目录 一.基于xml形式开启Transaction 1. 创建数据库user 2. 创建一个maven 项目 3. 通过xml形式配置事务 1) 创建Spring 命名空间 2) 开启事务配置 3) ...

  2. 计组中原码一位乘和原码二位乘方法和注意事项

    原码乘法可以分为原码一位乘和原码二位乘,两者在实现上规则大同小异 原码一位乘 原码一位乘采用数值位计算,符号位为两操作数异或结果.步骤如下: 对乘数和被乘数取绝对值(数值位不变,符号位换0) 初始化部 ...

  3. Ceph 进阶系列(四):Ceph的纠删码特性 EC(Erasure Code)

    从GitHub上Clone Ceph项目,我是基于(ceph version 12.2.11 luminous 版本)的代码来分析的 一.EC(Erasure Code)是什么? Ceph的纠删码特性 ...

  4. Erasure Code - EC纠删码原理

    Erasure Code - EC纠删码原理 查看全文 http://www.taodudu.cc/news/show-3010091.html 相关文章: 楞严咒全文正确注音版_楞严咒全文注音 积分 ...

  5. SDS离全面EC(纠删码)还有多远?

    SDS(软件定义存储)离全协议(块.文件.对象).全介质(全闪.混合) .全场景使用EC(纠删码)还有多远?今天我们来寻找答案. 我们XSKY一直在提升SDS的得盘率.性能.扩展性.通用性,以便SDS ...

  6. 海明码解释以及海明码的纠一检二

    海明码解释以及海明码的纠一检二 海明码定义:具有纠正一位错误的能力. 1.确定校验位个数 核心公式:2^r ≥k+r+1 (其中r代表校验个数) **(重要!)**从公式带入计算可得一张表: 记住这张 ...

  7. JAVA 实现扫码二维码登录

    最近在做一个扫码登录功能,为此我还在网上搜了一下关于微信的扫描登录的实现方式.当这个功能完成了后,我决定将整个实现思路整理出来,方便自己以后查看也方便其他有类似需求的程序猿些. 要实现扫码登录我们需要 ...

  8. 【Android 插件化】Hook 插件化框架 ( 从 Hook 应用角度分析 Activity 启动流程 二 | AMS 进程相关源码 | 主进程相关源码 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  9. 今日小程序推荐:香蕉打码-二维码随意生成

    2019独角兽企业重金招聘Python工程师标准>>> 最近小编在处理公众号的事项时发现想要DIY二维码,本来想生成动态的,发现有点难度,就找到了小程序,其中有一款小程序可以生成静态 ...

  10. C(++) Websocket实现扫码二维码登录---GoEasy

    最近在做一个扫码登录功能,为此我还在网上搜了一下关于微信的扫描登录的实现方式.当这个功能完成了后,我决定将整个实现思路整理出来,方便自己以后查看也方便其他有类似需求的程序猿些. 要实现扫码登录我们需要 ...

最新文章

  1. merge r语言daframe_R语言读取多个excel文件后合并:rbind/merge/cmd合并
  2. 036_CSS导航条
  3. Kubernetes:标签、选择器、注解、容忍度、亲和性
  4. JS生成x到y的随机数
  5. vue打包后不使用服务器直接访问方法
  6. Linux文件系统构成
  7. python之数字操作
  8. V 神呼吁宽大处理,以太坊开发者 Virgil Griffith 被判入狱 63 个月
  9. 软考资料(系统集成管理工程师)无偿分享
  10. TransCAD实用技术梗概
  11. Linux的命令回收站在哪,Linux命令行删除文件到回收站
  12. matlab植物大战僵尸小游戏
  13. 双击ie浏览器没反应打不开的解决方法
  14. 区块链交易性能、隐私保护、监管问题
  15. (一)关于POE供电定义以及级别划分,如何测试网线是否满足相关标准?
  16. 苹果列出了app被拒最常见原因,你中枪了吗?
  17. 示波器探头x10、x1挡位
  18. day1 计算机简史(概念)②
  19. python 爬虫模拟点击_爬虫——模拟点击动态页面
  20. 疫情信息管理系统(附源代码及数据库)

热门文章

  1. 技术开发合同中的知识产权归属问题研究
  2. 红帽Linux系统输入罗马数字,ps罗马数字怎么打
  3. gitflow概念及上传本地文件到github
  4. JetBrains所有IDE和.NET 工具 V2022.1全面升级
  5. 分布式系统为什么需要 Tracing?
  6. 音视频进阶教程|实现直播SEI补充增强信息
  7. 台湾代工三十年,“教父”难再寻
  8. 天津市人民优步Uber司机奖励政策(9月14日~9月20日)
  9. CVE-2020-1971: OpenSSL 拒绝服务漏洞通告
  10. 暂停2.4G手机支付:中国移动缓兵之计