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