1、ceph基础

发布时间 2024-01-08 22:22:53作者: _幸会
源自:https://blog.csdn.net/x74188/article/details/133842761
https://blog.51cto.com/u_15127572/4193632
http://wed.xjx100.cn/news/249974.html?action=onClick

1、分布式存储

分布式存储数据特性:
数据分为数据和元数据。元数据即使文件的属性信息,在分布式存储中当客户端或者应用程序产生的客户端数据被写入到分布式存储系统的时候,会有一个服务namenode提供文件元数据的路由功能,即告诉应用程序去哪个服务器去请求文件内容,然后再有datanode提供数据的读写请求及数据的高可用功能。
 
块存储:需要格式化,将文件直接保存到磁盘上。
文件存储:提供数据存储的接口,是山操作系统针对块存储的应用,即由操作系统提供存储接口,应用程序通过调用操作系统将文件保存到块存储进行持久化。
对象存储:也称为基于对象的存储,其中的文件被拆分成多个部分并散布在多个存储服务器。在对象存储中,数据会被分解为称为“对象”的离散单元,并保存在单个存储库中,而不是作为文件夹中的文件或服务器上的块来保存,对象存储需要个简单的HTP应用编程接口(API).以供大多数客户端(各种语言)使用。

2、ceph

ceph介绍

Ceph是一个基于分布式存储的开源存储系统,它提供了对象存储、块存储和文件存储三种存储方式,具有高可靠性、高可扩展性和高性能等优点。
Ceph是一个对象式存储系统,它把每一个待管理的数据流(如文件等数据)切分为一到多个固定大小(默认4兆)的对象数据(Object),并以其为原子单元(原子是构成元素的最小单元)完成数据的读写。
1)RADOS 基础存储系统(Reliab1e,Autonomic,Distributed object store即可靠的、自动化的、分布式的对象存储) RADOS是Ceph最底层的功能模块,是一个无限可扩容的对象存储服务,能将文件拆解成无数个对象(碎片)存放在硬盘中,大大提高了数据的稳定性。它主要由OSD和Monitor两个组件组成,OSD和Monitor都可以部署在多台服务器中,这就是ceph分布式的由来,高扩展性的由来。
2)LIBRADOS 基础库
Librados提供了与RADOS进行交互的方式,并向上层应用提供Ceph服务的API接口,因此上层的RBD、RGW和CephFS都是通过Librados访问的,目前提供PHP、Ruby、Java、Python、Go、C和C++支持,以便直接基于RADOS(而不是整个Ceph)进行客户端应用开发。 

ceph的核心组件

一个ceph集群的组成部分:若干个ceph osd(对象存储守护进程)、至少需要一个ceph Monitor监视器(1,3,5...),两个或以上的ceph管理器managers,运行ceph文件系统客户端,还需要高可用的ceph Metadata server(文件系统元数据服务器)
1)Ceph OSD(Object Storage Daemon)
Ceph OSD是Ceph集群中最重要的组件之一,它负责存储对象数据和元数据,并提供数据的复制、恢复和平衡等功能。每个Ceph OSD都维护了一份数据副本,并通过心跳机制和其它OSD进行通信,实现数据的复制和数据的恢复。Ceph OSD为Ceph集群提供了高度的可靠性和性能,可以容忍单个节点的故障。
2)Ceph Monitor
Ceph Monitor是一个提供监控和管理功能的组件,它负责维护集群状态、管理PG(Placement Group)和OSD映射关系、处理客户端的请求等。在Ceph集群中至少需要有三个Monitor节点,以保证集群的高可用性。Ceph Monitor通过与其他组件的协作,实现了Ceph集群的高度可扩展性和高可用性。
3)Ceph Managers
Ceph Manager守护程序(ceph-mgr)负责追踪运行时指标和ceph集群的当前状态,包括存储利用率、当前性能指标和系统负载。Ceph Manager守护程序还托管基于Python的模块来管理和公开ceph集群信息,包括基于web的ceph仪表盘和REST API,高可用性通常至少需要两个管理器。
4) Ceph MDS(Metadata Server)
Ceph MDS是Ceph文件系统的核心组件,负责存储文件系统的元数据,包括目录、文件和权限等信息,并提供文件系统的访问控制和文件锁定等功能。Ceph MDS通过与Ceph OSD和Ceph Monitor的协作,实现文件系统的高可用性和高性能。Ceph文件系统的设计理念是将元数据与数据分离,以提高系统的可靠性和性能。ceph块设备和ceph对象存储不使用MDS。
5)Ceph RGW(RADOS Gateway)
Ceph RGW是Ceph对象存储的RESTful接口组件,它允许应用程序通过RESTful协议来访问Ceph集群中的对象存储服务。Ceph RGW提供了S3和Swift两种API接口,并支持多租户、SSL加密、访问控制等功能。Ceph RGW的出现,使得应用程序可以通过标准的HTTP协议来访问Ceph对象存储,降低了应用程序与Ceph之间的耦合度。
6)Ceph RBD(RADOS Block Device)
Ceph RBD是Ceph集群中提供块存储的组件,它提供了基于镜像的块设备服务,并支持快照、克隆和复制等功能。Ceph RBD可以通过RBD驱动程序挂载到客户端上,实现块设备的访问和管理。Ceph RBD的设计理念是将块设备服务与对象存储服务相结合,以提高存储系统的可扩展性和性能。
PG(Placement Group 归置组):PG 是一个虚拟的概念而已,物理上不真实存在。
它在数据寻址时类似于数据库中的索引:Ceph 先将每个对象数据通过HASH算法固定映射到一个 PG 中,然后将 PG 通过 CRUSH 算法映射到 OSD。

ceph的存储文件过程

第一步:计算文件到对象的映射
计算文件到对象的映射。假如file为客户端要读写的文件,得到oid(object id)=ino+ono
   ino:inode number(ino),Fle 的元数据序列号,file的唯一id。
   ono:object numbar (ono)、Filo 切分产产生的某个object 的序列号,默认以4M切分一个大小。
弟二步:通过 hash 算法计算出object对应的 pool 中的PG:通过一效性HASH计算object -> PG映射hash(oid)&mask->pgid
第三步:通过 CRUSH把对象映射到PG中的OSD:通过CAUSH算法计算PG到OSD,PG->OSD映射:CRUSH(pgid ->(osd1,osd2,osd3))
第四步:PG中主OSD将对象写入到硬盘
第五步:主OSD将数据同步给备份OSD,并等到备份OSD返回确认。
第六步:主OSD将写入完成返回给客户端。

ceph的元数据保存方式

Ceph对象数据的元数据信息以key-value的形式存在。在RADOS中有两种实现:xattrs 和omap。ceph 可选后端支持多种存储引擎,比如 filestore,bluestore, kvstore, memstore, ceph使用bluestore存储对象数据的元数据信息。
1)BlueStore直接管理存储设备,即直接使用原始块设备或分区管理磁盘上的数据。这样就避免了抽象层的介入(例如本地文件系统,如XFS),因为抽象层会限制性能或增加复杂性。
2)BlueStore使用RocksDB进行元数据管理。RocksDB的键/值数据库是嵌入式的,以便管理内部元数据,包括将对象名称映射到磁盘上的块位置。
3)写入BlueStore的所有数据和元数据都受一个或多个校验和的保护。未经验证,不会从磁盘读取或返回给用户任何数据或元数据。