ceph基本概念
ceph提供存储的形式
- ceph非常强大的,能提供三种存储的形式
块存储
文件存储
对象存储
ceph组件

1、osd(集群仓库管理员)
-
唯一存储用户的数据的组件,存储的都是对象,数据以对象的形式存储在osd上
-
处理数据的复制,恢复和再平衡
-
osd直接与客户端进行通信,直接io读写
-
一个硬盘对应一个osd,新版本的ceph,osd需要使用一整块盘
-
在ceph集群中,osd具有主从关系
-
所有的IO请求都是主OSD完成的
-
数据的保护和复制都是由主osd完成的
-
负责检查数据的一致性,数据的平衡,在恢复
-
先将数据写到主OSD上,然后主OSD复制到多个从OSD上
-
通常是一主多从的架构
-
从OSD
-
被动的接收数据复制
-
随时准备接替主OSD的服务
-
-
2、mon
-
维护集群状态的map,唯一的访问入口
-
保存一份集群状态映射来维护整个集群的健康状态,分别为每个组件维护映射信息,包括OSD map,mon map,PG map,crush map
-
mon map 记录集群中哪些mon节点,ip地址,端口
-
osd map 记录集群中所有的osd设备,状态(up/down)
-
pg map 记录所有归置组(placement group)的详细信息,
-
crush map 记录集群的物理拓扑架构(主机,磁盘),数据如何通过crush算法分布到osd上的规则
-
mds map 记录元数据服务器mds状态和信息
-
-
所有集群节点都向mon节点汇报信息,分享他们状态中的任何变化
-
mon需要配置奇数个上
-
客户端进行读写的时候,首先连接MON,获取最新的集群信息
3、mgr
-
一个web界面,显示集群信息
-
通过web管理集群
-
通过cephadm模块 管理ceph ,cephadm shell 进入一个shell管理ceph集群(不推荐使用)
-
dashboard默认是主备模式进行部署,监听在8443端口上
4、MDS(可选组件)
-
元数据服务器,不存储数据,存储文件的元数据
-
使用cephfs的时候,需要安装mds
- 元数据和数据分离,客户端先通过这个MDS找到文件的地址,然后直接去找OSD读写数据
5、RGW(rados gateway)
-
提供对象存储接口,实现对象存储的
-
这是一个 HTTP 网关,它提供了与 Amazon S3 或 OpenStack Swift 兼容的 RESTful API
-
它将 HTTP 请求(如上传文件)转换为对底层 RADOS 集群(OSD)的操作。当你使用 AWS SDK 调用 S3 接口上传文件到 Ceph 时,实际上就是 RGW 在处理这个请求
-
使得 Ceph 可以作为对象存储被 Web 应用、备份软件等直接使用
7、crush
-
数据分布和复制算法
-
这不是一个单独的进程,而是一种算法
-
职责:它决定了数据该放在哪里。当你有数据要存储时,不需要一个中心化的索引表来查询数据位置,CRUSH 算法通过计算(基于设备权重、故障域等规则)就能直接计算出数据应该写在哪个 OSD 上,以及从哪个 OSD 读数据
-
这种算法避免了传统存储系统中的元数据查询瓶颈,实现了真正的去中心化和高扩展性
8、pools(存储池)
-
逻辑存储池,用于数据组织
-
Pool 是 Ceph 中的一个逻辑分区,用于管理不同类型的存储策略
-
每个 Pool 可以设置自己的 PG 数量(Placement Group)、副本数(如 2 副本或 3 副本)、或者纠删码策略
9、RBD (RADOS Block Device)
-
提供块存储服务
-
它将 Ceph 集群的存储空间划分成一个个的“块设备”(类似于虚拟硬盘)
-
最常见的应用是作为 OpenStack 的后端存储,或者作为 Kubernetes 的持久化存储(PV)。虚拟机(如 KVM)可以直接将 RBD 设备作为系统盘或数据盘挂载,享受快照、克隆、动态扩容等功能
10、CephFS (Ceph File System)
-
提供分布式文件系统
-
它利用了 MDS 管理元数据,将文件数据切碎后通过 CRUSH 算法分布到各个 OSD 上
-
适用于需要共享目录的多个 Linux 客户端场景,例如传统的文件服务器、HPC(高性能计算)场景,或者需要共享存储的容器化应用
ceph访问流程
1、正常写入
-
客户端访问集群中的mon,会得到集群的cluster map(mon,mgr,osd,mds等map信息),这个表包含了存储池的数量等信息
-
客户端会根据哈希算法使用对象id和存储池的名称算出对象所在的PG
-
客户端根据找到的PG,使用池的放置算法(CRUSH算法)得出了PG映射的一组OSD
-
客户端通过PG-map,得出一组OSD中的主OSD节点,第一个OSD是主OSD
-
客户端向主OSD发起IO请求,完成对象的读写,操作(客户端直接与OSD进行通信)
-
如果是通过文件系统访问,客户端会先经过 MDS 查找文件的元数据。
-
管理员通过 Dashboard 监控整个流程的健康状态。
2、异常写入
-
客户端访问的monitor的时候,得到了一个cluster map,然后得到了主osd发生了异常的变化,然后选举了一个备OSD变成了临时的主OSD(monitor选举出来的主OSD),然后进行写入即可,同步其他备节点
-
主OSD恢复了,然后这个临时的主OSD进行全量拷贝到主OSD或者是增量(新数据同步到主OSD),然后临时的主OSD变成了备OSD
-
下一次客户端IO与旧的OSD通信(临时的主OSD)
存储池
1、什么是存储池
-
存储池被称为ceph的逻辑分区,先要存储到池子里面去,然后存储到OSD里面去
-
一套ceph可以有多个存储池,每个存储池存储一个或者多个对象,不同存储池中的对象是互相隔离的
-
池子之间是隔离的
存储池的作用
-
一个池子有一个或者多个hash bucket,每个hash桶可以存储一个或者多个对象,每个桶对应映射的OSD有存储池的规则决定(该规则被称为桶的放置规则),将hash桶称为归置组,简称PG(placement group)
-
也就是说存储池中有多个PG(归置组)
-
一个PG对应一个或者多个OSD,对应的OSD数量有存储池的规则和类型决定
-
一个对象只能在一个PG上,一个PG只能在一个存储池中
-
PG映射的OSD是有CRUSH算法决定PG最后存储在哪一个OSD上,这个crush算法被称为放置规则
-
PG
-
在存储池中
-
PG映射一组OSD,
-
是由Crush算法决定的(CRUSH的存储池放置规则),对象映射到PG,是由hash算法决定的,并且是由(crush存储池放置规则中的哈希算法决定的)
存储池和PG和OSD关系图

数据怎么存储进去的
-
客户端会对文件进行切片(默认一个切片大小为4M),因此文件达到ceph的时候就已经是对象(也就是片),就会得到一个oid
-
对象产生后会根据对象存储池中的放置规则中设置哈希算法,进行计算得出存储在池中哪一个PG上面,也就是PGID
-
PG根据池的放置规则(crush算法),来得到PG映射的一组OSD,根据PG-map找到这一组OSD中的主OSD
-
客户端向主OSD发送起IO请求,完成对对象的写入
-
主OSD在对象写入之后,将其同步到其他的从OSD,完成一次IO请求

浙公网安备 33010602011771号