Ceph纠删码如何实现

87次阅读
没有评论

共计 1686 个字符,预计需要花费 5 分钟才能阅读完成。

这篇文章给大家分享的是有关 Ceph 纠删码如何实现的内容。丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,一起跟随丸趣 TV 小编过来看看吧。

1、纠删码

纠删码 Erasure Code 是一种编码技术,它可以将 n 份原始数据,增加 m 份数据,并能通过 n + m 份中的任意 n 份数据,还原为原始数据。即如果有任意小于等于 m 份的数据失效,仍然能通过剩下的数据还原出来。纠删码技术在分布式存储系统中的应用主要有三类,阵列纠删码(Array Code: RAID5、RAID6 等)、RS(Reed-Solomon) 里德 - 所罗门类纠删码和 LDPC(LowDensity Parity Check Code) 低密度奇偶校验纠删码。LDPC 码目前主要用于通信、视频和音频编码等领域。

目前主流的分布式存储包括 HDFS、Ceph、Minio 等主要使用的是 RS(Reed-Solomon) 码。

2、Ceph 纠删码实现 2.1、纠删码写

数据将在主 OSD 进行编码然后分发到相应的 OSDs 上去。

2.2、纠删码读 2.2.1、正常纠删码读

从相应的 OSDs 中获取数据后进行解码。

2.2.2、数据丢失时纠删码读

如果此时有数据丢失,Ceph 会自动从存放校验码的 OSD 中读取数据进行解码。

3、Ceph 支持的纠删码插件

Ceph 支持不同的纠删码插件:Jerasure,ISA-l 和 LRC,默认为 Jerasure

# ceph osd erasure-code-profile get default
plugin=jerasure
technique=reed_sol_van

此处列出的三种纠删码插件其实是分成两种类型

Jerasure 和 ISA- l 属于纠删码代码库 LRC 是一种纠删码编码,类似于 RS 码

3.1、纠删码代码库 3.1.1、Jerasure

Jerasure2.0 使用 C 语言封装后的指令,这样代码更加的友好。另外 Jerasure2.0 不仅仅支持 GF(2^8) 有限域的计算,其还可以进行 GF(2^4) – GF(2^128) 之间的有限域。并且除了 RS 码,还提供了 Cauchy Reed-Solomon code(CRS 码)等其他编码方法的支持。它在工业应用之外,其学术价值也非常高。目前其是使用最为广泛的编码库之一。目前 Jerasure2.0 并不支持 AVX 加速。

3.1.2、ISA-l

Intel ISA- L 代表英特尔智能存储加速库, 使用的汇编代码,ISA- L 是针对存储应用程序而优化的低级功能的开源集合。它包括针对 Intel AVX 和 AVX2 指令集优化的快速块 Reed-Solomon 类型纠删码, 它的性能是业界最佳,主要是因为整体的矩阵运算都放在汇编之中

3.1.3、对比

3.2、纠删码编码 3.2.1、RS(Reed-Solomon)

Reed-Solomon(RS)码是存储系统较为常用的一种纠删码,它有两个参数 n 和 m,记为 RS(n,m)。n 代表原始数据块个数。m 代表校验块个数。

简单来讲指定 RS(4,1)时,有 4 个数据块和 1 个校检块

D1- 4 任意数据块损坏,都可以通过 P1 进行解码恢复重建,同样的 P1 校检块损坏也可以通过数据块编码计算重建

3.2.2、LRC(Locally Repairable Codes)

LRC(Locally Repairable Codes),是一种局部校验编码方法,其核心思想为:将校验块(parity block)分为全局校验块 (global parity)、局部校验块 (local reconstruction parity),故障恢复时分组计算。

对比 RS,这里是 4 个数据块分成了两组,

D1+D2=P1

D3+D4=P2

D1+D2+D3+D4=P3

P1、P2 是局部校验块,P3 是全局校验块。

优势在于,当组内数据块损坏时,由于减少了网络 I / O 传输的数据量,组内恢复运算的数据量和重建时间基本上能缩短一半。

劣势是因为校检块的增加,磁盘使用率和可靠性都会降低

3.2.2、编码对比

感谢各位的阅读!关于“Ceph 纠删码如何实现”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计1686字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)