Ceph学习记录2-整体架构

参考:ceph源码分析(常涛)


1. 对象存储的IO接口相对简单,其IO访问模型都是顺序IO访问。

2.RadosGW基于librados提供了AmazonS3接口以及OpenStackSwift接口兼容的对象存储接口。S3接口分三级存储:Account/Bucket/Object(账户/桶/对象)。Swift也分三级存储:Account/Container/Object(账户/容器/对象).

3. rados是ceph存储系统的基石,是一个可扩展,稳定的,自我管理的,自我修复的对象存储系统,是ceph存储系统的核心。

4. rados提供的核心功能包括:通过crush算法实现对象的寻址过程。完成对象的读写以及其他数据功能。提供数据均衡功能。通过Peering完成一个pg内存的数据达成一致性的过程。提供数据自动恢复的功能。提供快照和克隆的功能。实现对象分层存储的功能。实现了数据一致性检查工具scrub.

5.monitor集群通过paxos算法实现自己数据的一致性。

6.cluster map保存了系统的全局信息,包括monitor map,osd map,mds map.

7.monitor map包括集群的fsid,所有monitor的地址和端口,current epoch.

8.一个rados对象一般默认4M大小,分为三个部分组成:对象标志(id),对象的数据,对象的元数据。

9.leveldb等本地kv存储系统用来保存对象的元数据,rados之所增加这种方式,是因为本地文件系统的扩展属性能保存的数据量限制。

10. pool固定了数据冗余的类型以及对应的副本分布策略,目前有两种pool,replicated类型和Erasure Code类型。

扫描二维码关注公众号,回复: 3742902 查看本文章

11. 一个pg里的对象具有相同的放置测略:对象的副本都分布在相同的osd列表上。

10.一个对象对应一个pg,一个pg可以对应多个对象,一个pg对应多个osd,一个pg的副本分布在对应的osd列表中,一个osd上可以分布多个pg.

11.对象寻址过程分为两步:对象到pg的映射和pg到osd列表的映射。

12. 对象到pg的映射。是个静态hash的过程,加入pg split后实际上变成了动态hash的过程。

pgid = hash (object_id) % pg_num

13. pg到osd的映射,采用伪随机算法crush,通过pgid计算出一个osd列表,该列表中,第一个是主osd,其余是从osd.

14.数据读写过程:client向该pg所在的主osd发送请求,主osd接到请求后,同时向两个从osd发送写副本的请求,并同时写入主osd的本地存储中。主osd接收到两个从osd发送写成功的ack应答,同时确认自己写成功,就向客户端返回写成功的ack应答。在写过过程中,主osd必须等待所有的从osd返回正确应答,才能向客户端返回写操作成功的应答。

15.ceph数据迁移的基本对象是pg.当新加入一个osd时,会改变系统的crush map,从而引起对象寻址的第二步,pg到osd的映射发生变化,从而引起数据迁移。最终达到数据平衡。

16.peering:当osd启动时,或者某个osd失效时,该osd上的主pg会发起一个peering过程。该过程是指一个pg内的所有副本通过pg日志来达成数据一致的过程。当peering完成后,该pg就可以对外提供读写服务了。此时pg的某些对象可能处于数据不一致的状态,其被标记出来,需要恢复。在写操作的过程中,遇到不一致的数据对象需要恢复的话,则需要等待,系统优先恢复该对象后,才能继续完成写操作。

17.recovery过程是根据在peeing过程中产生的,依据pg日志推算出的不一致对象列表来修复其他副本上数据。

18.backfill是当某个osd长时间失效后重新加入集群,但已经无法根据pg日志来修复,就需要执行backfill(回填)。该过程是通过逐一对比两个pg的对象列表来恢复。当新加入一个osd产生了数据迁移,也需要通过backfill过程来完成。

19.snapshot就是一个存储设备在某一时刻的全部只读镜像,clone则是在某一时刻的全部可写镜像。两者的区别在于快照只能读,而克隆可写。

20.rados对象存储系统本身支持copy-on-write方式的快照机制。基于这个机制,ceph可以实现两种类型的快照,一种是pool级别的快照,给整个pool中的所有对象统一做快照操作。另一种是用户自己定义的快摘哦实现,这需要客户端配合实现一些快照机制。rbd快照实现就属于后者。

21.rbd克隆实现也是基于在rbd的快照基础上,在客户端librbd上实现了copy-on-write的克隆机制。

22.rados实现了以pool为基础的自动分层存储机制。在第一层设置cache pool,其为高速存储设备,例如ssd。第二层是data pool,使用大容量低速存储设备,例如hdd,可以使用EC模式来降低存储空间。通过cache tier,可以提高关键数据或者热点数据的性能,同时降低存储开销。

23.scrub机制用于系统检查数据的一致性。通过在后台定期(默认每天一次)扫描,比较一个pg内的对象分别在其他osd上的各个副本的元数据和数据来检查是否一致。根据扫描内容分为两种,第一种是只比较对象各个副本的元数据,代价比较小,扫描比较高效,对系统影响比较小。另一种是deep scrub,需要进一步比较副本的数据内容检查数据是否一致。

猜你喜欢

转载自blog.csdn.net/qq_20283969/article/details/82049269
今日推荐