【ceph的通用解决方案】-ceph纠删码理论与实践

2024-02-13 15:50

本文主要是介绍【ceph的通用解决方案】-ceph纠删码理论与实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者:【吴业亮】
博客:https://wuyeliang.blog.csdn.net/

开篇:
目前企业的业务场景多种多样,并非所有Ceph存储解决方案都是相同的,了解工作负载和容量要求对于设Ceph解决方案至关重要。Ceph可帮助企业通过统一的分布式集群提供对象存储、块存储或文件系统存储。在设计流程中,这些集群解决方案针对每项要求都进行了优化。该设计流程的首要因素包括 IOPS 或带宽要求、存储容量需求以及架构和组件选择,确保这些因素的合理性有助于完美平衡性能和成本。不同类型的工作负载需要不同的存储基础设施方案。

在这里插入图片描述
下面将从以下6个方面介绍ceph的通用解决方案

  • 性能方面:

1、如何ssd作为Ceph-osd的日志盘使用
2、如何同一个Ceph集群分别创建ssd和hdd池
3、如何将ssd作为hdd的缓存池
4、如何指定ssd盘为主osd,hdd为从osd

  • 稳定及数据安全性方面:

5、Ceph双副本如何保证宕机数据的安全性
6、Ceph纠删码理论与实践

注意:该文章同时在华云数据官方公众号上发布

智汇华云 | Ceph的正确玩法之Ceph纠删码理论与实践

下面我们开始专题:Ceph纠删码理论与实践

一、纠删码原理
纠删码(ErasureCoding,EC)是一种编码容错技术,最早是在通信行业解决部分数据在传输中的损耗问题。其基本原理就是把传输的信号分段,加入一定的校验再让各段间发生相互关联,即使在传输过程中丢失部分信号,接收端仍然能通过算法将完整的信息计算出来。在数据存储中,纠删码将数据分割成片段,把冗余数据块扩展和编码,并将其存储在不同的位置,比如磁盘、存储节点或者其他地理位置。如果需要严格区分,实际上按照误码控制的不同功能,可分为检错、纠错和纠删3种类型。

•检错码仅具备识别错码功能而无纠正错码功能。

•纠错码不仅具备识别错码功能,同时具备纠正错码功能。

•纠删码则不仅具备识别错码和纠正错码的功能,而且当错码超过纠正范围时,还可把无法纠错的信息删除。

从纠删码基本的形态看,它是k个数据块+m个校验块的结构,其中k和m值可以按照一定的规则设定,可以用公式:n=k+m来表示。变量k代表原始数据或符号的值。变量m代表故障后添加的提供保护的额外或冗余符号的值。变量n代表纠删码过程后创建的符号的总值。当小于m个存储块(数据块或校验块)损坏的情况下,整体数据块可以通过计算剩余存储块上的数据得到,整体数据不会丢失。

下面以k=2,m=1为例,介绍一下如何以纠删码的形式将一个名称为cat.jpg的对象存放在Ceph中,假定该对象的内容为ABCDEFGH。客户端在将cat.jpg上传到Ceph以后,会在主OSD中调用相应的纠删码算法对数据进行编码计算:将原来的ABCDEFGH拆分成两个分片,对应图11-2中的条带分片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资源,而且计算一个数据块时需要读出大量数据并通过网络传输。相比副本数据恢复,纠删码数据恢复时给网络带来巨大的负担。因此,使用纠删码对硬件的设备性能是一个较大的考验,这点需要注意。另外,需要注意的是,使用纠删码所建立的存储资源池无法新建RBD块设备。

Ceph安装后默认有DefaultRule,这个Rule默认是在Host层级进行三副本读写。副本技术带来的优点是高可靠性、优异的读写性能和快速的副本恢复。然而,副本技术带来的成本压力是较高的,特别是三副本数据情景下,每TB数据的成本是硬盘裸容量3倍以上(包括节点CPU和内存均摊开销)。纠删码具备与副本相近的高可用特性,而且降低了冗余数据的开销,同时带来了大量计算和网络高负载。

二、纠删码实践

纠删码是通过创建erasure类型的Ceph池实现的。这些池是基于一个纠删码配置文件进行创建的,在这个配置文件中定义了纠删码的特征值。现在我们将创建一个纠删码配置文件,并根据这个配置文件创建纠删码池。下面的命令将创建一个名为Ecprofile的纠删码配置文件,它定义的特征值是:k=3和m=2,两者分别表示数据块和校验块的数量。所以,每一个存储在纠删码池中的对象都将分为3(即k)个数据块,和2(即m)个额外添加的校验块,一共有5个块(k+m)。最后,这5(即k+m)个块将分布在不同故障区域中的OSD上。

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

# ceph  osd erasure-code-profile  set Ecprofile crush-failure-domain=osd k=3 m=2

2、查看配置文件

# ceph osd erasure-code-profile ls
Ecprofile
default
# ceph osd erasure-code-profile get  Ecprofile
crush-device-class=
crush-failure-domain=osd
crush-root=default
jerasure-per-chunk-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 create Ecpool 16 16 erasure Ecprofile
pool 'Ecpool' created

4、检查新创建的池的状态,你会发现池的大小是5(k+m),也就是说,erasure大小是5。因此,数据将被写入五个不同的OSD中:

# ceph osd dump | grep Ecpool 
pool 8 'Ecpool' erasure size 5 min_size 4 crush_rule 3 object_hash rjenkins pg_num 16 pgp_num 16 last_change 231 flags hashpspool 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。命令的输出将清晰地显示对象的每个块所在的OSDID。正如步骤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 object1
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 'object1' -> 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、我们从纠删码池中下载文件

# rados get  -p Ecpool object1 /tmp/wyl

参考:

https://access.redhat.com/documentation/en-us/red_hat_ceph_storage/1.2.3/html/storage_strategies/erasure-code-profiles
https://ceph.seekerliu.com/rados/operations/erasure-code/

这篇关于【ceph的通用解决方案】-ceph纠删码理论与实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/705952

相关文章

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

js异步提交form表单的解决方案

1.定义异步提交表单的方法 (通用方法) /*** 异步提交form表单* @param options {form:form表单元素,success:执行成功后处理函数}* <span style="color:#ff0000;"><strong>@注意 后台接收参数要解码否则中文会导致乱码 如:URLDecoder.decode(param,"UTF-8")</strong></span>

Prometheus与Grafana在DevOps中的应用与最佳实践

Prometheus 与 Grafana 在 DevOps 中的应用与最佳实践 随着 DevOps 文化和实践的普及,监控和可视化工具已成为 DevOps 工具链中不可或缺的部分。Prometheus 和 Grafana 是其中最受欢迎的开源监控解决方案之一,它们的结合能够为系统和应用程序提供全面的监控、告警和可视化展示。本篇文章将详细探讨 Prometheus 和 Grafana 在 DevO

springboot整合swagger2之最佳实践

来源:https://blog.lqdev.cn/2018/07/21/springboot/chapter-ten/ Swagger是一款RESTful接口的文档在线自动生成、功能测试功能框架。 一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务,加上swagger-ui,可以有很好的呈现。 SpringBoot集成 pom <!--swagge

明明的随机数处理问题分析与解决方案

明明的随机数处理问题分析与解决方案 引言问题描述解决方案数据结构设计具体步骤伪代码C语言实现详细解释读取输入去重操作排序操作输出结果复杂度分析 引言 明明生成了N个1到500之间的随机整数,我们需要对这些整数进行处理,删去重复的数字,然后进行排序并输出结果。本文将详细讲解如何通过算法、数据结构以及C语言来解决这个问题。我们将会使用数组和哈希表来实现去重操作,再利用排序算法对结果

UE5 半透明阴影 快速解决方案

Step 1: 打开该选项 Step 2: 将半透明材质给到模型后,设置光照的Shadow Resolution Scale,越大,阴影的效果越好

MySQL主从同步延迟原理及解决方案

概述 MySQL的主从同步是一个很成熟的架构,优点为: ①在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力; ②在从主服务器进行备份,避免备份期间影响主服务器服务; ③当主服务器出现问题时,可以切换到从服务器。 相信大家对于这些好处已经非常了解了,在项目的部署中也采用这种方案。但是MySQL的主从同步一直有从库延迟的问题,那么为什么会有这种问题。这种问题如何解决呢? MyS