ceph存储是什么意思(ceph存储原理)

ceph存储是什么意思(ceph存储原理)p span style font family Courier New font size 12px 目 录 br 第 1 章 引言 br 1 1 文档说明 br 1 2 参考文档 br 第 2 章 纠删码概念和原理 br 2 1 概念 lt span p

大家好,我是讯享网,很高兴认识大家。



 <p><span style="font-family:Courier New; font-size:12px">目  录<br /> 第1章 引言 <br /> 1.1 文档说明 <br /> 1.2 参考文档 <br /> 第2章 纠删码概念和原理 <br /> 2.1 概念 <br /> 2.2 原理 <br /> 第3章 CEPH纠删码介绍 <br /> 3.1 CEPH纠删码用途 <br /> 3.2 CEPH纠删码库 <br /> 3.3 CEPH纠删码数据存储 <br /> 3.3.1 编码块读写 <br /> 3.3.2 间断全写 <br /> 3.4 使用范围 <br /> 3.4.1 冷数据 <br /> 3.4.2 廉价多数据中心存储 <br /> 第4章 CEPH纠删码实例 <br /> 4.1 数据读写 <br /> 4.2 纠删码池不支持部分功能 <br /> 4.3 纠删码PROFILE <br /> 4.4 CECHE TIER弥补ERASURE的缺陷 <br /> 第5章 CEPH纠删码和CACHE分层 <br /> </span></p> 

讯享网

第1章 引言
1.1 文档说明
对Ceph纠删码进行介绍,包含实例。
1.2 参考文档
Ceph官方文档
http://ceph.com/docs/master/architecture/#erasure-coding
http://ceph.com/docs/master/rados/operations/erasure-code/
http://ceph.com/docs/master/dev/erasure-coded-pool/
RedHat的Inktank Ceph存储新增纠删码、分层部署
http://www.searchstorage.com.cn/showcontent_83783.htm
纠删码:确保RAID失效后的数据可用性
http://storage.it168.com/a2011/0816/1233/000001233286_1.shtml
存储系统中的纠删码(Erasure Codes)
http://www.tuicool.com/articles/v6Bjuq


第2章 纠删码概念和原理
2.1 概念
按照误码控制的不同功能,可分为检错码、纠错码和纠删码等。
检错码仅具备识别错码功能 而无纠正错码功能;
纠错码不仅具备识别错码功能,同时具备纠正错码功能;
纠删码则不仅具备识别错码和纠正错码的功能,而且当错码超过纠正范围时可把无法纠错的信息删除。
2.2 原理
比如  K=3  M=2  K+M=5
这个意思是:
K原始数据盘个数或恢复数据需要的磁盘个数
M校验盘个数或允许出故障的盘个数
使用编码算法,通过K个原始数据生成K+M个新数据
通过任何K个新数据都能还原出原始的K个数据
即允许M个数据盘出故障,数据仍然不会丢失;


第3章 Ceph纠删码介绍
Ceph纠删码即Ceph Erasure。
3.1 Ceph纠删码用途
用更少的空间实现存储,即节约空间;
纠删码实现了高速的计算,但有2个缺点,一个是速度慢,一个是只支持对象的部分操作(比如:不支持局部写)。纠删码的缺点现在已经有解决办法。
3.2 Ceph纠删码库
Ceph的默认纠删码库是Jerasure,即Jerasure库;
当管理员创建一个erasure-coded后端时,可以指定数据块和代码块参数。
Jerasure库是第三方提供的中间件。
Jerasure库可以在外网上搜索到。
Ceph环境安装时,已经默认安装了Jerasure库。
3.3 Ceph纠删码数据存储
在erasure coded pool中,每个数据对象都被存放在K+M块中。对象被分成K个数据库和M个编码块;erasure coded pool的大小被定义成K+M块,每个块存储在一个OSD中;块的顺序号作为object的属性保存在对象中。
3.3.1 编码块读写
例如:创建5个OSDs (K=3 M=2)的erasure coded pool,允许损坏2个(M = 2);
对象 NYAN 内容是 ABCDEFGHI ;
NYAN写入pool时,纠删码函数把NYAN分3个数据块:第1个是ABC,第2个是DEF,第3个是GHI;如果NYAN的长度不是K的倍数,NYAN会被填充一些内容;
纠删码函数也创建2个编码块:第4个是YXY,第5个是GQC;


讯享网

每个块都被存储在osd中;对象中的块有相同的名字 (NYAN)但存储在不通的osd中。除了名字外,这些块都有一个序号,需要保存在对象属性中 (shard_t)
比如,块1包含ABC保存在OSD5中;块4包含YXY保存在OSD3中。
当从erasure coded pool中读取对象NYAN时,纠删码函数读取3个块:块1(ABC)/块3(GHI)/块4(YXY);然后重建原始对象内容ABCDEFGHI;
纠删码函数被告知:块2和块5丢失;块5不能读取是因为OSD4损坏了;块3不能读取,是因为OSD2太慢了。

 


3.3.2 间断全写
在erasure coded pool中,主OSD负责所有的写操作;它负责K+M块的编码,并写到其他OSD中。它还负责维护一个权威的pg log版本。
下图中,一个erasure coded是K=2/M=1,3个OSD节点,2个是K的节点,1个是M的节点;pg分别在OSD1/OSD2/OSD3中;
一个对象被编码保存在这些OSD中:
块D1v1(数据块1,版本1)在OSD1中;
块D2v1(数据块2,版本1)在OSD2中;
块C1v1(编码块1,版本1)在OSD3中;
在每个OSD中的PG log是一致的(1,1 是epoch 1, version 1);



OSD1是主节点,接收客户端的WRITE FULL请求,即全部重写对象,而不是部分的替换;
创建了Version 2 (v2)对象去替换version 1 (v1)对象;
主节点OSD1负责编码写入3个块:
块D1v2 (数据块1 版本2)在OSD1中;
块D2v2 (数据块2 版本2)在OSD2中;
块C1v2 (编码块1 版本2)在OSD3中;
每个块都被写到目标OSD中,包括主OSD节点;主OSD节点负责存储块,并且负责维护一个权威的PG log版本;
当OSD接到写入块的指令时,它也创建一个PG log作为回应;
例如, 只要OSD3存储C1v2,它就添加一个条目1,2 ( i.e. epoch 1, version 2 )到log中;
因为OSD工作是异步的,一些块可能还在写入 (比如 D2v2 ),但其他块已经写入完成并返回相应了 (比如 C1v1 and D1v1).


如果一切正常,每一个OSD上的块都写入成,则log的last_complete指针从1,1 改为1,2。


最后,保存以前版本块的文件将会被删除: D1v1 on OSD1, D2v1on OSD2 and C1v1 on OSD3。


但是意外有时也会发生。如果OSD1损坏了,而D2v2还在写入,则object的version 2 就是局部写入: OSD3有一个块但是不够恢复其他块。丢失了2个块: D1v2 和D2v2,可是the erasure coding参数是K=2/M=1,要求至少2个块可用才能重建第3个块。 这时,OSD4成为主节点,并发现last_complete log记录是1,1 ,这将是新权威的记录头。


节点OSD3中的Log记录1,2和节点OSD4中新的权威log记录不一致:OSD3中的Log被丢弃,C1v2块被删除。D1v1块被重建(在scrubbing时使用纠删码函数重建)并保存到新的主节点OSD4中。


3.4 使用范围
3.4.1 冷数据
1、主要存储1G以上的对象,比如镜像、映像等,这些数据10%都是每月读取一次;
2、新对象每天添加,但是这些对象添加后不修改;
3、这些数据,平均读1万次,写一次。
4、创建一个replicated pool作为erasure coded pool的ceche分层;当一个对象一周没有访问时,可以把该对象降级(把该对象从replicated pool移动到erasure-coded pool中);当然也可以相反的调整;
5、erasure-coded pool为冷数据设计,适合慢的硬件设备,访问比较少的数据;replicated pool为快速设备和快速访问设计的。
3.4.2 廉价多数据中心存储
十个专用网络链接的数据中心,每个数据中心包含相同大小的存储空间,但没有电源备份和无空气冷却系统。
创建这样一个erasure-coded pool,同时允许3个节点损坏而数据不丢失;数据块为6(K=6),而编码块为3(M=3);其开销是50%
而创建同样的复制池,其开销为400%(4个副本);


第4章 Ceph纠删码实例
Ceph pool要保证部分osd损坏时数据不丢失(一般情况下一个disk设置为一个osd);默认情况下创建pool时rule类型选择replicated,即object在多个disk中拷贝保存;pool的另一种rule类型是erasure,这种pool可以节省空间;
最简单的erasure coded pool等价与RAID5;要求至少3个节点;即k=2 m=1 默认的erasure就是这种情况
\( ceph osd pool create ecpool 18 12 erasure<br /> 其中&#xff1a;18是pgp_num 12是pg_num&#xff08;pgp_num必须大于pg_num&#xff09;<br /> 4.1 数据读写<br /> 读写字符串ABCDEFGHI<br /> \) echo ABCDEFGHI | rados –pool ecpool put NYAN -
\( rados --pool ecpool get NYAN -<br /> 读写文件test.txt<br /> rados -p ecpool put test test.txt<br /> rados -p ecpool get test file.txt<br /> 4.2 纠删码池不支持部分功能<br /> 比如不支持“部分写”<br /> 不支持rbd创建镜像<br /> # rbd create xxx -p ecpool --size 1024<br /> rbd: create error: (95) Operation not supported<br /> librbd: error adding image to directory: (95) Operation not supported<br /> # rbd import secureCRT5.rar secureCRT5 -p ecpool<br /> rbd: image creation failed<br /> Importing image: 0% complete...failed.<br /> librbd: error adding image to directory: (95) Operation not supported<br /> rbd: import failed: (95) Operation not supported<br /> 4.3 纠删码profile<br /> 1、 默认profile<br /> 默认的erasure code profile允许有一个OSD损坏&#xff1b;它等价于2个备份节点的replicated pool&#xff1b;相当于erasure pool用1.5TB代替replicated pool用 2TB存储1TB数据。<br /> \) ceph osd erasure-code-profile ls
\( ceph osd erasure-code-profile get default<br /> 结果显示如下&#xff0c;最小的erasure pool 类型<br /> directory&#61;/usr/lib/ceph/erasure-code<br /> k&#61;2<br /> m&#61;1<br /> plugin&#61;jerasure<br /> technique&#61;reed_sol_van<br /> 2、 添加profile<br /> 创建pool时选择合适的profile是很重要的&#xff0c;因为pool创建后就不能修改了&#xff1b;如果两个pool的profile不同&#xff0c;则创建新pool时&#xff0c;则所有的object都要从旧pool中移动到新pool。<br /> Profile最重要的参数是K/M和ruleset-failure-domain&#xff0c;因为他们定义的存储开销和数据持久性。<br /> 例如&#xff1a;我们想构建这样的一种架构&#xff0c;允许2个disk损坏&#xff0c;存储开销损失40%&#xff0c;那么我们可以这样创建profile<br /> \) ceph osd erasure-code-profile set myprofile
   k=3
   m=2
   ruleset-failure-domain=rack
注: ruleset-failure-domain有osd, host, chassis, rack, row等选项
ruleset-failure-domain=rack表示:该CRUSH规则确保2个块不存储在同一个机架rack上。
3、 根据profile创建erasure pool
\( ceph osd pool create ecpool 12 12 erasure myprofile<br /> \) echo ABCDEFGHI | rados –pool ecpool put NYAN -
\( rados --pool ecpool get NYAN -<br /> 4、 删除profile<br /> \) ceph osd erasure-code-profile rm profile
4.4 Ceche tier弥补erasure的缺陷
和replicated pools相比,erasure pool需要更多的资源,并且缺少一些功能(比如部分写);为了克服这些局限性,建议在erasure pool上添加一个ceche tier层。ceche tier能解决erasure pool缺失功能的问题,也能解决erasure pool性能低的问题。
这就是radhat的ice现在炒作的纠删码、存储分层。
假设hot-storage是一个快速存储池,即是一个快速的replicated pools。具体命令如下:
\( ceph osd pool create ecpool 12 12 erasure (这就是我们的erasure pool k&#61;2 m&#61;1)<br /> \) ceph osd pool create hot-storage 128 (这个就是我们的cache tier,它是高速的)
\( ceph osd tier add ecpool hot-storage<br /> \) ceph osd tier cache-mode hot-storage writeback
$ ceph osd tier set-overlay ecpool hot-storage
以writeback模式把hot-storage pool作为ecpool 的tier,这样对ecpool的读写实际上使用的是hot-storage pool,并且能用到hot-storage pool的灵活性和速度。
由于erasure不支持部分写,故在ecpool中无法创建RBD image;设置了erasure pool的tier分层pool后,就可以创建在ecpool创建RBD image了。(没有添加ceche tier时,无法用rbd创建镜像,前边已经提过)。
rbd –pool ecpool create –size 10 myvolume
rbd import 1.txt 1.txt  -p ecpool
rbd ls -p ecpool
说明:操作ecpool和hot-storage效果一样,但是实际数据存放的位置,根据情况而定:1周以上不使用,则存放在ecpool,经常使用,则存放在hot-storage。


第5章 Ceph纠删码和Cache分层
纠删码和Cache分层是两个紧密联系的功能。这2个功能是redhat收购Ceph后一直重视的功能。
纠删码提高了存储容量,却降低了速度;而Cache分层刚好解决了这个问题;
原理架构如下:


Cache分层的分层部署不只解决纠删码速度慢的问题,当然还解决一些其他问题,下次再讨论。

小讯
上一篇 2025-05-27 14:19
下一篇 2025-06-11 12:20

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/142299.html