# 体系结构
## 架构概览
Ceph 内部架构如下:
![Ceph 结构概览](https://img.kancloud.cn/e5/c5/e5c5a1e629228722da537d9e6319a8ac_519x720.png)
## 核心组件
**Ceph 核心组件**有:Ceph OSD、Ceph Monitor 和 Ceph MDS。
* **Ceph Monitor:Ceph 监视器。** Ceph Monitor 通过保存一份集群状态映射来维护整个集群的健康状态。它分别为每个组件维护映射信息。包括 OSD map、MON map、PG map 和 CRUSH map。所有集群节点都向 MON 节点汇报状态信息,并分享它们状态中的任何变化。Ceph monitor 不存储数据(这是 OSD 的任务)。
* **Ceph OSD:Ceph 对象存储设备。** 只要应用集群向 Ceph 集群发出写操作,数据就会被以对象形式存储在 OSD 中。这是 Ceph 集群中唯一能存储用户数据的组件,同时用户也发送读命令来读取数据。通常,一个 OSD 守护进程会被捆绑到集群中的一块物理磁盘上。所以,在通常情况下,Ceph 集群中的物理磁盘的总数与在磁盘上运行的存储用户数据的 OSD 守护进程的数量是相同。
* **Ceph MDS:Ceph 元数据服务器**。 MDS 只为 CephFS 文件系统跟踪文件的层次结构和存储元数据。Ceph 块存储与 Ceph 对象存储并不需要元数据,因此也不需要 Ceph MDS 守护进程。MDS 不直接提供数据给客户端,从而消除了系统中的单点故障。
## 基础架构
Ceph 系统自下向上可以分为 4 个层次。
### 最底层:基础存储系统
**RADOS:Reliable, Autonomic, Distributed Object Store,即可靠的、自动化的、分布式的对象存储**。
RADOS 是 Ceph 存储集群的基础。在 Ceph 中,所有数据都以对象形式存储,并且无论是哪种数据类型,RADOS 对象存储都将负责保存这些对象。RADOS 层可以确保数据始终一致,要这道这一点,须执行数据复制、故障检测和恢复,以及数据迁移和所有集群节点实现再平衡。
### 第二层:基础库
**LIBRADOS:librados 库**。
librados 库为 PHP、Ruby、Java、Python、C 和 C++ 这些编程语言提供了直接访问 RADOS 的接口。同时它还为 RBD、RADOSGW 这些组件提供了原生接口。
### 第三层:高层应用接口
**高层应用接口**
* **RBD:RADOS 块设备**。 RBD 基于 LIBRADOS 之上,提供持久块存储,它是自用精简配置并可调整大小的,而且将数据分散在多个 OSD 上。RBD 服务被封装成了基于 librados 的一个原生接口。
* **RADOSGW:RADOS 网关接口**。 RGW 也基于 LIBRADOS 之上, 提供对象存储服务。它使用 librgw(Rados Gateway Library) 和 librados,允许应用程序与 Ceph 对象存储建立连接。RGW 提供了与 Amazon S3 和 OpenStack Swift 兼容的 RESTful API。
* **CephFS:Ceph 文件系统**。 CephFS 基于 RADOS 来实现分布式的文件系统。引入了 MDS,主要为兼容 POSIX 文件系统提供元数据。一般当做文件系统来挂载。
### 最上层:应用层
不同场景下对于 Ceph 各个应用接口的各种应用方式。