Ceph分布式存储系统介绍

时间:2021-05-09 12:45:39

1. Ceph存储系统概述

Ceph 独一无二地用统一的系统提供了对象、块、和文件存储功能,它可靠性高、管理简便、并且是*软件。 Ceph 的强大足以改变贵公司的 IT 基础架构、和管理海量数据。 Ceph 可提供极大的伸缩性——供成千用户访问 PB 乃至 EB 级的数据。 Ceph 节点以普通硬件和智能守护进程作为支撑点, Ceph 存储集群组织起了大量节点,它们之间靠相互通讯来复制数据、并动态地重分布数据。

如图为应用场景示意图,其核心是RADOS,也即高可用、自动化的分布式对象存储,该模块负责对OSD的自动化运行,保证整个存储系统的可用性。同时,该模块通过一个名为librados的公共库对外提供存储服务,块存储和对象存储都依赖该动态库。

同时,Ceph本身封装了对象存储的接口和块存储的接口。对象存储的接口包括对象网关和对象存储访问库等。块存储接口包括块存储访问动态库、Python绑定库和内核态的虚拟块设备。

Ceph分布式存储系统介绍

Ceph集群的物理部署逻辑示意图如下所示,通常Ceph集群由很多OSD组成,OSD部署在不同的服务器上。同时又有若干个Monitor节点(MON),MON之间相互监控,同时又对OSD的状态进行监控。
客户端通过网络建立与Ceph集群的关联,也即访问关系。客户端通过Mon节点获知集群的状态,其中包含OSD节点的分布情况等内容。

Ceph分布式存储系统介绍

2. Ceph存储系统的组件

Ceph集群的核心组件是OSD和MON,其中OSD用于数据的具体存储操作,MON用于一些“映射图”,通过该“映射图”客户端可以计算出数据的存放位置,并将数据直接发送给相应的OSD处理。由于OSD和MON之间存在监控关系,并且通过相应的策略进行相关调度,保证自动故障处理和负载均衡等,因此将OSD、MON以及这些策略统称为RADOS。

为了便于对RADOS的管理和使用,在RADOS之上实现了一套动态库(librados),动态库通常位于客户端,通过网络与RADOS交互命令和数据。

Ceph天生就是对象存储,rados本身提供了一套以对象方式存储和访问Ceph集群数据的接口。而Ceph又同时提供了块存储和文件系统存储的功能,该功能基于Ceph的对象存储实现。

2.1 OSD

OSD的全称是Object Storage Device,OSD通常是一个物理的存储设备(例如磁盘),也可以是逻辑的存储设备(例如磁盘上的某个文件夹)。当然,这里的存储设备不限于服务器上的本地硬盘,也可以是通过iSCSI协议或者FC协议映射的LUN。
有时候提及的OSD实际上是OSD守护进程,视语境而定。

2.2 OSD守护进程

OSD守护进程是OSD的软件实现,OSD守护进程用来对OSD进行管理(数据读写等),客户端数据交互的对象是OSD守护进程。

2.3 MON

MON是Ceph集群的监控软件,一个守护进程,其中包含若干“映射图”信息。客户端向Ceph集群写数据前通常要向MON请求,获取最新的“映射图”,并通过其计算出数据的存放位置。

2.4 librados

librados是一个动态库程序,其提供了客户端访问Ceph集群的原生态统一接口。其它接口或者命令行工具都基于该动态库实现。
在librados中实现了Crush算法和网络通信等公共功能,数据请求操作在librados计算完成后可以直接与对应的OSD交互进行数据传输。该动态可提供的常用接口如下:
1) 创建集群接口
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集群访问的即可都可以在此找到,本文不再赘述。

2.5 命令工具

为了便于Ceph集群管理,其提供了很多命令行工具,包括ceph、rados和rbd等等,这些命令行工具都直接或间接基于librados实现,这里不再赘述,后续会详细介绍。