「Ceph」- 概述数据写入过程

  CREATED BY JENKINSBOT

为了去中心化,Ceph 使用了 CRUSH 算法。使用 CRUSH 后,Client 根据需要来计算它的数据要被写到哪里,以及从哪里读取它所需要的数据。然后 Client 与 Ceph OSD Daemon 直接通信。所有这些计算操作都是在 Client 完成的,因此它们不会影响 Ceph 集群服务器端的性能;

Ceph OSD Daemon 负责创建对象,以及在其他 Ceph 节点上创建这些对象的副本来保证数据的安全性和高可用性。Ceph 还使用 MON Cluster 来保证系统的高可用性;

Client <=> Ceph MON

1)Client 访问 Ceph MON 来获取 Cluster Map 的一份副本,以使知晓 Ceph Cluster 的状态和配置;

inside Client

2)然后,Client 将数据转化为一个或者多个对象,每个对象都具有 Name 和 Pool name;

3)接着,该对象会被以 PG 的数目为基数做哈希,在指定的 Ceph Pool 中生成最终的 PG;

4)这个计算出的 PG 再通过 CRUSH 查询来确定存放或者获取数据的 Primary OSD、Secondary OSD、Tertiary OSD 的位置;

Client <=> Ceph OSD

5)一旦 Client 获得了精确的 OSD ID,将会直接和这些 OSD 通信并存放数据;

inside OSD

在内部中,任何写入,Ceph 首先是日志,然后是后备存储,

在提交数据到后备存储器之前,Ceph 首先将数据写入称为一个单独的存储区,该区域被称为 journal ,这是缓冲器分区在相同或单独磁盘作为 OSD ,一个单独的 SSD 磁盘或分区,甚至一个文件文件系统。在 Journal 中的数据,将周期同步到后端存储。jouranl 具有默认大小,但 journal 空间越大越好。Ceph 使用 journal 综合考虑了存储速度和数据的一致性。 journal 允许 Ceph OSD 功能很快做小的写操作;一个随机写入首先写入在上一个连续类型的 journal ,然后刷新到文件系统。这给了文件系统足够的时间来合并写入磁盘。

使用 SSD 存储 Journal 能获得相对较好的性能,有效缓冲突发负载。在这种情况下,所有的客户端写操作都写入到 SSD 日志,然后刷新到磁盘。