Ceph 独一无二地用统一的系统提供了对象、块、和文件存储功能,它可靠性高、管理简便、并且是自由软件。 Ceph 的强大足以改变贵公司的 IT 基础架构、和管理海量数据。 Ceph 可提供极大的伸缩性——供成千用户访问 PB 乃至 EB 级的数据。 Ceph 节点以普通硬件和智能守护进程作为支撑点, Ceph 存储集群组织起了大量节点,它们之间靠相互通讯来复制数据、并动态地重分布数据。
如图为应用场景示意图,其核心是RADOS,也即高可用、自动化的分布式对象存储,该模块负责对OSD的自动化运行,保证整个存储系统的可用性。同时,该模块通过一个名为librados的公共库对外提供存储服务,块存储和对象存储都依赖该动态库。同时,Ceph本身封装了对象存储的接口和块存储的接口。对象存储的接口包括对象网关和对象存储访问库等。块存储接口包括块存储访问动态库、Python绑定库和内核态的虚拟块设备。
Ceph集群的物理部署逻辑示意图如下所示,通常Ceph集群由很多OSD组成,OSD部署在不同的服务器上。同时又有若干个Monitor节点(MON),MON之间相互监控,同时又对OSD的状态进行监控。
客户端通过网络建立与Ceph集群的关联,也即访问关系。客户端通过Mon节点获知集群的状态,其中包含OSD节点的分布情况等内容。
Ceph集群的核心组件是OSD和MON,其中OSD用于数据的具体存储操作,MON用于一些“映射图”,通过该“映射图”客户端可以计算出数据的存放位置,并将数据直接发送给相应的OSD处理。由于OSD和MON之间存在监控关系,并且通过相应的策略进行相关调度,保证自动故障处理和负载均衡等,因此将OSD、MON以及这些策略统称为RADOS。
为了便于对RADOS的管理和使用,在RADOS之上实现了一套动态库(librados),动态库通常位于客户端,通过网络与RADOS交互命令和数据。
Ceph天生就是对象存储,rados本身提供了一套以对象方式存储和访问Ceph集群数据的接口。而Ceph又同时提供了块存储和文件系统存储的功能,该功能基于Ceph的对象存储实现。extern "C" int rados_create(rados_t *pcluster, const char * const id)
2) 连接集群接口
extern "C" int rados_connect(rados_t cluster)
3) 关联存储池接口
extern "C" int rados_ioctx_create(rados_t cluster, const char *name, rados_ioctx_t *io)
4) 数据读写接口
extern "C" int rados_aio_read(rados_ioctx_t io, const char *o,
rados_completion_t completion,
char *buf, size_t len, uint64_t off)
对于Ceph集群访问的即可都可以在此找到,本文不再赘述。