Ceph I / O

介绍

Ceph客户端接口从Ceph存储集群读取数据并将数据写入Ceph存储集群。客户端需要以下数据才能与Ceph存储集群进行通信:

  • Ceph配置文件或集群名称(通常为ceph)和监视器地址
  • 泳池名称
  • 用户名和密钥的路径。

Ceph客户端维护对象ID和存储对象的池名称,但是它们不需要维护对象到OSD的索引或与集中式对象索引进行通信以查找数据对象位置。为了存储和检索数据,Ceph客户端访问Ceph监视器并检索存储集群映射的最新副本。然后,Ceph客户端可以提供对象名称和池名称,并且Ceph将使用群集映射和CRUSH(可伸缩哈希下的受控复制)算法来计算对象放置组和用于存储或检索数据的主要Ceph OSD。Ceph客户端连接到主OSD,在此OSD可以执行读取和写入操作。客户端和OSD之间没有中间服务器,代理或总线。

OSD存储数据时,它会从Ceph客户端接收数据-客户端是Ceph块设备,Ceph对象网关还是其他接口-并将数据存储为对象。每个对象对应于文件系统中的一个文件,该文件存储在诸如硬盘之类的存储设备中。Ceph OSD处理存储设备上的读/写操作。

Ceph I / O_第1张图片
image.png

注意:对象ID在整个群集中都是唯一的,而不仅仅是本地文件系统。

Ceph OSD将所有数据作为对象存储在平面名称空间中(例如,没有目录层次结构)。一个对象具有群集范围内的唯一标识符,二进制数据以及由一组名称/值对组成的元数据。语义完全取决于Ceph客户端。例如,Ceph块设备将块设备映像映射到整个集群中存储的一系列对象。

NOTE:一个RBD image对Ceph来说其实只是一连串的object而已[XX]

Ceph I / O_第2张图片
image.png

参考: https://access.redhat.com/documentation/en/red-hat-c​​eph-storage/version-1.3/red-hat-c​​eph-storage-13-red-hat-c​​eph-architecture/

数据条带化

http://docs.ceph.com/docs/hammer/architecture/#data-striping

Ceph 为了增加硬碟的吞吐量(throughput)和效能采用了类似RAID0 的data strip 的方法, 将资料切割后分散到其他硬碟来增加吞吐量, 并且利用复本(replication) 来解决RAID 0 在单一硬碟坏掉时无法将资料回复的问题, 一般解决这个问题是采用RAID 0+1 但是Ceph 在这里可以做到RAID 0 + n (n = replica size)

  • 增加吞吐量 -> RAID 0
  • 提高可靠性 -> n路RAID镜像(n =副本大小)

RAID 0

Ceph I / O_第3张图片
image.png

RAID 0 + 1

Ceph I / O_第4张图片
image.png
Ceph数据条带化

Ceph提供三种类型的客户端:Ceph块设备,Ceph文件系统和Ceph对象存储。Ceph客户端将其数据从其提供给用户的表示形式(块设备映像,RESTful对象,CephFS文件系统目录)转换为对象,以存储在Ceph存储集群中。

Client将资料切成多个object之后透过LIBRADOS进行striping和parallel I/O,这些都是在client端去完成

Ceph 先将资料经过strip 切成好几个连续的strip unit 0 ~ 15, 而这切连续的strip unit 又会组成好几个object (object 0 ~ 3) , 这些object 的集合又称为object set, 对应关系如下图


Ceph I / O_第5张图片
image.png

三个重要变量决定了Ceph如何划分数据:

  • 对象大小:已存储对象的最大对象大小

通常可以设定2MB 或4MB, Ceph 预设是4MB, 因为较大的object size 可以包含更多个strip unit

  • 条带宽度:条带单元的大小

最小为64kb 且stripe width 要能够被object size 整除

  • 数据条数:同时读取/写入的数据条单元数,即数据条中的数据条单元数,即对象集中的对象数

你可能感兴趣的:(Ceph I / O)