CEPH是由多个节点构成的集群,它具有良好的可扩展性和可靠性。节点之间相互通信以达到:
存储和检索数据
数据复制
监控集群的健康状况
保证数据的完整性
检测故障并恢复
基本架构如下图:
分布式对象存储系统RADOS是CEPH最为关键的技术,主要由OSD和Monitor组成。
CEPH是一个完全无中心架构的计算模式的存储系统。client通过设备映射关系计算出其写入数据的位置,这样client可以直接与存储节点通信,从而避免中心节点的性能瓶颈。很厉害的样子,身为写IO,感觉我只需要跟OSD打交道了。
CEPH也是一个拥有雄心壮志的存储系统,同时支持块、文件和对象三类存储。本次client准备将CEPH作为块存储使用。
在发起写IO之前,client做了很多工作。同其他系统类似,想要跟CEPH集群通信,首先需要得到认证。拿到接头暗号之后,就可以创建映像和将映像映射为块存储并使用了。
Client写数据之前已经获取了集群map信息,并将我解体……我被切分成多个object(如果我是大IO), 每个object都有一个唯一的object ID。然后计算寻址每个object的存储位置:object根据Hash被映射到不同的PG,然后又根据CRUSH算法找出存储object的一组OSD的Primary OSD。
接着Client直接和Primary OSD进程通信并发起写入操作。然后由Primary OSD写到Secondary OSD和Tertiary OSD(如果配置为3副本)。等他们都写完之后,再由Primary OSD给主机打个招呼知会一下。
由于我被切分成多个object, 多个object可以并行发到多OSD。等所有object都操作完成之后, 我完成了使命。
以上是一个典型写IO对于写流程的简单描述。