Ceph 知识摘录(内部组件流程)

RADOS
可靠、自动、分布式对象存储系统

RADOS作用
1、Rados是Ceph集群基础,Ceph存储系统核心,Ceph中一切都是以对象形式存储,Rados就是负责存储这些对象,无需考虑数据啥类型
2、确保数据的一致性和可靠性
3、负责数据的复制、故障检测和恢复
4、负责数据在集群节点之间的迁移和再均衡
5、Ceph所有优秀特性都是rados提供的,如:分布式对象存储、高可用性、高可靠性、没有单点故障、自我修复、自我管理
6、Rados就是ceph集群中的大脑,负责决策、调度等工作

OSD
对象存储设备

OSD作用
1、负责存储实际用户数据(数据将以对象形式存储在OSD中)
2、负责响应客户端读操作请求
3、选择不同文件系统对Ceph性能有影响。XFS

MON作用
1、通过一系列Map跟踪整个集群的健康状态,监控整个集群的监控状况
2、Map是指这几个组件的map:osd/mon/pg/crush,所有的集群节点都向mon节点报告状态,并分享每一个状态变化的信息
3、一个Mon为每一个组件维护一个独立的Map,Mon不存储实际的数据

MON 集群Map表功能

Monitor map:包括有关monitor节点端到端的信息,其中包括Ceph集群ID,监控主机名和IP以及端口。并且存储当前版本信息以及最新更改信息,通过 "ceph mon dump" 查看 monitor map。

        OSD map:包括一些常用的信息,如集群ID、创建OSD map的 版本信息和最后修改信息,以及pool相关信息,主要包括pool 名字、pool的ID、类型,副本数目以及PGP等,还包括数量、状态、权重、最新的清洁间隔和OSD主机信息。通过命令 "ceph osd dump" 查看。

PG map:包括当前PG版本、时间戳、最新的OSD Map的版本信息、空间使用比例,以及接近占满比例信息,同事,也包括每个PG ID、对象数目、状态、OSD 的状态以及深度清理的详细信息。通过命令 "ceph pg dump" 可以查看相关状态。

CRUSH map: CRUSH map 包括集群存储设备信息,故障域层次结构和存储数据时定义失败域规则信息。

Librados库
对Rados进行抽象和封装,并向上层提供API,以便直接基于Rados(而不是整个Ceph)进行应用开发。librados实现的API也只是针对对象存储功能的。

RGW作用
1、提供了一个兼容Amazon S3和OpenStack对象存储API(Swift)的restful API接口

CRUSH算法
CRUSH是一种数据分发算法,其他数据分发算法依赖中心的Metadata服务器来存储元数据效率较低,CRUSH则是通过计算、解决动态数据分发的场景
一、过去存储机制
过去的存储机制是,在存储数据时,首先要保存一份元数据,这个元数据存储的信息是数据存储在哪个节点和磁盘阵列的位置等信息
每一次有新的数据存储时,最先更新的是元数据的信息,之后才是实际的数据存储

缺点:
1、不适合超大容量级别的数据存储
2、存在单点故障,万一丢失存储的元数据,面临的是丢失所有数据
3、防止核心元数据丢失是非常重要的,元数据管理太复杂,因此成为存储系统的瓶颈

二、Ceph的存储机制
Crush 算法:Ceph数据存储的核心
优点:
1、Crush算法准确的计算数据的写入位置和从哪个位置读取
2、按需计算元数据,而不是存储元数据,消除了传统的元数据存储方法中的限制

Crush工作机制
1、元数据计算的负载是分布式的,仅在需要的时候执行(元数据计算的过程也叫做Crush查找)
2、Crush的查找是在Ceph客户端上执行,从而占用很少的Ceph集群资源,性能更好

Crush查找步骤
1、往Ceph存储集群发起读或写的请求时,首先联系Mon获取集群Map副本
2、Mon向客户端返回集群Map信息,包含:集群状态、配置等信息
3、使用对象名称和池名称或者池ID将数据转换为对象
4、将对象和PG数量一起经过散列来生成其在Ceph池中最终存放的那个pg
5、通过计算好的pg执行Crush查找,计算出存储或获取数据的那个主OSD,计算完主OSD后得到OSD ID和辅OSD ID
6、客户端直接联系那个OSD来存储或者读取数据

Crush算法原理图

原文地址:https://www.cnblogs.com/weichao01/p/9592247.html

时间: 2024-11-02 16:49:22

Ceph 知识摘录(内部组件流程)的相关文章

Ceph 知识摘录(Crush算法、PG/PGP)

Crush算法1.Crush的目的      优化分配数据,高效的重组数据,灵活的约束对象副本放置,硬件故障时候最大化保证数据安全 2.流程        Ceph 架构中,Ceph客户端是直接读写存放在OSD上的RADOS Object,因此,Ceph需要走完(Pool, Object) → (Pool, PG) → OSD set → OSD/Disk 完整的链路,才能让Ceph client知道目标数据 object的具体位置在哪里.        数据写入时,文件被切分成object,o

Ceph 知识摘录(块存储操作-1)

Ceph块存储操作 1.创建Ceph块设备 #rbd create rbd1 --size 1024 -p compute 2.列出创建的块image #rbd ls -p compute 3.检查块image的细节 #rbd --image rbd1 info -p compute 4.映射块设备到client #rbd feature disable rbd1 -p compute exclusive-lock object-map fast-diff deep-flatten #rbd m

mysql内部组件架构,索引管理,视图view

--以下内容摘自马哥教育课堂 === 单进程多线程模型 每个用户连接都使用一个线程 mysql使用线程池来管理各个线程 mysql内部组件架构 connection --management service & unities(管理服务单元,如备份恢复,集群,合并,迁移工具,复制工具): connection pool(认证,线程重用,连接限制,内存检查,缓存): --SQL接口(DML,DDL,存储过程,视图,触发器): 分析器parser(查询翻译成二进制指令,访问权限): 优化器optim

PMBOK 项目管理 九大知识领域和五大流程

PMI Project Management Institute.PMI 是世界上最大的非盈利机构,是项目管理领域的领导者.PMI制定项目管理行业标准,带领项目管理的研究并提供项目管理的培训,证书,还有一些加强提搞项目管理专业技能的机会. PMBOK Project Management Body of Knowledge.PMBOK描述了项目管理专业技能总体知识,包括证实了被广泛应用的传统的,革新的,高级的实践的不足之处.另外,它也包括了被普遍接受的最佳实践.PMBOK被广泛用于各种行业. P

编程基础知识——Java JNI开发流程(2)

android中使用jni调用本地C++库 android平台上的本地库文件后缀 .so.类似windows上的dll文件. 要在android上使用jni,首先需要下载android ndk. 操作步骤,正常建立android工程,然后在android工程那里右键,属性,选择Android Tools -> Add Native Support.就可以为android工程增加本地库支持. 添加支持后的android工程,会增加jni目录,C++代码就写在这个目录里. 新建一个类,并且使用nat

Android 并发编程:(一)基础知识 —— 架构和组件

本章节所有内容皆为原创,如需转载,请注明出处. http://blog.csdn.net/manoel/article/details/38462631 写在前面的话 很久没写博客了,一是因为自身水平有限,怕误人子弟:二是因为感觉没什么可写的:三是因为时间有限,要寻找工作.学习和生活之间的平衡. 最近一直在研究和梳理Android多线程编程的东西,希望能够把这些分享给大家. 想必做过Android应用开发的同学应该都会知道,多线程是一个特别"诡异"的地方.之所以称为"诡异&q

浅析JVM内部组件

原文地址:http://blog.jamesdbloom.com/JVMInternals.html(转载请注明英文原文出处以及本文地址) 这篇文章简要解析了JVM的内部结构.下面这幅图展示了一个典型的JVM(符合JVM Specification Java SE 7 Edition)所具备的关键内部组件. 上图展示的所有这些组件都将在下面两个章节中被解析.第一章包含将会在每个线程上创建的组件:第二章包含那些不依赖于线程即可创建的组件(线程间可共享的组件). 线程内创建 JVM系统线程 单个线程

Android Scrollview 内部组件android:layout_height="fill_parent"无效的解决办法

Found the solution myself in the end. The problem was not with the LinearLayout,  but with the ScrollView (seems weird, considering the fact that the ScrollView was expanding, while the LinearLayout wasn't). The solution was to use android:fillViewpo

使用javascript访问kettle内部组件

使用javascript访问kettle内部组件 很少有ETL项目需求使用kettle标准步骤不能实现的.假设举例每条记录都需标记为来自那个数据库的信息,原数据库是通过DB连接设置的,那如何获取这些设置?(类型.主机.端口.数据库名称等) 在kettle中没有标准步骤可以实现,幸运的是javascript步骤可以访问kettle内部组件并实现以上需求. 访问kettle内部组件是_step_变量,其被自动设置在每个javascript步骤中.它代表javascript步骤本身,步骤的getTra