3种分布式文件系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一部分CEPH
1.1 特点
Ceph最大的特点是分布式的元数据服务器通过CRUSH,一种拟算法来分配文件的locaiton,其核心是 RADOS(resilient automatic distributed object storage),一个对象集群存储,本身提供对象的高可用,错误检测和修复功能。
1.2 组成
CEPH文件系统有三个主要模块:
a)Client:每个Client实例向主机或进程提供一组类似于POSIX的接口。
b)OSD簇:用于存储所有的数据和元数据。
c)元数据服务簇:协调安全性、一致性与耦合性时,管理命名空间(文件名和
目录名)
1.3 架构原理
Client:用户
I/O:输入/输出
MDS:Metadata Cluster Server 元数据簇服务器
OSD:Object Storage Device 对象存储设备
Client通过与OSD的直接通讯实现I/O操作。这一过程有两种操作方式:
1. 直接通过Client实例连接到Client;
2. 通过一个文件系统连接到Client。
当一个进行打开一个文件时,Client向MDS簇发送一个请求。MDS通过文件系统层级结构把文件名翻译成文件节点(inode),并获得节点号、模式(mode)、大小与其他文件元数据。注意文件节点号与文件意义对应。如果文件存在并可以获得操作权,则MDS通过结构体返回节点号、文件长度与其他文件信息。MDS同时赋予Client操作权(如果该Client还没有的话)。目前操作权有四种,分别通过一个bit表示:读(read)、缓冲读(cache read)、写(write)、缓冲写(buffer write)。在未来,操作权会增加安全关键字,用于client向OSD证明它们可以对数据进行读写(目前的策略是全部client 都允许)。之后,包含在文件I/O中的MDS被用于限制管理能力,以保证文件的一致性与语义的合理性。
CEPH产生一组条目来进行文件数据到一系列对象的映射。为了避免任何为文件分配元数据的需要。对象名简单的把文件节点需要与条目号对应起来。对象复制品通过CRUSH(著名的映射函数)分配给OSD。例如,如果一个或多个Client打开同一个文件进行读操作,一个MDS会赋予他们读与缓存文件内容的能力。通过文件节点号、层级与文件大小,Client可以命名或分配所有包含该文件数据的对象,并直接从OSD簇中读取。任何不存在的对象或字节序列被定义为文件洞或0。同样的,如果Client打开文件进行写操作。它获得使用缓冲写的能力。任何位置上的数据都被写到合适的OSD上的合适的对象中。Client 关闭文件时,会自动放弃这种能力,并向MDS提供新的文件大小(写入时的最大偏移)。它重新定义了那些存在的并包含文件数据的对象的集合。
CEPH的设计思想有一些创新点主要有以下两个方面:
第一,数据的定位是通过CRUSH算法来实现的。
传统的,或者通常的并行文件系统,数据的定位的信息是保存在文件的metadata 中的,也就是inode结构中,通过到metadata server上去获取数据分布的信息。而在Ceph中,是通过CRUSH 这个算法来提供数据定位的。
第二,元数据服务器可以提供集群metadata server 服务。
只要当我们了解了其结构后,感觉并没有太大的特点。元数据服务器一般就用来存储文件和目录的信息,提供统一的命名服务。在Ceph中,元数据的inode , dentry,以及日志都是在对象存储集群RADOS中存储,这就使得metadata的持久化都是在远程的RADOS中完成,metadata server 不保存状态,只是缓存最近的inode 和 dentry项,当metadata server 失效后,其所所有信息都可以从RADOS中获取,可以比较容易恢复。
CEPH最核心的,就是RADOS就是RADOS(resilient automatic distributed object storage). 其resilient 指的是可以轻松扩展,automatic 指的是其对象存储集群可以处理failover, failure recovery。RADOS 对象集群其对外提供了一个高可用的,可扩展的,对象集群,从客户端的角度看,就是一个统一命名空间的对象存储。
1.4 使用方式
(一)Ceph 的Monitor
用来监控集群中所有节点的状态信息,完成类似配置服务的功能。在Ceph 里,配置主要就是cluster map ,其保存集群所有节点信息,并和所有的节点保持心跳,来监控所有的节点状态。
其通过Paxos算法实现实现自身的高可用,也就是说,这个Ceph Monitor 是不会有单点问题的。目前流行的zookeeper 的功能,以及实现都类似。(二)对象存储
Ceph文件系统中的数据和元数据都保存在对象中。对于对象存储,通常的定义是:一个Object,由三部分组成(id,metadata,data),id是对象的标识,这个不必多说。所谓的metadata,就是key/value的键值存储,至于用来保存什么信息,由文件系统的语义定义。data就是实际存储的数据。
Ceph的对象,包括四个部分(id,metadata,attribute,data),在Ceph里,一个Object,实际就对应本地文件系统的一个文件,一个对象的attribute,也是key/value的键值对,其保存在本地文件系统的文件的扩展属性中。对象的metadata就是key/value的键值对,目前Ceph保存在google开
源的一个key/value存储系统leveldb中,或者自己写的一个key/value 存储
系统中。数据就保存在对象的文件中。对于一个对象的更新,都需要写日志中
来保持一个Object数据的一致性(consistence),日志有一个单独的设备或
者文件来保存。
(三)副本存储
一个PG(placement group)由一个OSD列表组成,OSD的个数,就是对象的副本数,一个三副本的PG就是一个主,两个副本的OSD列表组成。
一个PG和OSD列表的映射关系,是通过CRUSH算法计算的,知道PG的id,和当前的cluster map,就可以通过CRUSH算法,计算出OSD列表。特别强调
的是,一个PG是逻辑层概念,也就是说,一个OSD,可能同时是一个或者多个PG的主,同时是另一个PG的从。一个OSD处于多个PG组中。一个PG就是复
制和修复的基本单位。每个OSD本地保存其所在的PG列表就可以了,其它OSD
可以通过输入当前的该OSD保存的cluster map 和 PG 的id ,通过CRUSH计
算得出。
(四)Ceph的容错处理
对于Ceph文件系统,错误分两类:一类是磁盘错误或者数据损坏( disk error or corruptted data),这类错误OSD会自己报告和处理。(self report );第二类是OSD失去网络连接导致该OSD不可达(unreachable on the network)这种情况下需要主动检测(active monitor),在同一个PG组
中的其它OSD会发心跳信息互相检测。这种检测的一个优化的方法就是,当replication复制操作时,就可以顺带检测,不用发单独的消息来检测,只有
一段时间没有replication 操作时,才发ping消息里检测。
OSD的失效状态有两种:一种是down状态,这种状态下,被认为是临时错误。在这种情况下,如果是primay,其任务由下一个replicate接手。如果
该OSD没有迅速恢复(quickly recovery),那么就被标记为out状态,在这
种状态下,将有新的osd加入这个PG中。
如何标记一个OSD 从down状态标记为out状态?由于网络分区的问题,
需要通过 Ceph Monitor 来裁定。
(五)Ceph 的写流程
客户端先写主副本,然后同步到两个从副本。主副本等待从副本的ack
消息和apply消息。当主副本收到ack消息,说明写操作已经写在内存中完成,收到apply 消息,说明已经apply到磁盘上了。