ceph学习系列之(一)基础概念

本文深入介绍了Ceph存储系统的架构特点、核心组件及其工作原理,包括高性能、高可用性、高可扩展性的特性,以及块存储、文件存储、对象存储三种存储类型的优缺点和适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Ceph架构简介及使用场景介绍

1.1 Ceph简介

Ceph是一个统一的分布式存储系统,设计初衷是提供较好的性能、可靠性和可扩展性。

Ceph项目最早起源于Sage就读博士期间的工作(最早的成果于2004年发表),并随后贡献给开源社区。在经过了数年的发展之后,目前已得到众多云计算厂商的支持并被广泛应用。RedHat及OpenStack都可与Ceph整合以支持虚拟机镜像的后端存储。

1.2 Ceph特点

高性能
a. 摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,数据分布均衡,并行度高。
b.考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等。
c. 能够支持上千个存储节点的规模,支持TB到PB级的数据。

高可用性
a. 副本数可以灵活控制。
b. 支持故障域分隔,数据强一致性。
c. 多种故障场景自动进行修复自愈。
d. 没有单点故障,自动管理。

高可扩展性
a. 去中心化。
b. 扩展灵活。
c. 随着节点增加而线性增长。

特性丰富
a. 支持三种存储接口:块存储、文件存储、对象存储。
b. 支持自定义接口,支持多种语言驱动。

1.3 Ceph架构

支持三种接口:

Object:有原生的API,而且也兼容Swift和S3的API。
Block:支持精简配置、快照、克隆。
File:Posix接口,支持快照。

在这里插入图片描述
rados

1.4 Ceph核心组件及概念介绍

Monitor
一个Ceph集群需要多个Monitor组成的小集群,它们通过Paxos同步数据,用来保存OSD的元数据。

OSD
OSD全称Object Storage Device,也就是负责响应客户端请求返回具体数据的进程。一个Ceph集群一般都有很多个OSD。

MDS
MDS全称Ceph Metadata Server,是CephFS服务依赖的元数据服务。

Object
Ceph最底层的存储单元是Object对象,每个Object包含元数据和原始数据。

PG
PG全称Placement Grouops,是一个逻辑的概念,一个PG包含多个OSD。引入PG这一层其实是为了更好的分配数据和定位数据。

RADOS
RADOS全称Reliable Autonomic Distributed Object Store,是Ceph集群的精华,用户实现数据分配、Failover等集群操作。

Libradio
Librados是Rados提供库,因为RADOS是协议很难直接访问,因此上层的RBD、RGW和CephFS都是通过librados访问的,目前提供PHP、Ruby、Java、Python、C和C++支持。

CRUSH
CRUSH是Ceph使用的数据分布算法,类似一致性哈希,让数据分配到预期的地方。

RBD
RBD全称RADOS block device,是Ceph对外提供的块设备服务。

RGW
RGW全称RADOS gateway,是Ceph对外提供的对象存储服务,接口与S3和Swift兼容。

CephFS
CephFS全称Ceph File System,是Ceph对外提供的文件系统服务。

1.5 三种存储类型-块存储

典型设备: 磁盘阵列,硬盘
主要是将裸磁盘空间映射给主机使用的。

优点:
通过Raid与LVM等手段,对数据提供了保护。
多块廉价的硬盘组合起来,提高容量。
多块磁盘组合出来的逻辑盘,提升读写效率。

缺点:
采用SAN架构组网时,光纤交换机,造价成本高。
主机之间无法共享数据。

使用场景:
docker容器、虚拟机磁盘存储分配。
日志存储。
文件存储。

1.6 三种存储类型-文件存储

典型设备: FTP、NFS服务器
为了克服块存储文件无法共享的问题,所以有了文件存储。在服务器上架设FTP与NFS服务,就是文件存储。

优点:
造价低,随便一台机器就可以了。
方便文件共享。

缺点:
读写速率低。
传输速率慢。

使用场景:
日志存储。
有目录结构的文件存储。

1.7 三种存储类型-对象存储

典型设备: 内置大容量硬盘的分布式服务器(swift, s3)
多台服务器内置大容量硬盘,安装上对象存储管理软件,对外提供读写访问功能。

优点:
具备块存储的读写高速。
具备文件存储的共享等特性。

使用场景: (适合更新变动较少的数据)
图片存储。
视频存储。

2、Ceph I/O流程及数据分布
在这里插入图片描述
rados_io_1
2.1 正常IO流程图在这里插入图片描述
ceph_io_2

步骤:

  1. client 创建cluster handler。

  2. client 读取配置文件。

  3. client 连接上monitor,获取集群map信息。

  4. client 读写io 根据crshmap 算法请求对应的主osd数据节点。

  5. 主osd数据节点同时写入另外两个副本节点数据。

  6. 等待主节点以及另外两个副本节点写完数据状态。

  7. 主节点及副本节点写入状态都成功后,返回给client,io写入完成。

2.2 新主IO流程图

说明:
如果新加入的OSD1取代了原有的 OSD4成为 Primary OSD, 由于 OSD1 上未创建 PG , 不存在数据,那么 PG 上的 I/O 无法进行,怎样工作的呢?

在这里插入图片描述
ceph_io_3
步骤:

  1. client连接monitor获取集群map信息。

  2. 同时新主osd1由于没有pg数据会主动上报monitor告知让osd2临时接替为主。

  3. 临时主osd2会把数据全量同步给新主osd1。

  4. client IO读写直接连接临时主osd2进行读写。

  5. osd2收到读写io,同时写入另外两副本节点。

  6. 等待osd2以及另外两副本写入成功。

  7. osd2三份数据都写入成功返回给client, 此时client io读写完毕。

  8. 如果osd1数据同步完毕,临时主osd2会交出主角色。

  9. osd1成为主节点,osd2变成副本。

在这里插入图片描述
ceph_io_4

  1. File用户需要读写的文件。File->Object映射:

a. ino (File的元数据,File的唯一id)。
b. ono(File切分产生的某个object的序号,默认以4M切分一个块大小)。
c. oid(object id: ino + ono)。

  1. Object是RADOS需要的对象。Ceph指定一个静态hash函数计算oid的值,将oid映射成一个近似均匀分布的伪随机值,然后和mask按位相与,得到pgid。Object->PG映射:

a. hash(oid) & mask-> pgid 。
b. mask = PG总数m(m为2的整数幂)-1 。

  1. PG(Placement Group),用途是对object的存储进行组织和位置映射, (类似于redis cluster里面的slot的概念) 一个PG里面会有很多object。采用CRUSH算法,将pgid代入其中,然后得到一组OSD。PG->OSD映射:

a. CRUSH(pgid)->(osd1,osd2,osd3) 。

2.4 Ceph IO伪代码流程

locator = object_name
obj_hash =  hash(locator)
pg = obj_hash % num_pg
osds_for_pg = crush(pg)    # returns a list of osdsprimary = osds_for_pg[0]
replicas = osds_for_pg[1:]

详见博客:https://blog.youkuaiyun.com/uxiAD7442KMy1X86DtM3/article/details/81059215

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值