Ceph架构

  • RADOS Cluster(MON、OSD、MGR等组成)
  • 基于RADOS Cluster封装了RADOSGW、RBD,CephFs,在最终存储数据的时候都划分为对象
  • 应用程序也可以直接调用 librados 完成自己的逻辑

Ceph组件

Monitor

OSD

Manager

对象网关 RGW

文件元数据服务 MDS

数据读写流程

Ceph的读/写操作采用Primary-Replica模型,客户端只向Object所对应OSD set的Primary OSD发起读/写请求,这保证了数据的强一致性。
当Primary OSD收到Object的写请求时,它负责把数据发送给其他副本,只有这个数据被保存在所有的OSD上时,Primary OSD才应答Object的写请求,这保证了副本的一致性。

写数据

  • 寻址:File->Object(条带化),Object->PG(Hash(oid) & mask -> PGID),PG->OSD(CRUSH,算法输出是目标OSD集合,一般是3个)
  • 客户端直接和Primary OSD进行通信,进行数据写入
  • Primary OSD收到请求后,分别向Secondary OSD和Tertiary OSD发起写入操作
  • 当Secondary OSD和Tertiary OSD各自完成写入操作后,将分别向Primary OSD发送确认信息
  • 当Primary OSD确认其他两个OSD的写入完成后,则自己也完成数据写入,并向客户端确认Object写入操作完成

读数据

  • 客户端只需完成同样的寻址过程,并直接和Primary OSD联系。在目前的Ceph设计中,被读取的数据默认由Primary OSD提供,但也可以设置允许从其他OSD中获取,以分散读取压力从而提高性能。