ceph--理论

news2024/12/23 0:17:13

分布式存储--------Ceph

前言:随着OpenStack的快速发展,给Ceph的发展注入了强心剂,越来越多的人使用Ceph作为OpenStack的底层共享存储,Ceph在中国的社区也蓬勃发展起来。近两年OpenStack火爆度不及当年,借助于云原生尤其是Kubernetes技术的发展,作为底层存储的基石,Ceph再次发力,为Kubernets有状态化业务提供了存储机制的实现。

分布式

分布式是指多个系统协同合作完成一个特定任务的系统。好比 多个人一起做不同的事。

相当于在写mysql的时候,每个节点存储部分数据(分库分表),这就是分布式存储的由来。

存储一些非结构化数据:静态文件、图片、pdf、小视频 ... 这些也是分布式文件系统的由来。

集群

集群是指在几个服务器上部署相同的应用程序来分担客户端的请求。

好比 多个人一起做同样的事。

集群主要的使用场景是为了分担请求的压力。

但是,当压力进一步增大的时候,可能在需要存储的部分

一、存储基础

1、传统存储

传统的存储类型

DAS设备

SAS、SATA、SCSI、IDE、USB

无论是哪种接口,都是存储设备下的磁盘设备,而磁盘设备其实就是一种存储,这种存储就是直接接入到主板总线上去的

NAS设备(只能使用远程存储的文件,但是不能进行管理,通讯方式基于文件方式实现)

NFS、CIFS

几乎所有的网络存储设备基本上都是以文件系统样式进行使用,无法进一步格式化操作

Nfs (将远程共享的文件挂载到本地目录上可以访问远程服务器上的资源,但是不能管理存储空间)。

SAN(存储区域网络)

SCSI协议、FCSAN、iSCSI

块设备存储

 

基于SAN方式提供给客户端操作系统的是一种块设备接口,这些设备主要通过SCSI协议来完成正常通信,SCSI的结构类似于TCP/IP协议,也有很多层,但是SCSI协议主要用来进行存储数据操作的,既然是分层方式实现的,那就是说有部分层可以被替代,比如将物理层基于FC方式来实现,就形成了FCSAN ,如果基于以太网方式来传递数据,就形成了iSCSI模式。

二、传统存储方式问题

1、存储处理能力不足

2、存储空间不足

单块磁盘的容量再大,也无法满足用户的正常访问所需的数据容量限制

3、单点问题

单主机存储数据存在SPOF(single point of failure)问题

三、文件系统简介

1、文件系统的组成

接口:文件系统接口

功能模块(管理、存储的工具):对象管理里的软件集合

对象及属性:(使用此文件系统的消费者)

2、文件系统的作用

从系统角度来看,文件系统对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统

主要负责为用户建立文件、存入、读出、修改、转储文件,控制文件的存取

四、Ceph 简介

ceph是一个可无限伸缩的开源分布式存储系统,设计初衷是提供较好的性能、可靠性和可扩展性,它基于RADOS实现。在经过了数年的发展之后,目前已得到众多云计算厂商的支持并被广泛应用,RedHat及OpenStack(云操作系统)

都可与Ceph整合以支持虚拟机镜像的后端存储。

注:OpenStack就是为了云计算服务的。简单来说,它就是一个操作系统

其中(分布式对象存储系统RADOS是Ceph最为关键的技术,它是一个支持海量存储对象的分布式对象存储系统。RADOS层本身就是一个完整的对象存储系统,事实上,所有存储在Ceph系统中的用户数据最终都是由这一层来存储的。而Ceph的高可靠、高可扩展、高性能、高自动化等特性,本质上也是由这一层所提供的)

三、Ceph 特点

高性能:

1、摒弃了传统的集中式存储元数据寻址的方案,采用 CRUSH 算法,数据分布均衡,并行度高。

2、考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架、感知等。

3、能够支持上千个存储节点的规模,支持 TB 到 PB 级的数据。

高可用性:

1、副本数可以灵活控制。
2、支持故障域分隔,数据强一致性。
3、多种故障场景自动进行修复自愈。
4、没有单点故障,自动管理。

高扩展性:

1、去中心化。
2、扩展灵活。
3、随着节点增加而性能线性增长。

特性丰富

1、支持三种存储接口:块存储、文件存储、对象存储。

2、支持自定义接口,支持多种语言驱动。

缺点:

单机无法实现ceph

需要搭建集群,适合大型环境,成本高

四、ceph基础

ceph把每一个待管理的数据流切分为一个到多个固定大小(默认4M)的对象数据,并以原子单元完成数据的读写

对象数据的底层存储服务是有多个主机组成的存储集群,该集群为RADOS,该集群的librados是存储集群的API(应用程序接口),支持c/c++/java/python/ruby/php/go

ceph存储集群提供的基本存储服务,使ceph能够在一个联合文件系统中独一无二的实现对象存储(object storage)、块存储(block storage)以及文件存储(file storage)。依赖于RADOS,你可以直接通过librados API来访问ceph存储集群。

对象存储:

也就是通常意义的键值存储,其接口就是简单的 GET、PUT、DEL 和其他扩展,代表主要有 Swift 、S3、Gluster 等。

块存储:

 Ceph 的 RBD(RBD 是 Ceph 面向块存储的接口)。在常见的存储中 DAS、SAN 提供的也是块存储。

文件系统存储:

分布式存储提供了并行化的能力,如 Ceph 的 CephFS(CephFS 是 Ceph 面向文件存储的接口),但是有时候又会把 GlusterFS,HDFS 这种非 POSIX 接口的类文件存储接口归入此类。当然 NFS、NAS 也是属于文件系统存储。

也就是说,ceph 将三种存储类型统一在一个平台中,从而实现了更强大的适用性

五、Ceph 核心组件

1、Monitors(核心)

监视器维护集群状态的多种映射,同时提供认证和日志记录服务,包括有关 monitor 节点端到端的信息,其中包括 Ceph 集群 ID,监控主机名和 IP 以及端口。并且存储当前版本信息以及最新更改信息,监视器负责管理守护进程和客户端之间的身份验证,通常至少需要三个监视器才能实现冗余和高可用。

2、Managers(状态跟踪)

Ceph的Managers(Ceph Manager),守护进程(ceph-mgr)负责跟踪运行时间指标和Ceph群集的当前状态,包括存储利用率,当前性能指标和系统负载。 Ceph Manager守护程序还托管基于python的插件来管理和公开Ceph集群信息,包括基于Web的仪表板和REST API。 通常,至少有两名Manager需要高可用性。

3、OSD(对象存储服务器)

Ceph的OSD(Object Storage Device)守护进程。主要功能包括:存储数据、副本数据处理、数据恢复、数据回补、平衡数据分布,并将数据相关的一些监控信息提供给Ceph Moniter,以便Ceph Moniter来检查其他OSD的心跳状态。一个Ceph OSD存储集群,要求至少两个Ceph OSD,才能有效的保存两份数据。注意,这里的两个Ceph OSD是指运行在两台物理服务器上,并不是在一台物理服务器上运行两个Ceph OSD的守护进程。通常,冗余和高可用性至少需要3个Ceph OSD。

4、MDS(Metadata Server)

 Ceph 元数据,主要保存的是 Ceph 文件系统的元数据。注意:ceph 的块存储和 ceph 对象存储都不需要 MDS。

5、RADOS

RADOS(Reliable Autonomic Distributed Object Store)是 ceph 存储集群的基础。在 ceph 中,所有数据都以对象的形式存储,并且无论什么数据类型,RADOS 对象存储都将负责保存这些对象。RADOS 层可以确保数据始终保持一致。

6、librados

librados 库,为应用程度提供访问接口。同时也为块存储、对象存储、文件系统提供原生的接口。

7、RADOSGW

网关接口,提供对象存储服务。它使用 librgw 和 librados 来实现允许应用程序与 Ceph 对象存储建立连接。并且提供 S3 和 Swift 兼容的 RESTful API 接口。

8、RBD

块设备,它能够自动精简配置并可调整大小,而且将数据分散存储在多个 OSD 上。

9、CephFS

 Ceph 文件系统,与 POSIX 兼容的文件系统,基于 librados 封装原生接口。

六、Ceph 存储系统的逻辑层次结构

Ceph存储系统的逻辑结构在分布式大致分为4个部分:

1、基于存储系统RADOS、

2、基于RADOS实现的CephFS、

3、基于RADOS的LIBRADOS层应用接口、

4、基于LIBRADOS的应用接口RBD和RADOSGW。

 

①、基础存储系统RADOS:Reliable Autonomic Distributed Object Store。RADOS是ceph存储集群的基础。在ceph中,所有数据都以对象的形式存储。在物理上,RADOS由大量的存储设备节点组成,每个节点拥有自己的硬件资源,并运行着操作系统和文件系统。

②、基础库LIBRADOS:LIBRADOS层的功能是对RADOS进行抽象和封装,并向上层提供API(应用程序接口)以便直接基于RADOS进行应用开发。应用程序通过访问LIBRADOS库来与RADOS系统进行交互,支持多种编程语言,比如C、C++、Python等。物理上,LIBRADOS与基于其上开发的应用在同一台机器,也称为本地API。

③、上层应用接口:Ceph上层应用接口包括对象存储RADOSGW、块存储RBD和文件系统存储CephFS。RADOSGW提供与Amazon S3和Swift兼容的RESTful API网关,供相应的对象存储应用开发使用;RBD提供标准的块设备接口,常用于虚拟化场景下为虚拟机创建volume。

④、应用层:Ceph各应用接口在不同应用场景下的使用,例如基于LIBRADOS直接开发的对象存储应用、基于RADOSGW开发的对象存储应用、基于RBD实现的云主机硬盘等。

七、Ceph 数据存储过程

 Ceph中一切皆对象,不管是RBD块存储接口,RGW对象存储接口还是文件存储CephFS接口,其存储如到Ceph中的数据均可以看作是一个对象,一个文件需要切割为多个对象(object),然后将object存储到OSD中。

切割后的对象怎么选择到对应的OSD存储节点,需要依赖于Ceph的智能调度算法CRUSH,通过CRUSH算法将对象调度到合适的OSD节点上,不管是客户端还是OSD,均使用CRUSH算法来计算对象在集群中OSD的位置信息,同时保障object的副本能落到合适的OSD节点上。

简单来说:

无论使用哪种存储方式(对象、块、文件系统),存储的数据都会被切分成 Objects(对象)。Objects size 大小可以由管理员调整,通常为 2M 或 4M。每个对象都会有一个唯一的 OID,OID是由 ino 与 ono 生成。

ino:即是文件的 File ID,用于在全局唯一标识每一个文件。

ono:则是分片的编号。

比如:一个文件 FileID 为 A,它被切成了两个对象,一个对象编号 0,另一个编号 1,那么这两个文件的 oid 则为 A0 与 A1。

①、File:此处的 file 就是用户需要存储或者访问的文件。对于一个基于 Ceph 开发的对象存储应用而言,这个 file 也就对应于应用中的 “对象”,也就是用户直接操作的 “对象”。

②、Ojbect:此处的 object 是 RADOS 所看到的 “对象”。Object 与上面提到的 file 的区别是,object 的最大 size 由 RADOS 限定(通常为 2MB 或 4MB),以便实现底层存储的组织管理。因此,当上层应用向 RADOS 存入 size 很大的 file 时,需要将 file 切分成统一大小的一系列 object(最后一个的大小可以不同)进行存储。

③、PG(Placement Group 放置组):PG 的用途是对 object 的存储进行组织和位置映射。具体而言,一个 PG 负责组织若干个 object(可以为数千个甚至更多),但一个 object 只能被映射到一个 PG 中,即 PG 和 object 之间是 “一对多” 映射关系。同时,一个 PG 会被映射到 n 个 OSD 上,而每个 OSD 上都会承载大量的 PG,即 PG 和 OSD 之间是多对多映射关系。在实践当中,n 至少为 2,如果用于生产环境,则至少为 3。一个 OSD 上的 PG 则可达到数百个。事实上,PG 数量的设置牵扯到数据分布的均匀性问题。

④、OSD(object storage device对象存储设备):OSD 的数量事实上也关系到系统的数据分布均匀性,因此其数量不应太少。在实践当中,至少也应该是数十上百个的量级才有助于 Ceph 系统的设计发挥其应有的优势。

Ceph 中的寻址至少要经历以下三次映射:

File(文件)------->  object(对象) 映射

Object -------> PG(组)映射,hash(oid) & mask -----> pgid

PG ------->OSD 映射,CRUSH 算法

CRUSH(Controlled Replication Under Scalable Hashing):通过计算系统中数据应该被写入或读出的位置。CRUSH 能够感知基础架构,能够理解基础设施各个部件之间的关系。并且 CRUSH 保存数据的多个副本,这样即使一个故障域的几个组件都出现故障,数据依然可用。CRUSH 使得 ceph 实现了自我管理和自我修复。

 

1)文件切割成4M大小的数据对象

2)数据对象通过hash算法找到存储池中的pg

3)在通过crush(智能调度)算法找到pg映射的osd

4)pg中的主osd将对象写入到磁盘

5)主osd将数据同步给备份osd,并等到备份osd写完后返回确认消息

6)主osd将写完信息告知客户端

Ceph Pool 和 PG 分布情况

pool:是 ceph 存储数据时的逻辑分区,它起到 namespace(名称空间) 的作用。每个 pool 包含一定数量的 PG。PG 里的对象被映射到不同的 Object 上。pool 是分布到整个集群的。pool 可以做故障隔离域,根据不同的用户场景不统一进行隔离。

RADOS 分布式存储相较于传统分布式存储的优势在于:

①、将文件映射到 object 后,利用 Cluster Map 通过 CRUSH 计算而不是查找表方式定位文件数据存储到存储设备的具体位置。优化了传统文件到块的映射和 Block MAP 的管理。

②、RADOS 充分利用 OSD 的智能特点,将部分任务授权给 OSD,最大程度地实现可扩展。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/124485.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SoringBoot+VUE前后端分离项目学习笔记 - 【01 环境配置以及VUE2集成ElementUI】

技术栈一览 SpringBoot2 Vue2 ElementUI Axios Hutool Mysql Echarts 所需软件环境 版本一览 JDK 1.8Mysql5.7Node 14.16.0navicatIdea 2021 Vue-cli 安装 npm install -g vue/cli 查看版本 创建VUE工程 初始化工程 vue create vue 选择Manually select feature…

【MySQL】数据库索引 - 浅谈索引类型

索引类型可以分为哈希表、有序数组和 N 叉树 不管是哈希还是有序数组,或者 N 叉树,它们都是基于其自身数据结构的特性来提高读写速度。在 NoSQL 里面还运用到了 LSM 树,来提高写的速度,还有跳表等数据结构来进行优化。 不过需要…

数据结构与算法-java

什么是数组? (1)数组是计算机中最基本的数据结构之一,我们会用一些名为索引的数字来标识每项数据在数组中的位置。 (2)大多数编程语言中索引是从0开始的。 (3)数组在内存中是存在连续…

如何打造一个流式数据湖

Flink将数据写入到 hudi 准备阶段 启动hadoop集群(单机模式) ./sbin/start-all.shhdfs离开安全模式 hdfs dfsadmin -safemode leave启动hive 后台启动元数据 ./hive --service metastore &启动hiveserver2 ./hiveserver2 &执行sql语句之前…

fpga实操训练(ip rom)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 altera的fpga本身自带了rom的ip,使用起来也十分方便。实际开发中,使用rom的场景也很多,比如一些默认的配置文件…

TensorFlow之回归模型-2

1 基本概念 回归模型 线性 线性模型 非线性模型 线性回归 逻辑回归 Log Loss(损失函数) 分类临界值 2 效率预测 回归问题是预测一个持续的值,主要是用于解决不确定性的问题,例如,一个商品在未来可能的价格或…

CMAKE_INSTALL_PREFIX

一、定义 CMAKE_INSTALL_PREFIX为cmake的内置变量,用于指定cmake执行install命令时,安装的路径前缀。Linux下的默认路径是/usr/local ,Windows下默认路径是 C:/Program Files/${PROJECT_NAME} 二、用…

dcloud如何苹果ios系统真机测试-HBuilderX真机运行ios测试

dcloud如何运行到IOS真机测试 1,下载安装iTunes 安装完毕后重新打开HBuilderX 2,点击运行真机 将iPhone 与电脑进行链接,点信任, 运行-运行到手机或模拟器-运行到IOS APP 基座 安装过itunes就会有显示,但是这里还有…

进程的学习 —— Linux下的进程

目录前言1 认识进程1.1 进程的概念1.2 进程的管理1.3 查看进程的两种方法1.4 getpid、getppid和fork函数2 进程状态2.1 普遍概念下的进程状态2.2 Linux下的进程状态2.2.1 测试Linux的各种进程状态2.2.2 僵尸进程2.3 孤儿进程3 进程切换与进程优先级3.1 并行、并发3.2 进程切换3…

kafka和sparkStreaming

1、Kafka 1、kafka集群架构 producer 消息生产者,发布消息到Kafka集群的终端或服务 broker Kafka集群中包含的服务器,一个borker就表示kafka集群中的一个节点 topic 每条发布到Kafka集群的消息属于的类别,即Kafka是面向 topic 的。 更通俗…

HDFS 常用命令

一、HDFS常用命令 1、查看版本 hdfs version 2、创建 HDFS 文件系统目录。 格式: hdfs dfs -mkdir /user/dir1 3、列出目录下的所有文件 类似 Linux Shell 的 ls 命令。用它可以列出指定目录下的所有文件 hdfs dfs -ls /user/ 4、把本地文件系统文件和目录拷贝…

整合Tkinter GUI界面的古诗词词云生成

Python语言提供的wordcloud词云功能,使文本数据的可视化,简单而美丽。但网上的大多数词云生成功能,多半没有可交互的GUI界面,使用起来稍觉不便。笔者结合网上的中文词云功能,以唐诗三百首,宋词三百首&#…

拟合算法(模型+代码)

拟合的结果是得到一个确定的曲线 最小二乘法的几何解释: argmin 存在参数k,b使括号里的值最小 第一种有绝对值,不易求导(求导在求最小值),计算较为复杂;所以我们往往使用第二种定义&#xff0…

什么软件可以录屏?这3款宝藏录屏软件,码住收藏

当我们处理剪辑视频时,我们需要使用到很多素材。有些素材我们可以直接从电脑网上进行下载。但有些素材我们在网上无法进行下载,这个时候就需要使用录屏软件进行录屏。什么软件可以录屏?今天小编向您分享3个宝藏录屏软件,赶紧码住收…

jmeter基础使用方法

文章目录一 配置环境变量二 Jmeter默认语言设置三 启动线程组的创建发送http请求数据报告一 配置环境变量 设置JMETER_HOME,及jemeter解压目录。 设置CLASSPATH,此处分别配置ApacheJMeter_core.jar和jorphan.jar所在位置。 关于环境变量配置多个值,在多个参数中间…

动态规划——状态压缩dp

文章目录概述状态压缩使用条件状压dp位运算棋盘(基于连通性)类问题概述例题蒙德里安的梦想小国王玉米田炮兵阵地集合类问题概述例题最短Hamilton路径愤怒的小鸟总结概述 状态压缩 状态压缩就是使用某种方法,简明扼要地以最小代价来表示某种…

MySQL 进阶篇2.0 存储过程 触发器 锁 InnoDB引擎

45.存储过程-介绍 46.存储过程-基本语法 -- 查看 select * from information_sc

Python中import语句用法详解

一. 什么是模块(module)? 在实际应用中,有时程序所要实现功能比较复杂,代码量也很大。若把所有的代码都存储在一个文件中,则不利于代码的复用和维护。一种更好的方式是将实现不同功能的代码分拆到多个文件…

案例丨多元业态管理服务厂商如何走通数字化转型之路

对于多元业态管理服务厂商来说,不同业态客户的使用习惯不一样,从而导致服务过程中的服务有所区别,是这类服务厂商数字化转型的核心需求。下面就以全国领先的阳光智博为例,看下他们是怎样数字化转型的。 一、企业介绍 阳光智博服务…

ASEMI整流二极管A7二极管和M7二极管能代换吗

编辑-Z A7二极管和M7二极管不仅外观封装很像,各项参数也是非常接近的,那么A7二极管和M7二极管能代换吗?我们先来看看他们的详细参数对比: A7二极管参数: 型号:A7二极管 封装:SOD-123 最大重…