forget,Ceph的正确玩法之Ceph纠删码理论与实践,小宇

admin 2019-04-06 阅读:187


一、纠删码原理

纠删码(Er托尼尼克尔森asure Coding,EC)是一种编码容错技能,最早是在通讯职业处理部分数据在传输中的损耗问题。其根本原理便是把传输琴水圣罗的信号分段,参加必定的校验再让各段间发作彼此相关,即便在传输进程中丢掉部分信号,接纳端依然能经过算法将完好的信息核算出来。在数据存储中,纠删码将数据切割成片段,把冗余数据块扩展和编码,并将其存储在不同的方位,比方磁盘、存储节点或许其他地理方位。假如需求严厉区别,实际上依照误码操控的不同功用,可分为检错、纠错和纠删3品种hotgirlclub型。

检错码仅具有辨认错码功用而无纠正错码功用。

纠错码不只具有辨认错码功用,一起具有纠正错码功用。

纠删码则不只具有辨认错码和纠正错码的功用,并且当错码超越纠正规模时,还可把无法纠错的信息删去。

从纠删码根本的形状看,它是k个数据块+m嫩嫩老公爱不行个校验块的结构,其间k和m值可以依照必定的规矩设定,可以用公式:n=k+m来表明。变量k代表原始数据或符号的值。变量m代表毛病后增加的供给维护的额定或冗余符号的值。变量n代表纠删码进程后创立的符号的总值。当小于m个存储块(数据块或校验块)损坏的情况下,全体数据块可以经过核算剩下存储块上的数据得到,全体数据不会丢掉。

下面以k=2,m=1为例,介绍一下怎么故纠删码的方式将一个名称为cat.jpg的目标存放在Ceph中,假定该目标的内容为ABCDEFGH。客户端在将cat.jpg上传陈庭实到Ceph今后,会在主OSD中调用相应的纠删码算法forget,Ceph的正确玩法之Ceph纠删码理论与实践,小宇对数据进行编码核算:将本来的ABCDEFGH拆分红两个分片,对应图11-2pelagea中的条带分片1(内容为ABCD)和条带分片2(内容为EFGH),之后再核算出别的一个校验条带分片3(内容为WXYZ)。依照crushmap所指定的规矩,将这3个分片随机散布在3个不同的OSD上面,完成对这个目标的存储操作。如图所示。



下面再看一下怎么运用纠删码读取数据,相同还是以cat.jpg为例。客户端在建议读取cat.jpg恳求今后,这个目标地点PG的主OSD会向其他相关的OSD建议读取恳求,比方主OSD是图中的OSD1,当恳求发送到了OSD2和OSD3,此刻刚好OSD2呈现毛病无法回应恳求,导致终究只能获取到OSD1(内容为ABCD)和OSD3(WXYZ)的条带分片,此刻OSD1作为主OSD会对OSD1和OSD3的数据分片做纠删码解码操作,核算出OSD2上面的分片海龟汤标题大全内容(即EFGH),之后重新组合出新的cat.jpg内容(ABCDEFGH),终究将该成果回来给客袁爱荣户端。整个进程如图所示。


尽管纠删码可以供给和副本附近的数据可靠性,并下降冗余数据的开支,全体上能进步存储设备的可用空间。可是,纠删码所带来的额定开支主要是很多核算和网络高负载,长处一起随同缺陷。特别是在一个硬盘呈现毛病的情况下,重建数据十分消耗学生搞基CPU资源,并且核算一个数据块时需求读出很多数据并经过网络传输。比较副本数据康复,纠删码数据康复时给网络带来巨大的担负。因而,运用纠删码对硬件的设备功能forget,Ceph的正确玩法之Ceph纠删码理论与实践,小宇是一个较大的检测,这点需求留意。别的,需求留意的是,运用纠删码所树立的存储资源池无法新建RBD块设备。

Ceph装置后默许有Default Rule,这个Rule默许是寿司王子在Host层级进行三副本读写。副本技能带来的长处是高可靠性、优异的读写功能和快速的副本康复。但是,副本技能带来的本钱压力是较高的,特别是三副本数据情形下,每TB数据的本钱是硬盘裸容量3倍以上(包含节点CPU和内存均摊开支)。纠删码具有与副本附近的高可用特性,并且下降了冗余数据的开支,一起带来了很多核算和网络高负载。

二、纠删码实践

纠删码是经过创立erasure类型的Ceph池完成的。这些池是依据一个纠删码配置文件进行创立的,在这个配置文件中界说了纠删码的特征forget,Ceph的正确玩法之Ceph纠删码理论与实践,小宇值。现在咱们将创立一个纠删码配置文件,并依据这个配置文件创立纠删码池。下面的指令将创立一个名为Ecprofile的纠删码配置文件,它界说的特征值是:k=3和m=2,两者别离表明数据块和校验块的数量。所以,秦思思每一个存储在纠删码池中的目标都将分为3(即k)个数据块,和2(即m)个额定增加的校验块,一共有5个块(k+m)。最终,这5(即k+m)个块将散布在不同毛病区域中的OSD上。

1、创立纠删码配置文件:

# ceph osd erasure-code-profile set Ecprofilecrush-failure-forget,Ceph的正确玩法之Ceph纠删码理论与实践,小宇domain=osd k=3 m=2

2、查看配置文件

# ceph osd erasure-code-profile ls

Ecprof内蒙古通辽市大清沟ile

default

# ceph osd erasure-code-profile get Ecprofile

crush-device-class=

crush-failure-domain=osd

crush-root=default

jerasure-per-镇江小悦悦事情chu双组份灌胶机nk-alignment=false

k郭永真=3

m=2

plugin=jerasure

technique=reed_sol_van

w=8

咱们趁便也看Ceph默许的配置文件

# ceph osd erasure-code-profile get default

k=2

m=1

plugin=jerasure

technique=reed_sol_van

3、依据上一步生成的纠删码配置文件新建一个erasure类型的Ceph池:

# ceph osd pool creatforget,Ceph的正确玩法之Ceph纠删码理论与实践,小宇e Ecpool 16 16 erasureEcprofile茅于轼事情始末

pool 'Ecpool' created

4、查看新创立的池的状况,你会发现池的巨细是5(k+m),也便是说,erasure巨细是5。因而,数据将被写入五个不同的OSD中:

# ceph osd dump | grep Ecpool

pool 8 'Ecpool' erasure size 5 min_size 4crush_rule 3 object_hash rjenkins pg_num 16 pgp_num 16 last_change 231 flagshashpspool stripe_width 12288

5、现在咱们创立个文件放到纠删码池中。浊世小兵

# echo test > test

# ceph osd pool ls

Ecpool

# rados put -p Ecpool object1 test

# rados -p Ecpool ls

object1

6、查看EC池中和object1的OSDmap。指令的输出将明晰地显现目标的每个块地点的O不文斋SDID。正如过程1)中阐明的那样,object1被分为3(m)个数据块和2(k)个额定的校验块,因而,5个块别离存储在Ceph集群彻底不同的OSD上。在这个演示中,object1一向存储在这5个OSD中,它们是osd.5、osd.1、osd.3、osd.2、osd.4。

# ceph osd map Ecpool obforget,Ceph的正确玩法之Ceph纠删码理论与实践,小宇ject1

osdmap e233 pool 'Ecpool' (8) object'object1' -> pg 8.bac5debc (8.c) -> up ([5,1,3,2,4], p5) acting([5,1,3,2,4], p5)

三、纠删码测验

1、咱们先来封闭一个osd

# systemctl stop ceph-osd@3

中止osd.3,查看EC池和object1的OSDmap。你应该留意,这儿的osd.3变成NONE了,这意味着osd.3在这个池是不可用的:

# ceph osd map Ecpool object1

osdmap e235 pool 'Ecpool' (8) object'object1forget,Ceph的正确玩法之Ceph纠删码理论与实践,小宇' -> pg 8.bac5debc (8.c) -> up ([5,1,NONE,2,4], p5) acting ([5,1,NONE,2,4],p5)

2、咱们再来封闭一个osd

# systemctl stop ceph-osd@5

中止osd.5,查看EC池和object1的OSDmap。你应该留意,这儿的osd.5变成NONE了,这意味着osd.5在这个池是不可用的:

# ceph osd map Ecpool object1

osdmap e237 pool 'Ecpool' (8) object'object1' -> pg 8.bac5debc (8.c) -> up ([NONE,1,NONE,2,4], p1) acting([NONE,1,NONE,2,4], p1)

3、咱们从纠删码池中下载文件

## r泰介强x了桂言叶几回ados get -p Ecpool object1 /tmp/wyl

本文转自:大众号Ceph中文社区