文章目录
- 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 整体架构图
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中的所有对象都具有相同的放置策略:
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
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等
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