ceph集群架构阐述
首先,ceph集群也是分为客户端和服务端的,是一种高效的分布式存储系统,我们将其拆分为这两个部分来进行分析。
我大致的将服务端分为API类型、逻辑层、OSD层三个层面进行分析;将客户端按三种API类型挂载、接入、管理方式进行说明;
ceph集群的服务端
API类型
- ceph集群对外是支持多种API接口类型的
- 有支持各种编程语言的librados,其中为了方便管理官方将其分为了rgw对象存储和rbd块设备存储
- 还支持高可用的分布式文件系统cephFS
逻辑层
主要决定了数据的存储方式,真正的数据是存储在了对象存储设备OSD上
主要有以下几个概念:
- 存储池(pool):可以有多个存储池,每个存储池都是相互独立的,用于数据的管理与存储。主要有副本池和纠删码池两种类型
- 归置组(PG):存储池中可以有多个PG,PG是用来管理对象的工具
- 对象(object):PG中包含多个对象,是集群中管理数据的最小单位,每个对象都是独立的个体,默认存储大小为4M
对象存储(OSD)层
逻辑层和OSD之间的关系
一个存储池内的PG(每个PG内容是不一样的,因此实现分布式存储),会通过CRUSH算法,决定一个PG到OSD的映射关系,确保相同的PG不会存储在同一个OSD上,从而实现每个PG都是高可用的。而这种映射关系,是通过ceph集群中mon组件来进行维护的。
- 其中:
- 映射关系是可以自定义规则写入指定的OSD的
- 在ceph集群中,一个存储池的默认副本数量为3,所以每个PG会默认存3分在不同的OSD上,因此也建议最少使用3节点集群。
组件说明
ceph集群中一个存储池的PG数量是支持扩容和缩容的,其本质上就是磁盘间的、OSD间的数据迁移,因此肯定是要有专门的组件来维护PG数量的变动
-
**mgr:**每一个OSD都会有一个专门的进程来监控OSD中内所有PG的对象的状态变化,而mgr组件会收集这些信息,使mgr起到监控的作用。
-
**mon:**两个不同的OSD之间的通信,以及外部用户访问都是需要认证的,而mon组件就提供了这个认证功能;另外如上一大节所述,mon组件还用来维护了集群状态的映射。
当我们要使用cephFS文件系统时,就必须要安装mds这个组件
- **mds:**主要负责管理文件系统的元数据
当我们要使用对象存储的时候,就必须要安装rgw这个组件
- **rgw:**主要提供对象存储服务,并通过https或http协议与客户端进行交互。它提供了s3和swift兼容的端口,可以使ceph与各种云平台和应用集成。
ceph集群的客户端
RBD设备
挂载
- 客户端需要安装ceph-common通用包环境,来管理从服务端拷贝过来的集群认证文件(秘钥环文件和配置文件);
- 同时通用包提供了访问ceph集群的所需工具和库,并且支持了认证机制;
- 挂载时要先进行映射,再对设备进行格式化,最后进行挂载。
调整容量大小
- 服务端使用resize调整大小之后,客户端需要进行热更新
- resize2fs用来更新2fs文件系统
- xfs_growfs用来更新xfs文件系统
cephFS
- 基于ceph内核模块挂载
- 管理节点创建用户并导出秘钥环文件或key文件到客户端指定用户
- 客户端可以基于key或者秘钥环文件进行挂载
- 基于用户空间fuse方式挂载
- 客户端需要下载ceph-fuse程序包,并从服务端拷贝认证文件
- 创建挂载目录,使用ceph-fuse进行挂载
RGW对象存储
- 通过s3进行管理
- 通过swift进行管理