深入理解Ceph存储架构
本文是一篇Ceph存储架构技术文章 , 内容深入到每个存储特性 , 文章由Ceph中国社区穆艳学翻译 , 耿航校稿 , 以下是具体内容:
目录第1章 概览第2章 存储集群架构2.1 存储池2.2 身份认证2.3 PG(s)2.4 CRUSH2.5 I/O操作2.5.1 副本I/O2.5.2 纠删码I/O2.6 自管理的内部操作2.6.1 心跳2.6.2 同步2.6.3 数据再平衡与恢复2.6.4 校验(或擦除)2.7 高可用2.7.1 数据副本2.7.2 Mon集群2.7.3 CephX
第3章 客户端架构3.1 本地协议与Librados3.2 对象的监视与通知3.3 独占锁3.4 对象映射索引3.5 数据条带化
第4章 加密第1章 概览Red Hat Ceph是一个分布式的数据对象存储 , 系统设计旨在性能、可靠性和可扩展性上能够提供优秀的存储服务 。 分布式对象存储是存储的未来 , 因为它们适应非结构化数据 , 并且客户端可以同时使用现代及传统的对象接口进行数据存取 。 例如:
- 本地语言绑定接口(C/C++、Java、Python)
- RESTful 接口(S3/Swift)
- 块设备接口
- 文件系统接口
Red Hat Ceph具有非常好的可扩展性——数以千计的客户端可以访问PB级到EB级甚至更多的数据 。
译者注: 数据的规模可以用KB、MB、GB、TB、PB、EB、YB等依次表示 , 比如1TB = 1024GB 。
每一个Ceph部署的核心就是Ceph存储集群 。集群主要是由2类后台守护进程组成:
- Ceph OSD守护进程:Ceph OSD为Ceph客户端存储数据提供支持 。 另外 , Ceph OSD利用Ceph节点的CPU和内存来执行数据复制、数据再平衡、数据恢复、状态监视以及状态上报等功能 。
- Ceph 监视器:Ceph监视器使用存储集群的当前状态维护Ceph存储集群映射关系的一份主副本 。
文章插图
Ceph客户端接口与Ceph存储集群进行数据读写上的交互 。 客户端要与Ceph存储集群通信 , 则需要具备以下条件:
- Ceph配置文件 , 或者集群名称(通常名称为ceph)与监视器地址
- 存储池名称
- 用户名及密钥所在路径
为了能够存储并获取数据 , Ceph客户端首先会访问一台Ceph mon并得到最新的存储集群映射关系 , 然后Ceph客户端可以通过提供的对象名称与存储池名称 , 使用集群映射关系和CRUSH算法(可控的、可扩展的、分布式的副本数据放置算法)来计算出提供对象所在的PG和主Ceph OSD , 最后 , Ceph客户端连接到可执行读写操作的主OSD上进而达到数据的存储与获取 。 客户端和OSD之间没有中间服务器 , 中间件或总线 。
当一个OSD需要存储数据时(无论客户端是Ceph Block设备 , Ceph对象网关或其他接口) , 从客户端接收数据然后将数据存储为对象 。 每一个对象相当于文件系统中存放于如磁盘等存储设备上的一个文件 。
文章插图
注: 一个对象的ID在整个集群中是唯一的 , (全局唯一)而不仅仅是本地文件系统中的唯一 。
Ceph OSD将所有数据作为对象存储在扁平结构的命名空间中(例如 , 没有目录层次结构) 。 对象在集群范围内具有唯一的标识、二进制数据、以及由一组名称/值的键值对组成的元数据 。 而这些语义完全取决于Ceph的客户端 。 例如 , Ceph块设备将块设备镜像映射到集群中存储的一系列对象上 。
文章插图
注: 由唯一ID、数据、名称/值构成键值对的元数据组成的对象可以表示结构化和非结构化数据 , 以及前沿新的数据存储接口或者原始老旧的数据存储接口 。
第2章 存储集群架构为了有效的实现无限可扩展性、高可用性以及服务性能 , Ceph存储集群可以包含大量的Ceph节点 。 每个节点利用商业硬件以及智能的Ceph守护进程实现彼此之间的通信:
- 存储和检索数据
- 数据复制
- 监控并报告集群运行状况(心跳)
- 动态的重新分布数据(回填)
- 确保数据完整性(清理及校验)
- 失败恢复
- 启动|拼多多深入布局母婴产业带 补贴+直播启动“母婴产品溯源”行动
- RFID在冷链物流中的作用-RFID冷链资产管理解决方案
- 《深入理解Java虚拟机》:对象创建、布局和访问全过程
- 都说编程要逻辑好,如何理解这个逻辑
- 成长思维:我大哥对“道法术器”的理解,80%的人不懂
- Linux信号透彻分析理解与各种实例讲解
- 深入理解Netty编解码、粘包拆包、心跳机制
- 从底层理解this是什么
- 《深入理解Java虚拟机》:锁优化
- 不外|一发工资就转走,损失的是银行吗?原来我们都理解错了