Ceph纠删码编码机制
1 Ceph简述
Ceph是一种性能优越,可靠性和可扩展性良好的统一的分布式云存储系统,提供对象存储、块存储、文件存储三种存储服务。Ceph文件系统中不区分节点中心,在理论上可以实现系统规模的无限扩展。Ceph文件系统使用了较为简单的数据地址管理方法,通过计算的方式直接得到数据存放的位置。其客户端程序只需要根据数据ID经过简单的计算就可以决定数据存放的位置。
2 存储容错机制简述
2.1 副本冗余容错机制
基于副本冗余的容错机制是将原始数据复制成多份,每一份称为一个副本。将这些副本分别存放在集群中的不同节点上,当集群中有些节点出现故障时,只要其余健康节点中任一个节点拥有副本,用户就可以获取该数据。当前众多存储系统(包括Ceph)都采用副本数为3的副本冗余容错机制,这种机制能很好地保证数据可靠性,但也会极大降低存储空间利用率。
在Ceph中,用户可以根据需要创建存储池,并设置存储池中数据的副本数目,每个数据副本被分到不同的对象存储设备(OSD)上,当存储设备中有故障,可以从其他健康的设备上获取数据。
2.2 纠删码容错机制
在存储系统中,纠删码技术主要是通过利用纠删码算法将原始的数据进行编码得到冗余,并将数据和冗余一并存储起来,以达到容错的目的。其基本思想是将k块原始的数据元素通过一定的编码计算,得到m块冗余元素。对于这k+m块的元素,当其中任意的m块元素出错(包括数据和冗余出错)时,均可以通过对应的重构算法恢复出原来的k块数据。基于纠删码的方法与传统的副本冗余技术相比,具有冗余度低、磁盘利用率高等优点。
3 纠删码简述
3.1 纠删码中相关概念
数据块大小指的是数据块进行编码计算时,数据分块(原始数据块Di或校验数据块Cj)的大小,在不同的存储系统中数据块大小不同,在RAID存储系统中,常见的分块大小是4KB~128KB,在分布式存储系统中数据块较大,一般为64MB大小。
条带是纠错编码存储一次性读入或写入数据的大小,在系统码中,一个条带往往包含了k个原始数据块和m个校验块。

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

3.2 典型的纠删码类型
3.2.1 范德蒙RS纠删码
RS编码实际上就是利用生成矩阵与数据列向量的乘积来计算得到信息列向量的。其重构算法实际上也是利用未出错信息所对应的残余生成矩阵的逆矩阵与未出错的信息列向量相乘来恢复原始数据的。.但是在RS编码重构原理的推导过程中,有一个条件至关重要,那就是未出错信息所对应的残余生成矩阵在GF(2w)域上必须要满足可逆的条件。更进一步来说,为了满足RS编码在任何情况下均是可重构的,对于任意的ms个元素出错时,均要能够通过重构算法恢复出数据,这就要求对于任意的n个元素(n的含义是指去掉m个出错元素以后剩下的n个未出错的元素),其对应的残余生成矩阵均要在GF(2w)域上满足可逆,这就对RS编码的生成矩阵提出了很高的要求。在生成矩阵中, 要求任意n个行向量均必须在 GF(2w)域上满足线性无关(行向量线性无关是矩阵可逆的充要条件)。
范德蒙矩阵有着良好的特性,在GF(2w)域上,对范德蒙矩阵进行初等变换,将其前n行变为单位矩阵,即可保证生成矩阵可逆,基于这个生成矩阵的RS纠删码为范德蒙RS纠删码。其编码的生成矩阵为:

3.2.2 柯西RS纠删码
柯西RS纠删码用柯西矩阵代替范德蒙矩阵,得到更为简单的生成矩阵。研究者通过简单改造,使解码过程更为简单。柯西码解码不用求大矩阵的逆,而是把乘法除法运算分别转化为有限域上的加法和减法运算,可用异或实现。因此,柯西RS纠删码运算复杂度低于范德蒙RS纠删码。采用柯西矩阵进行 Erasure code 编码过程描述如下:

4 Ceph容错机制
4.1 传统容错机制
Ceph中采用的是副本冗余与纠删码冗余算法的综合容错机制。基于副本冗余策略,用户可以根据需要创建存储池,并设置存储池中数据的副本数目,每个数据副本被分到不同的对象存储设备(OSD)上,当存储设备中有故障,可以从其他健康的设备上获取数据。基于纠删码冗余策略,Ceph添加了几个开源的纠删码库,提供不同的纠删码算法,用户可根据需要选择纠删码算法类型,并创建相应的纠删码池。
4.2 基于冷热数据分层的容错机制
存储中数据可根据访问热度分为三种:热数据、温数据和冷数据。热数据通常需要在高性能、高度可用、高要求的环境下即时存取。温数据处于近线或在线备份环境中,用户需要快速访问这些数据,但访问的次数较少。冷数据通常访问次数极少,通常用于归档备份。针对云存储中数据访问热度不同,提出一种基于数据热度分层的容错机制。
所有数据先按照副本策略存储,本机制对存入系统的数据,实时统计该数据的被访问频率,设定热数据、温数据、冷数据阈值,高于热数据阈值的判断为热数据,低于冷数据阈值则判定为冷数据,在冷热数据阈值之间的判定为温数据。每3个月进行一次数据热度划分,数据被访问频率高于热数据阈值时,判断为热数据,存放在副本池里,该存储池采用副本容错机制。数据访问频率低于冷数据阈值时,判定为冷数据,存放在范德蒙RS纠删码池里,该存储池采用范德蒙RS纠删码容错机制。对于温数据,存放在柯西纠删码池里,该存储池采用改进的柯西RS纠删码容错机制。

Ceph纠删码编码机制的更多相关文章
- 浅谈Ceph纠删码
目 录第1章 引言 1.1 文档说明 1.2 参考文档 第2章 纠删码概念和原理 2.1 概念 2.2 原理 第3章 CEPH纠删码介绍 3.1 CEPH纠删码用途 3.2 CEPH纠删码库 3.3 ...
- Ceph的正确玩法之Ceph纠删码理论与实践
http://blog.itpub.net/31545808/viewspace-2637083/ 注意空格,有的命令少空格 随着云计算业务的快速发展,国内外云计算企业的专利之争也愈发激烈.在云计算这 ...
- Ceph 纠删码介绍
http://ceph.org.cn/2016/08/01/ceph-%E7%BA%A0%E5%88%A0%E7%A0%81%E4%BB%8B%E7%BB%8D/
- ceph之纠删码
转自:http://m.blog.csdn.net/blog/skdkjxy/45695355 一.概述 按照误码控制的不同功能,可分为检错码.纠错码和纠删码等. 检错码仅具备识别错码功能 而无纠正错 ...
- ceph 004 纠删码池 修改参数 cephx认证
复习ceph003 存储池为逻辑概念,存储池可以占用整个集群的所有空间 [root@ceph01 ~]# ceph osd pool create pool1 pool 'pool1' created ...
- RS(纠删码)技术浅析及Python实现
前言 在Ceph和RAID存储领域,RS纠删码扮演着重要的角色,纠删码是经典的时间换空间的案例,通过更多的CPU计算,降低低频存储数据的存储空间占用. 纠删码原理 纠删码基于范德蒙德矩阵实现,核心公式 ...
- Erasure Coding(纠删码)深入分析
http://blog.sina.com.cn/s/blog_57f61b490102viq9.html 1.前言 Swift升级到2.0大版本后宣称开始支持纠删码,这其实是一个很有意义的特性,主要是 ...
- MICS:副本和纠删码混合存储系统
摘要 云存储系统的三个指标: 高可靠性,低存储开销,高读写性能. 这三个指标是没有办法同一时候满足的,许多时候须要进行tradeoff. 副本系统和纠删码是两种在存储系统中广泛使用的策略,它们在保证高 ...
- Erasure Coding(纠删码)深入分析 转
1.前言 Swift升级到2.0大版本后宣称开始支持纠删码,这其实是一个很有意义的特性,主要是能够在一定程度上解决3副本空间浪费太多的问题.因为3副本这一点是swift推广的最大障碍之一,成本的增加吓 ...
随机推荐
- 清理ThreadLocal
在我很多的课程里(master.concurrency.xj-conc-j8),我经常提起ThreadLocal.它经常受到我严厉的指责要尽可能的避免使用.ThreadLocal是为了那些使用完就销毁 ...
- ActiveMQ消息丢失怎么解决?
在消息发送过程中消息丢失的话该怎么解决(包括网络原因): 解决思路: 可以把消息唯一ID,存到表里面,当消息接受端可以获取到这个ID,就给服务端一个回复IF,消息发送出去,没有回复,THEN一直循环发 ...
- k8s 如何 Failover?
上一节我们有 3 个 nginx 副本分别运行在 k8s-node1 和 k8s-node2 上.现在模拟 k8s-node2 故障,关闭该节点. 等待一段时间,Kubernetes 会检查到 k8s ...
- 后台返回平铺数据,如何转换成树形json并渲染树形结构,ant tree 异步加载
如何后台返回对象数组(平铺式) 1.根据字段标识(板块)获取根节点 ### initTreeData(dataOrg){ var resultArr=dataOrg[0] var secArr=[]; ...
- ios 登录功能学习研究
登录功能是我在湖畔做的第一个需求. 当时PD给我的草图和下图类似: (图片来自知乎iOS客户端登录界面) 不过需求中要求用户名或者密码错误时,输入框要抖动(类似Mac登录密码错误的抖动效果). 如果实 ...
- pip install mysqlclient 报错:error: Microsoft Visual C++ 14.0 is required.
解决办法: 1. 在网址:https://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载对应的whl文件,如我的环境是python3.7.2 windows32位版本 ...
- nginx 无法加载css/js图片等文件 404 not fund
刚配置Nginx反向代理,Nginx可能会出现无法加载css.js或者图片等文件,这里需要在配置文件*.conf里面加上如下配置项. location ~ .*\.(js|css|png|jpg)$ ...
- 条款39:明智而审慎地使用private继承(use private inheritance judiciously)
NOTE: 1.private 继承意味 is-implemented-in-terms-of(根据某物实现出).它通常比复合(composition)的级别低.但是当derivated class需 ...
- 流程控制主while,for,python画金字塔,画9*9乘法表
5.6 自我总结 一.流程控制while 1.while while True: #while + 条件满足进行下面的循环 age = input('age:') #while 循环的内容 2.whi ...
- Python中怎么进行单元测试
既然是测试,那我们得有被测试的代码,我们先定义一个简单的函数,这个函数的功能就是接收一个姓名,并返回一句问候语句. say_hello_function.py def hello_name(name) ...