文章目录

  • 1. Ceph架构说明
  • 1.1 整体架构图
  • 1.2 接口类型
  • 1.2.1 RBD
  • 1.2.2 CephFS
  • 1.2.3 RadosGW
  • 1.3 RADOS
  • 2. RADOS概念介绍
  • 2.1 Monitor
  • 2.2 RADOS对象存储
  • 2.3 pool和PG
  • 2.4 对象寻址过程
  • 2.5 对象读写
  • 2.6 数据均衡
  • 2.7 Peering
  • 2.8 Recovery&Backfill
  • 2.9 纠删码
  • 2.10 快照和克隆
  • 2.11 Cache Tier
  • 2.12 scrub
  • 3. 参考资料


1. Ceph架构说明

1.1 整体架构图

ceph的硬件架构 ceph架构图_数据

1.2 接口类型

1.2.1 RBD

rados block device,主要面向云平台的虚拟机提供虚拟磁盘,类似于SAN。RBD提供两种接口,一种是通过QEMU Driver提供KVM虚拟机使用,另一种是在操作系统内核态实现了一个内核模块,直接把块设备映射给物理主机,由物理主机直接使用。

1.2.2 CephFS

提供libcephfs和标准的POSIX接口,CephFS类似传统的NAS存储,通过NFS或者CIFS提供文件系统或者文件目录服务。

1.2.3 RadosGW

基于Librados实现了S3(AWS)和Swift(OpenStack)对象存储接口。相比于NAS存储,对象存储放弃了目录树结构,采用扁平化组织形式,有利于使用无限空间的扩展。

1.3 RADOS

RADOS是CEPH存储系统的基石,是一个扩扩展的、稳定的、自我管理的、可修复的对象存储系统,是CEPH存储系统的核心,实现存储系统应该有的所有功能:

  • Monitor模块为整个集群提供全局的配置和系统信息
  • 通过CRUSH算法提供对象的寻址
  • 完成了对象的读写等其他数据功能
  • 提供了数据均衡功能
  • 通过Peering过程完成PG数据一致性过程
  • 提供数据自动恢复的功能
  • 提供克隆和快照功能
  • 实现了对象存储分层存储的功能
  • 实现了数据一致性检查工具scrub

2. RADOS概念介绍

2.1 Monitor

多个Monitor组成集群实现高可用,通过Paxos算法实现了数据一致性,存储了整个集群的节点信息等全局的状态信息,包括:

  • MonitorMap:fsid、Monitor地址和端口、current epoch
  • OSD Map:OSD的列表以及状态信息
  • MDS Map:MDS的列表及状态信息

2.2 RADOS对象存储

  • 对象标志:ID
  • 对象的数据:对象本地文件系统的一个文件
  • 对象的元数据:保存在文件对应的扩展属性中,也可以存储在Leveldb中

2.3 pool和PG

Pool是一个抽象的存储池,规定了数据冗余的类型对应的副本分布策略,支持两种副本类型:Replicated、Erasure Code。

PG(Placement Group)放置策略组(也可以称作复制组),他是对象的集合,该PG中的所有对象都具有相同的放置策略:

ceph的硬件架构 ceph架构图_ceph的硬件架构_02

2.4 对象寻址过程

对象寻址过程指的是对象在集群中分布的位置,分为两层:

  • 对象到PG的映射:静态Hash映射,pg_num = hash(object_id)%pg_count
  • PG到OSD的映射:通过CRUSH算法计算,osd[3] = CRUSH(pg)

2.5 对象读写

对象写过程:

  • client向pg所在的主osd发送写请求
  • 主osd接收写请求后,同时向两个从osd发送写请求,同时主OSD写入本地存储中
  • 主osd接收到另外两个从osd的ack后,同时确保自己也写成功,就向用户应答写成功

对象的读过程比较简单:从主osd读取

2.6 数据均衡

均衡时机:当机器中osd数目发生变动,系统中的CRUSH Map发生变化,从而引起对象寻址过程中,PG到OSD的映射发生变化,从而引发数据迁移(迁移的数据量不是很好估算)

迁移单位:CEPH数据迁移的最小单位是PG

ceph的硬件架构 ceph架构图_ceph的硬件架构_03


ceph的硬件架构 ceph架构图_对象存储_04

2.7 Peering

  • 发起时机:当OSD启动(或者失效时),该OSD上的主PG会发起一个Peering的过程
  • 具体工作:一个PG内的所有副本通过PG日志来达成数据一致的过程

Peering完成后就能对外提供服务了,Peering发现对象副本数据不一致,该对象会被标记出来,待后续恢复完成后,恢复后才能响应用户请求。

2.8 Recovery&Backfill

  • 恢复的对象:peering、scrub发现的
  • 恢复的过程:根据pg日志来恢复
  • backfill对象:当OSD长时间失效后,重新加入到集群中,没有办法根据pg日志恢复了。另一种情况是当osd发生了数据迁移,也需要进行backfill
  • backfill过程:通过逐一回填pg中的对象保证数据一致性

2.9 纠删码

CEPH对旧版本对EC功能支持的还不够好,H、L版本关于EC的支持感觉还可以。

2.10 快照和克隆

Rados对象存储系统本身支持Copy-On-Write的快照机制,具体支持两种模式:

  • 支持pool级别的快照
  • 支持用户自己定义的快照实现(比如:rbd的快照)

2.11 Cache Tier

Cache Tier是Ceph服务端缓存的一种方案,可以提升存储在后端存储层的I/O性能。

Rados实现了以Pool为基础的自动分层存储机制:cache pool + data pool,Cache tier对用户是透明的,Rados Objecter决定往哪里存储对象,Cache tier支持writeback和readonly两种模式:

  • writeback:用户读写操作都会发往Cache tier,适用于易变的数据
  • readonly:Cache tier只是作为读的缓存,脏对象会按照既定策略清理,适用于不变的数据,比如:图片、视频、DNS、X-RAY等

ceph的硬件架构 ceph架构图_rados_05

2.12 scrub

scrub用于做rados集群的数据一致性检查,支持两种检查方式:

  • scrub:检查一个PG内对象的各个osd副本的元数据是否一致
  • deep scrub:比较对象的副本数据是否一致

3. 参考资料

  • Ceph源码分析:https://yuedu.163.com/source/cda64592f9a746559e528c40ec3ceb1b_4
  • Cache Tier配置说明:https://yq.aliyun.com/articles/606731