您好,欢迎访问三七文档
第一部分CEPH1.1特点Ceph最大的特点是分布式的元数据服务器通过CRUSH,一种拟算法来分配文件的locaiton,其核心是RADOS(resilientautomaticdistributedobjectstorage),一个对象集群存储,本身提供对象的高可用,错误检测和修复功能。1.2组成CEPH文件系统有三个主要模块:a)Client:每个Client实例向主机或进程提供一组类似于POSIX的接口。b)OSD簇:用于存储所有的数据和元数据。c)元数据服务簇:协调安全性、一致性与耦合性时,管理命名空间(文件名和目录名)1.3架构原理Client:用户I/O:输入/输出MDS:MetadataClusterServer元数据簇服务器OSD:ObjectStorageDevice对象存储设备Client通过与OSD的直接通讯实现I/O操作。这一过程有两种操作方式:1.直接通过Client实例连接到Client;2.通过一个文件系统连接到Client。当一个进行打开一个文件时,Client向MDS簇发送一个请求。MDS通过文件系统层级结构把文件名翻译成文件节点(inode),并获得节点号、模式(mode)、大小与其他文件元数据。注意文件节点号与文件意义对应。如果文件存在并可以获得操作权,则MDS通过结构体返回节点号、文件长度与其他文件信息。MDS同时赋予Client操作权(如果该Client还没有的话)。目前操作权有四种,分别通过一个bit表示:读(read)、缓冲读(cacheread)、写(write)、缓冲写(bufferwrite)。在未来,操作权会增加安全关键字,用于client向OSD证明它们可以对数据进行读写(目前的策略是全部client都允许)。之后,包含在文件I/O中的MDS被用于限制管理能力,以保证文件的一致性与语义的合理性。CEPH产生一组条目来进行文件数据到一系列对象的映射。为了避免任何为文件分配元数据的需要。对象名简单的把文件节点需要与条目号对应起来。对象复制品通过CRUSH(著名的映射函数)分配给OSD。例如,如果一个或多个Client打开同一个文件进行读操作,一个MDS会赋予他们读与缓存文件内容的能力。通过文件节点号、层级与文件大小,Client可以命名或分配所有包含该文件数据的对象,并直接从OSD簇中读取。任何不存在的对象或字节序列被定义为文件洞或0。同样的,如果Client打开文件进行写操作。它获得使用缓冲写的能力。任何位置上的数据都被写到合适的OSD上的合适的对象中。Client关闭文件时,会自动放弃这种能力,并向MDS提供新的文件大小(写入时的最大偏移)。它重新定义了那些存在的并包含文件数据的对象的集合。CEPH的设计思想有一些创新点主要有以下两个方面:第一,数据的定位是通过CRUSH算法来实现的。传统的,或者通常的并行文件系统,数据的定位的信息是保存在文件的metadata中的,也就是inode结构中,通过到metadataserver上去获取数据分布的信息。而在Ceph中,是通过CRUSH这个算法来提供数据定位的。第二,元数据服务器可以提供集群metadataserver服务。只要当我们了解了其结构后,感觉并没有太大的特点。元数据服务器一般就用来存储文件和目录的信息,提供统一的命名服务。在Ceph中,元数据的inode,dentry,以及日志都是在对象存储集群RADOS中存储,这就使得metadata的持久化都是在远程的RADOS中完成,metadataserver不保存状态,只是缓存最近的inode和dentry项,当metadataserver失效后,其所所有信息都可以从RADOS中获取,可以比较容易恢复。CEPH最核心的,就是RADOS就是RADOS(resilientautomaticdistributedobjectstorage).其resilient指的是可以轻松扩展,automatic指的是其对象存储集群可以处理failover,failurerecovery。RADOS对象集群其对外提供了一个高可用的,可扩展的,对象集群,从客户端的角度看,就是一个统一命名空间的对象存储。1.4使用方式(一)Ceph的Monitor用来监控集群中所有节点的状态信息,完成类似配置服务的功能。在Ceph里,配置主要就是clustermap,其保存集群所有节点信息,并和所有的节点保持心跳,来监控所有的节点状态。其通过Paxos算法实现实现自身的高可用,也就是说,这个CephMonitor是不会有单点问题的。目前流行的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(placementgroup)由一个OSD列表组成,OSD的个数,就是对象的副本数,一个三副本的PG就是一个主,两个副本的OSD列表组成。一个PG和OSD列表的映射关系,是通过CRUSH算法计算的,知道PG的id,和当前的clustermap,就可以通过CRUSH算法,计算出OSD列表。特别强调的是,一个PG是逻辑层概念,也就是说,一个OSD,可能同时是一个或者多个PG的主,同时是另一个PG的从。一个OSD处于多个PG组中。一个PG就是复制和修复的基本单位。每个OSD本地保存其所在的PG列表就可以了,其它OSD可以通过输入当前的该OSD保存的clustermap和PG的id,通过CRUSH计算得出。(四)Ceph的容错处理对于Ceph文件系统,错误分两类:一类是磁盘错误或者数据损坏(diskerrororcorruptteddata),这类错误OSD会自己报告和处理。(selfreport);第二类是OSD失去网络连接导致该OSD不可达(unreachableonthenetwork)这种情况下需要主动检测(activemonitor),在同一个PG组中的其它OSD会发心跳信息互相检测。这种检测的一个优化的方法就是,当replication复制操作时,就可以顺带检测,不用发单独的消息来检测,只有一段时间没有replication操作时,才发ping消息里检测。OSD的失效状态有两种:一种是down状态,这种状态下,被认为是临时错误。在这种情况下,如果是primay,其任务由下一个replicate接手。如果该OSD没有迅速恢复(quicklyrecovery),那么就被标记为out状态,在这种状态下,将有新的osd加入这个PG中。如何标记一个OSD从down状态标记为out状态?由于网络分区的问题,需要通过CephMonitor来裁定。(五)Ceph的写流程客户端先写主副本,然后同步到两个从副本。主副本等待从副本的ack消息和apply消息。当主副本收到ack消息,说明写操作已经写在内存中完成,收到apply消息,说明已经apply到磁盘上了。如果在写的过程中,主副本失效,按顺序下一个从副本接管主副本的工作,这个时候是否返回给客户端写正确?在这种情况下,客户端只是判断正常工作的(acting)的OSD的返回结果,只要所有正常工作的OSD返回即认为成功,虽然这时候可能只有两副本成功。同时该临时primay必须保存所有操作的recovey队列里,如果原primay恢复,可以replay所有recovery队列里的操作,如果主副本从down到out状态,也即是永久失效,临时primay转正,由临时primay为正式primay,只是需要加入一个新的OSD到该PG中。如果是从副本失效,就比较简单。临时失效,主replay所有写操作,如过永久失效,新加入一个OSD到PG中就可以了。(六)恢复当有OSD失效,恢复或者增加一个新的OSD时,导致OSDclustermap的变换。Ceph处理以上三种情况的策略是一致的。为了恢复,ceph保存了两类数据,一个是每个OSD的一个version,另一个是PG修改的log,这个log包括PG修改的object的名称和version。当一个OSD接收到clustermap的更新时:1)检查该OSD的所属的PG,对每个PG,通过CRUSH算法,计算出主副本的三个OSD2)如何该PG里的OSD发生了改变,这时候,所有的replicate向主副本发送log,也就是每个对象最后的version,当primay决定了最后各个对象的正确的状态,并同步到所有副本上。3)每个OSD独立的决定,是从其它副本中恢复丢失或者过时的(missingoroutdated)对象。(如何恢复?好像是整个对象全部拷贝,或者基于整个对象拷贝,但是用了一些类似于rsync的算法?目前还不清楚)4)当OSD在恢复过程中,delay所有的请求,直到恢复成功。第二部分GlusterFSGlusterFS是Scale-Out存储解决方案Gluster的核心,它是一个开源的分布式文件系统,具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处理数千客户端。GlusterFS借助TCP/IP或InfiniBandRDMA网络将物理分布的存储资源聚集在一起,使用单一全局命名空间来管理数据。GlusterFS基于可堆叠的用户空间设计,可为各种不同的数据负载提供优异的性能。GlusterFS支持运行在任何标准IP网络上标准应用程序的标准客户端,用户可以在全局统一的命名空间中使用NFS/CIFS等标准协议来访问应用数据。GlusterFS使得用户可摆脱原有的独立、高成本的封闭存储系统,能够利用普通廉价的存储设备来部署可集中管理、横向扩展、虚拟化的存储池,存储容量可扩展至TB/PB级。2.1特点1)扩展性和高性能GlusterFS利用双重特性来提供几TB至数PB的高扩展存储解决方案。Scale-Out架构允许通过简单地增加资源来提高存储容量和性能,磁盘、计算和I/O资源都可以独立增加,支持10GbE和InfiniBand等高速网络互联。Gluster弹性哈希(ElasticHash)解除了GlusterFS对元数据服务器的需求,消除了单点故障和性能瓶颈,真正实现了并行化数据访问。2)高可用性GlusterFS可以对文件进行自动复制,如镜像或多次复制,从而确保数据总是可以访问,甚至是在硬件故障的情况下也能正常访问。自我修复功能能够把数据恢复到正确的状态,而且修复是以增量的方式在后台执行,几乎不会产生性能负载。GlusterFS没有设计自己的私有数据文件格式,而是采用操作系统中主流标准的磁盘文件系统(如EXT3、ZFS)来存储文件,因此数据可以使用各种标准工具进行复制和访问。3)全局统一命名空间全局统一命名空间将磁盘和内存资源聚集成一个单一的虚拟存储池,对上层用户和应用屏蔽了底层的物理硬件。存储资源可以根据需要在虚拟存储池中进行弹性扩展,比如扩容或收缩。当存储虚拟机映像时,存储的虚拟映像文件没有数量限制,成千虚拟机均通过单一挂载点进行数据共享。虚拟机I/O可在命名空间内的所有服务器上自动进行负载均衡,消除了SAN环境中经常发生的
本文标题:3种分布式文件系统
链接地址:https://www.777doc.com/doc-2921942 .html