![a75eb08676d24b622ffddd661e6be68d.png](https://i-blog.csdnimg.cn/blog_migrate/53b3d7059f244137c6dc0d65c45dcb4b.jpeg)
Ceph是一个一个分布式文件系统,同时支持对象存储、块存储、文件存储。
Ceph分离数据和元数据操作,通过用一个伪随机数据分布函数(CRUSH)替代分布表来最大化的分离数据与元数据管理,支持超过每秒250000次元数据操作。
系统架构图
![eb54c989d1159573de6ec2ad4d3f15eb.png](https://i-blog.csdnimg.cn/blog_migrate/308b68c753c7eb6cdc0d4d5126612013.jpeg)
- Clients: 暴露 near-POSIX 的文件系统接口给主机或进程
- OSD Cluster:存储所有数据和元数据
- Metadata Cluster:管理名空间(文件名和目录),协调安全与一致性
CEPH为了提升可伸缩性,将底层的数据存储等低级块的分配管理完全交给了OSD(对象存储设备),而CEPH专注于元数据和数据的分离及管理。
CEPH考虑到文件系统的元数据管理和读写随着系统的扩展,将成为一个明显的瓶颈,因此实现了一个可扩展的分布式的元数据管理集群,同样适用OSD进行储存并保证可伸缩性,极大提升了元数据访问的性能。
Dynamically Distributed Metadata
![8d66db7fc11a1b2754a5b5c61fbbbfe7.png](https://i-blog.csdnimg.cn/blog_migrate/42f2435d480d7ffe6b4943ed0c15df55.jpeg)
相对于传统文件系统,CEPH存储和处理的元数据非常小,因为不需要存储文件分配表,元数据基本上都是目录项和文件信息组成,同时为了最大化目录访问速度,采用了动态子树分区的方法,每个MDS中使用基于时间衰减的计数器确定目录层级中某一节点的活跃度,并且统计数据从叶向根汇聚。通过定期比较这些计数器,重新分配每个MDS的处理部分,这里的负载迁移作者还额外设计了锁和类似两阶段提交,保证负载迁移时的元数据一致性。对于单个目录的热点,CEPH通过牺牲目录的本地性,按操作文件HASH到不同MDS上
Distributed Object Storage
![812aa59c0b7dc0b8f71940892f1560f2.png](https://i-blog.csdnimg.cn/blog_migrate/3c0d7615989e1616128dd25a9c71794f.jpeg)
首先通过简单哈希算法映射对象到配置组(PGs),通过一个自适应的位掩码控制PG数量,选择一个值设定来平衡每个OSD的利用率。
然后PGs通过CRUSH算法分配到所有OSD,这个算法是一个伪随机数据分布算法, 能够有效的有序映射每个PG到多个OSD, 这个OSD组会存储对象副本。
这样有两个重要的优点:
- 第一:完全分布式,任何部分(客户端, OSD或者MDS)都能独立计算object的位置。
- 第二:Mapping 的更新会很少,几乎能够消除分布式元数据的交换
因为这些, CRUSH能够同时解决数据应该存在哪的问题和已存数据在哪的问题,通过设计,存储集群的一些小变化对已存在的PG mapping影响很小,使的因设备故障或者集群扩展导致的数据迁移也很少。
数据复制
![9f9fb689b50f85c7ebcdc564598c4a05.png](https://i-blog.csdnimg.cn/blog_migrate/1fab508eb12ceb65ee63a10e1d45f1a9.jpeg)
Map 到 n 个OSD上(称为n-way副本),客户端完成所有的写到主OSD上的对象PG中(主host),这些对象和PG被分配新的版本号,然后写到副本OSD上,当每个复制都完成并响应给主节点,主节点完成更新,客户端写完成。
故障检测
RADOS让存储相同PG的OSD互相监控,备份之间相互通路则可确认彼此是可用的, 这种方法没有额外的通信开销,如个一个OSD最近没有收到一个同伴的消息,一个对这个同伴的ping操作会被发出。