Ceph Erasure Coding Cognize

1、概述

RedHat公司日前发行了旗下Inktank Ceph企业版软件的1.2版本,增加了纠删码、缓存分层的特色,并且更新了管理和监控分布式对象存储集群的工具。

这次发布是RedHat自5月份现金收购Inktank Storage公司后的首次产品更新。聚焦云、备份和归档,Inktank Ceph 企业版(ICE)结合开源Ceph软件,以支持对象和块存储、Calamari监控和管理工具,还有产品支持服务。

RedHat的ICE 1.2软件定义存储带来的是与最新开源Ceph存储软件Firefly相符的商业支持产品,并且两个关键的新特点——纠删码和分层部署——已经产生了收益。

据在欧洲核子研究中心IT部门Ceph服务经理和存储工程师Dan van der Ster说,Inktank客户欧洲核子研究中心(CERN),一家总部设在日内瓦的欧洲核研究组织,将纠删码视为一种重要的功能。

“这是唯一的方法,可以构建一个持久且负担得起的多字节规模的集群,” van der Ster通过电子邮件说。“但是,所涉及的复杂的数据造成一个非常重大的性能损失。所以,我们很高兴能测试新pool-tiering Ceph的功能——目前在Firefly发行版上可用的功能——看看相结合的解决方案(纠删码加分层)对我们的块和物理数据用户是否可行。”

Red Hat推荐那些想要纠删码和高速性能的客户考虑新增的cache-tiering特色,它可以保持最热的数据在高性能媒体,而冷数据性在低性能媒体, Ceph营销和社区的公司董事Ross Turk说。

“这允许你在Ceph中开辟一个池并且可以把它变成另外一个池的读缓存或是回写缓存,”Turk说。“如果你有一个非常密集的消除编码的支持池,不见得特别快,但十分划算,你就把SSD(固态硬盘) 的缓存池放在它前面,这将确保你快速访问到最热的数据。”

Ceph的默认纠删码库是Jerasure,当管理员创建一个erasure-coded后端时,可以指定数据块和代码块参数。ICE的纠删码默认设置是2 + 1,这意味着系统把数据分为两部分,创建一个额外的块并将它们存储在三个对象存储设备。

然而,Turk表示,该公司不希望大多数人在生产中使用默认设置。他说12 + 2 erasure-coded池可能会成为一个更常见的选择,提供良好的数据分布,容忍两个节点的故障,担负低存储开销。

Turk指出纠删码的潜在经济效益,因为ICE的定价是基于能力。他说客户可以以同样的初始容量存储更多的数据,权衡起来,相对复制副本,系统需要更多的时间和处理能力做恢复数据的计算。

“当你设计一个存储集群,您必须始终提供过剩的容量。如果我想把100 GB的数据投入存储集群,一般通过Ceph,我需要购买价值300 GB的硬盘,” Turk说。纠删码“降低了这一比例,”他补充道。

Ceph的纠删码在池级,不是集群级别,所以客户可能有erasure-coded池与复制池在同一集群中,Turk说。

IDC存储系统和软件研究主管Ashish Nadkarni认为,Red Hat最终可能需要以更细的粒度提供纠删码,但新的ICE 1.2特性将Red Hat掷入与其他对象存储厂商的竞争中。

“这不是主要的,主要的是它正在步入正轨,在更符合其他对象存储对手的方向上,” Nadkarni说。“既然Red Hat已经购得了它们,它们很可能会加速启动周期。他们要确保功能更多的面向企业并且OpenStack会优先于其他。”

ICE 1.2的另一个主要的新功能是加强的Calamari管理功能。基于网络的软件包括一个用户身份检查的仪表板;每个磁盘/池性能统计数据测量IOPS随着时间的变化;一个诊断工作台;和监视磁盘使用情况和管理、调整集群、池、设备和OSD设置的工具。

Inktank Calamari的管理工具最初是专有的,但Red Hat收购后开源了Calamari,Turk说。

ICE丢掉的碎片之一是基于文件的存储支持。Turk说,Ceph文件系统不是成熟的产品。其他功能将在未来的版本收入,包括性能改进、LDAP和对iSCSI、VMware和hyper-v的支持,他说。

ICE 1.2主机操作系统支持包括Red Hat Enterprise Linux(RHEL)6.5和7、Ubuntu 12.04和14.04、CentOS 6.5。支持连接到ICE客户端的设备包括RHEL OpenStack平台4和5、RHEL 7内核Rados块设备(RBD)、Ubuntu OpenStack和Mirantis OpenStack。Ceph存储软件最常见的用途之一是作为OpenStack云存储后端。

Turk表示,ICE的基于能力的分层定价模型的目标是1美分/ GB,每月在pb级别或以上,但对于较小的设备成本有点高。

2、原理

   纠删码(Erasure Code)作为一种前向错误纠正技术主要应用在网络传输中避免包的丢失,存储系统利用它来提高存储可靠性。

将要存储在系统中的文件分割成k块,然后对其编码得到的n个文件分片并进行分布存储,则只需存在k’个可用的文件分片,就可以重构出原始文件,如图所示:

纠删码的空间复杂度和数据冗余度较低,若文件分为k块,编码得到后得到的n个分块,需要存放在n个系统节点上,消耗n/k倍的存储资源。

纠删码能提供很高的容错性和很低的空间复杂度,但编码方式较复杂,需要大量计算。目前,纠删码技术在分布式存储系统中得到研究的主要有三类,即阵列纠删码、RS(Reed-Solomon)类纠删码和LDPC(LowDensity Parity Check Code)纠删码。一些量化比较的工作研究表明,当数据存放的节点可靠性要求比较高时,如集群存储系统中,采用纠删码可以提供比副本机制更高的可靠性,并且所需的存储空间开销更小。

传统的纠删码如RS码的计算量相当大,其解码即从任意n个数据块或编码块中重构原始数据的计算量随着n和m的增加成指数上升关系,严重影响存储性能。低密度校验LDPC码也可以提供很好的保障可靠性的冗余机制。与RS编码相比,LDPC编码效率要略低,但编码和解码性能要优于RS码以及其他的纠删码,主要得益于编解码采用的相对较少并且简单的异或操作。当前实际应用中,大部分集群存储系统主要使用副本技术来保证可用性,采用纠删码技术来提高可用性的系统包括HDFS-RAID、AZURE、QFS、ISILON等。

3、副本与纠删码

副本策略和编码策略是保证数据冗余度的两个重要方法。当原始数据发生部分丢失时,副本策略和编码策略都可以保证数据仍旧可以正确获取。副本策略将原始数据拷贝一份或多份进行存储,编码策略则将原始数据分块并编码生成冗余数据块,保证丢失一定量内的数据块,原始数据仍旧可以获取。

图1. 副本策略

图2. 编码策略

两种策略性能比较如下:

存储效率

计算开销

修复效率

副本策略

编码策略

虽然编码策略比副本策略存在计算开销和修复效率低(后面将介绍)的缺点,但能够极大的减少存储开销的优势还是为编码策略赢得了巨大的空间。实际中,存在着副本策略和编码策略的存储系统,比如在分布存储系统(HDFS, GFS, TFS)中热数据往往通过副本策略保存,冷数据则通过编码后保存,节省存储空间。在ECC内存和SSD的page 中也使用了ECC 编码策略保证数据冗余。

下面通过一个方程组的例子啰嗦下这两种策略,如果将原始数据比作如下一个方程组S(x 和 y对应着原始数据的两部分):

x = 1

y = 2

副本策略复制相同一个方程组S’ ,当任何一个等式失效时,仍然得到相同的方程组:

x = 1         x = 1

y = 2        y = 2

编码策略则是通过线性组合这两个方程组得到一个新的方程

x = 1

y = 2

2(x) + (y)  = 4

这样就保证了三个方程中任意两个都可以线性组合得到x 和y 的值。

4、相关参数

以磁盘做为单位存储设备的存储系统中,一般会有以下参数说明:

n : 存储系统中磁盘总数

k : 原始数据盘个数或恢复数据需要的磁盘

m : 校验盘个数(m = n-k)

编码策略编码k 个数据盘,得到m 个校验盘,保证丢失若干个磁盘可以恢复出丢失磁盘数据,编码效率R = k/m。磁盘可以推广为数据块或者任意存储节点。

5、编码(encode)、解码(decode)和修复(repair)

以图3 为例,k(4) 个数据盘编码为m(2) 个校验盘(parity disk)的过程为编码过程,从任意k 个磁盘中恢复原始数据盘的过程为解码,修复过程是从若干个磁盘(一般是k(4) 个)中恢复出一个或若干个磁盘的数据,修复过程在RAID 系统中也叫数据重建。

图3. 编码和解码过程

6、MDS 性质

MDS 性质是纠删码的一个重要性质,它保证n=k+m 个磁盘中任意k 个磁盘都可恢复出k 个数据盘,或可表示为该编码容忍任意m=n-k 个磁盘发生故障,而数据不发生丢失。传统的RS 码、CRS 码都具有MDS 性质,最近提出来的一些编码往往牺牲MDS 性质(Rotated RS,Local Repair Codes等),减少修复开销(之后的文章将详细介绍)。

7、系统码(systematic codes)和非系统码(non-systematic codes)

系统码指的是编码后包含原始数据和校验数据(parity data)的编码方法,系统码编码后只包含校验数据,而没有原始数据。在存储系统中系统性(systematic)是非常重要的,这样保证原始数据在读取的时候不用解码即可得到,所以常见的RAID 码,RS(Reed-Solomon)码,CRS(Cauchy Reed-solomon) 码都是系统码。也有一些编码如随机线性编码(Random Linear Codes,RLC)是非系统码,在存储系统用运用较少。

8、编码矩阵(Generator Matrix,GM)

从信息论和编码的角度来说,纠删码属于分组线性编码。其编码过程可以通过一个编码矩阵GM 和分块数据的乘法(点积)来表示,也就是说编码矩阵GM 定义了数据是如何编码为冗余数据的。以图4 为例,C0 ~ C5 是冗余数据,所有的冗余数据可以表示为GM × D{D0、D1、D2、D3} 的乘法,每一个冗余数据块Ci 是矩阵的对应的一行和数据块的乘积(黄色标示)。编码矩阵中GM 每一个元素则是对应原始数据块的乘法系数。编码矩阵的列数对应着原始数据分块个数(k),行数对应着编码后所有数据块个数(n)。

图4. 编码过程的数学表示

如果一个编码是系统码,则编码矩阵的前k 行构成一个k×k 大小的单位矩阵,剩余后n-k = m 行构成m×k 大小的校验矩阵(parity matrix)。单位矩阵和原始数据的乘法得到的还是原始数据,校验矩阵和原始数据的乘法得到校验数据。图5 是系统码RAID 6(k = 4、m = 2)编码示意图,左边是其编码矩阵GM。

图5. RAID 6(k = 4、m = 2)编码示意图

MDS性质在编码矩阵GM 中的表示则是矩阵的任意k 个行向量组成的矩阵都是满秩的。

9、数据块大小和条带(stripe)

数据块大小指的是数据块进行编码计算时,数据分块(原始数据块Di 或校验数据块Cj)的大小,在不同的存储系统中数据块大小不同,在RAID 存储系统中,常见的分块大小是4KB~128KB,在分布式存储系统中数据块较大,一般为64MB大小。条带是纠错编码存储一次性读入或写入数据的大小,在系统码中,一个条带往往包含了k 个原始数据块和m 个校验块,如图6。

图6. 条带(stripe)示意图

10、水平码和垂直码

水平码指校验数据存放于单独的校验磁盘(黄色)的编码方法,每个条带都是水平方式存储于n 个磁盘中,相同条带的数据块位置相同。垂直码的校验数据分布于所有的磁盘中,没有单独的校验盘,每个条带倾斜地将每个数据块分布于磁盘上不同位置上。

图7. 水平码垂直码

常见的纠删码在实际系统中都是按照水平码分布数据,但在理论研究中,科研人员更喜欢垂直码,因为其在理论上具有更好的性质,但在真实的系统中很少看到有实现。

ceph存储 ceph集群ErasureCoding原理认知相关推荐

  1. ceph存储 ceph整体学习记录(未整理较乱)

    转载:https://www.iyunv.com/thread-126458-1-4.html ceph源码下载: http://ceph.com/download/ 主要文档下载连接: http:/ ...

  2. Redis Cluster 集群模式原理和动态扩容

    Redis Cluster原理 详细参考 Redis cluster集群模式的原理, 在这里补充下要点 16384个slot, 平均分布在各个master, key-value 对存储在slot中; ...

  3. redis 槽点重新分配 集群_弄懂一致性哈希后我打通了redis分区集群的原理

    上午刚写完一篇关于一致性hash思想的举一反三,下午就去看redis的官方文档,就在我看到redis分区集群的原理的时候,哇那真是茅塞顿开把我多年对redis的疑惑都解开了,它分区的思想不就是我上篇文 ...

  4. Redis综述篇:与面试官彻夜长谈Redis缓存、持久化、淘汰机制、哨兵、集群底层原理!...

    点击上方关注 "终端研发部" 设为"星标",和你一起掌握更多数据库知识 于哥你好,最近面试挺多的,尤其是在问到java面试题,Redis被问的特别多,比如Red ...

  5. Redis集群选举原理与脑裂问题

    系列文章目录 第一节 Redis的安装 第二节 Redis的五种数据结构(String.Hash.List.Set.ZSet) 第三节 Redis的持久化方式 第四节 Redis主从架构 第五节 Re ...

  6. (7)达梦DMDSC数据共享集群核心技术原理介绍

    在上一篇博客里面我们对达梦数据库的DM数据守护(Data Watch)的读写分离集群进行了技术原理学习并动手部署实践.本篇技术分享文章是关于达梦DMDSC集群的相关技术原理. DM共享存储数据库集群的 ...

  7. K8s 从懵圈到熟练-集群伸缩原理

    作者 | 声东  阿里云技术专家 <关注公众号,回复 排查 即可下载电子书> <深入浅出 Kubernetes>一书共汇集 12 篇技术文章,帮助你一次搞懂 6 个核心原理,吃 ...

  8. 用Redis存储Tomcat集群的Session

    用Redis存储Tomcat集群的Session 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 前段时间,我花了不少时间来寻求一种方法,把新开发的代码推 ...

  9. Redis集群的原理和搭建

    Redis集群的原理和搭建 前言 Redis 是我们目前大规模使用的缓存中间件,由于它强大高效而又便捷的功能,得到了广泛的使用.单节点的Redis已经就达到了很高的性能,为了提高可用性我们可以使用Re ...

最新文章

  1. 9.LDA(线性判别分析)
  2. springMvc的一些简介 和基于xml的handlerMapping基本流程
  3. 使用while循环输入 1 2 3 4 5 6 8 9 10
  4. sql:CallableStatement执行存储过程
  5. python脚本之家 包的创建和调用_python基础之包的导入和__init__.py的介绍
  6. 质因数分解(洛谷P1075题题解,Java语言描述)
  7. Python 列表 sorted( )函数
  8. SpringDataRedis的简单案例使用
  9. 第 3 章:稀疏数组和队列
  10. SQL报错信息(3001-6999)
  11. 堆-动态的排序(洛谷1801-黑匣子)
  12. 苹果Mac环境如何配置定时任务?
  13. Hibernate级联删除时:Cannot delete or update a parent row: a foreign key constraint fails异常...
  14. hadoop ubantu环境搭建_创帆云大数据教程系列1-搭建基于docker的hadoop环境安装规划、容器通信及zookeeper...
  15. snmptrap发送消息到服务器,我试图通过snmptrap发送snmp消息
  16. H5 小程序直播教程,一看就会!
  17. 自用笔记傻妞返利配置
  18. Debian 配置RTL8723BU连接wifi网络
  19. lecture09 Convex 模型预测控制(MPC)
  20. 使用IO口检测电源电压的转换逻辑

热门文章

  1. 浅析PoE技术与视频监控传输市场
  2. viso画图如何调整尺寸大小及设置打印【viso使用技巧篇】
  3. 调整Outlook 2010的pst文件大小
  4. 最全BAT大型互联网公司面试题整理,没有之一
  5. 给你一个App,你将如何测试?
  6. 韩顺平 2022零基础学 Java 学习笔记(1)
  7. Lotus Notes Domino 数据恢复案例记录
  8. 【玩耍】 NVIDIA 历代显卡提升 自制显卡天梯图
  9. PMP试题 | 每日一练,快速提分(二)
  10. 西安三本计算机专业可报院校,二三本合并后本科志愿怎么报,陕西54所本科大学报考点评及建议...