分布式文件系统:
分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。分布式文件系统的设计基于客户机/服务器模式。一个典型的网络可能包括多个供多用户访问的服务器。另外,对等特性允许一些系统扮演客户机和服务器的双重角色。例如,用户可以"发表"一个允许其他客户机访问的目录,一旦被访问,这个目录对客户机来说就像使用本地驱动器一样。(服务器间的数据访问从一对多变为多对多)
(1)原始的文件管理系统图:
一、MooseFS(MFS)文件系统
MFS文件系统结构:
(1)包含4种角色:
管理服务器managing server (master)
元数据日志服务器Metalogger server(Metalogger)
数据存储服务器data servers (chunkservers)
客户机挂载使用client computers
(2)4种角色作用:
管理服务器:负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复.多节点拷贝
元数据日志服务器: 负责备份master服务器的变化日志文件,文件类型为changelog_ml.*.mfs,以便于在master server出问题的时候接替其进行工作
数据存储服务器:负责连接管理服务器,听从管理服务器调度,提供存储空间,并为客户提供数据传输.
客户端: 通过fuse内核接口挂接远程管理服务器上所管理的数据存储服务器,.看起来共享的文件系统和本地unix文件系统使用一样的效果.
1.3、环境搭建和测试用例:
http://bbs.chinaunix.net/thread-1643863-1-1.html
1.4、执行图解:
二、Ceph文件系统:
是加州大学圣克鲁兹分校的Sage weil攻读博士时开发的分布式文件系统。性能高、C++编写的代码,支持Fuse,并且没有单点故障依赖,
Ceph最大的特点是分布式的元数据服务器 通过CRUSH,一种拟算法来分配文件的locaiton,其核心是 RADOS(resilient automatic distributed object storage),一个对象集群存储,本身提供对象的高可用,错误检测和修复功能。
Ceph是统一存储系统,支持三种接口。
Object:有原生的API,而且也兼容Swift和S3的API
Block:支持精简配置、快照、克隆
File:Posix接口,支持快照
Ceph也是分布式存储系统,它的特点是:
高扩展性:使用普通x86服务器,支持10~1000台服务器,支持TB到PB级的扩展。
高可靠性:没有单点故障,多数据副本,自动管理,自动修复。
高性能:数据分布均衡,并行化度高。对于objects storage和block storage,不需要元数据服务器。
1、映射:
Ceph的命名空间是 (Pool, Object),每个Object都会映射到一组OSD中(由这组OSD保存这个Object):
(Pool, Object) → (Pool, PG) → OSD set → Disk
Ceph中Pools的属性有:
Object的副本数
Placement Groups的数量
所使用的CRUSH Ruleset
Client从Monitors中得到CRUSH MAP、OSD MAP、CRUSH Ruleset,然后使用CRUSH算法计算出Object所在的OSD set。所以Ceph不需要Name服务器,Client直接和OSD进行通信。
2、一致性:
(1)Ceph的读写操作采用Primary-Replica模型,Client只向Object所对应OSD set的Primary发起读写请求,这保证了数据的强一致性。
(2)由于每个Object都只有一个Primary OSD,因此对Object的更新都是顺序的,不存在同步问题。
(3)当Primary收到Object的写请求时,它负责把数据发送给其他Replicas,只要这个数据被保存在所有的OSD上时,Primary才应答Object的写请求,这保证了副本的一致性。
3、容错性:
(1)在分布式系统中,Ceph能够容忍网络中断、掉电、服务器宕机、硬盘故障等故障,并进行自动修复,保证数据的可靠性和系统可用性。
(2)Monitors是Ceph管家,维护着Ceph的全局状态。Monitors的功能和zookeeper类似,它们使用Quorum和Paxos算法去建立全局状态的共识。
OSDs可以进行自动修复,而且是并行修复。
4、高性能:
(1)Client和Server直接通信,不需要代理和转发
(2)多个OSD带来的高并发度。objects是分布在所有OSD上。
(3)负载均衡。每个OSD都有权重值(现在以容量为权重)。
(4)client不需要负责副本的复制(由primary负责),这降低了client的网络消耗。
5、高可靠性
(1)数据多副本。可配置的per-pool副本策略和故障域布局,支持强一致性。5
(2)没有单点故障。可以忍受许多种故障场景;防止脑裂;单个组件可以滚动升级并在线替换。
(3)所有故障的检测和自动恢复。恢复不需要人工介入,在恢复期间,可以保持正常的数据访问。
(4)并行恢复。并行的恢复机制极大的降低了数据恢复时间,提高数据的可靠性。
5、高扩展性
(1)高度并行。没有单个中心控制组件。所有负载都能动态的划分到各个服务器上。把更多的功能放到OSD上,让OSD更智能。
(2)自管理。容易扩展、升级、替换。当组件发生故障时,自动进行数据的重新复制。当组件发生变化时(添加/删除),自动进行数据的重分布。
6、缺点:
不稳定,目前还在试验阶段,不适合生产环境的使用。
三、GlusterFS文件系统:
GlusterFS是Scale-Out存储解决方案Gluster的核心,具有强大的横向扩展能力,支持数PB存储容量和处理数千客户端,GlusterFS借助TCP/IP或InfiniBand RDMA网络将物理分布的存储资源聚集在一起,是用单一全局命名空间来管理。GlusterFS基于可堆叠的用户空间设计,可为各种不同的数据负载提供优异的性能。
1、GlusterFS主要特征:
(1)扩展性和高性能
GlusterFS允许通过增加资源来提高存储容量和性能。支持高速网络互联;Gluster弹性哈希(Elastic Hash)解除了GlusterFS对元数据服务器的需求,消除了单点故障和性能瓶颈,真正实现了并行化数据访问。
(2)高可用性:
GlusterFS可以对文件进行自动复制,如镜像或多次复制,从而确保数据总是可以访问,同时具有自我修复功能,即使在硬件故障的情况下。GlusterFS采用操作系统中主流标准的磁盘文件系统(如EXT3、ZFS)来存储文件。
(3)全局统一命名空间:
全局统一命名空间将磁盘和内存资源聚集成一个单一的虚拟存储池,对上层用户和应用屏蔽了底层的物理硬件。存储资源可以根据需要在虚拟存储池中进行弹性扩展。
(4)弹性哈希算法
GlusterFS采用弹性哈希算法在存储池中定位数据,而不是采用集中式或分布式元数据服务器索引,消除了IO瓶颈和单点故障,存储系统可以智能地定位任意数据片,不需要查看索引或其他服务器。
(5)弹性卷管理:
数据储存在逻辑卷中,逻辑卷可以从虚拟化的物理存储池进行独立逻辑划分而得到。存储服务器可以在线进行增加和移除,不会导致应用中断。逻辑卷可以在所有配置服务器中增长和缩减,可以在不同服务器迁移进行容量均衡,或者增加和移除系统,这些操作都可在线进行。文件系统配置更改也可以实时在线进行并应用,从而可以适应工作负载条件变化或在线性能调优。
2、GlusterFS总体设计:
GlusterFS的组成:
(1)存储服务器(Brick Server)
(2)客户端
(3)NFS/Samba存储网关组成。
作用:
(1)存储服务器:
主要提供基本的数据存储功能,最终的文件数据通过统一的调度策略分布在不同的存储服务器上。它们上面运行着Glusterfsd进行,负责处理来自其他组件的数据服务请求
四、淘宝分布式文件系统TFS
TFS(Taobao File System)是一个高可用、高性能、高可扩展的分布式文件系统,基于普通的Linux服务器构建,主要提供海量非结构化数据存储服务。TFS被广泛地的应用在淘宝的各项业务中,目前已部署的最大集群存储文件数已近千亿。 TFS已在TaoCode上开源 (项目主页:http://code.taobao.org/p/tfs/src/),提供给外部用户使用。
TFS集群的组成:
(1)名字服务器(nameserver)
(2)数据服务器(dateserver)
TFS的性质:
(1)TFS以数据块(block)为单位存储和组织数据。
(2)TFS将多个小文件存储在同一个block中,并为block建立索引,便以便快速在block中定位文件。
(3)每个block会存储多个副本到不同的机架上,以保证数据的高可靠性。
(4)每个block在集群中拥有全局唯一的数据块编号(block id),block id由nameserver创建时分配。Block中的文件拥有唯一的文件编号(file id),file id由dateserver在存储文件时分配。
(5)block id和file id组成的二元组唯一标识一个集群里的文件
2、存储机制:
Namserver上的所有元信息都保存在内存,并不进行持久化存储,dataserver启动后,会汇报其拥有的block信息给nameserver,nameserver根据这些信息来构建block到server的映射关系表,根据该映射关系表,为写请求分配可写的block,为读请求查询block的位置信息。Nameserver有专门的后台线程轮询各个block和server的状态,在发现block缺少副本时复制block(通常是由dataserver宕机导致的);在发现dataserver负载不均衡时,迁移数据来保证服务器间的负载均衡。
3、TFS集群:
TFS集群通过多副本机制来保证数据的可靠性,同时支持多机房容灾,具体做法是在多个机房各部署一个TFS物理集群,多个物理集群的数据通过集群间的同步机制来保证数据互为镜像,构成一个大的逻辑集群。
主集群同时提供读写服务,备集群只提供读服务,主集群上存储的所有文件都会由对应的dataserver记录同步日志,日志包含文件的block id和fileid以及文件操作类型(写、删除等),并由dataserver的后台线程重放日志,将日志里的文件操作应用到备集群上,保证主备集群上存储的文件数据保持一致的状态。
5、TFS的缺点:
(1)通用性方面。TFS目前只支持小文件的应用,大文件应用是不支持的。对小图片、网页等几十KB内的数据存储非常适用,但对视频点播VOD、文件下载等应用暂时无法适用。
(2)性能方面。Client写文件是同步处理的,需要等所有dataserver写成功后才能返回,这很是影响性能。
(3)用户接口。TFS没有提供POSIX接口,提供的API也与标准接口不一致。另外,TFS有自己的文件命名规则,如果用户使用自定义的文件名,则需要自已维护文件名与TFS文件名之间的映射关系。
(4)代码方面。使用了C++实现,感觉相对臃肿一点,如果用纯C实现应该会简洁不少(可能我C中毒太深了)。代码注释基本没有,代码质量也不是很好。
MFS、Ceph、GlusterFS、 Lustre、hadoopFS的比较
MSD:虚拟光驱的镜像文件 |
|||||
|
MooseFS(MFS) |
Ceph |
GlusterFS |
LustreFs |
hadoopFS |
Metadata server (元数据服务器) |
单个MDS,存在单点故障和拼劲 |
多个MDS,不存在单点故障和瓶颈。MDS可以扩展,不存在瓶颈。 |
无,不存在单点故障。靠运行在各个节点上的动态算法来代替MDS,不需同步元数据,无硬盘I/O瓶颈。 |
双MDS(互相备份)。MDS不可以扩展,存在瓶颈。 |
有。存在单点故障。 Namenode是一个中心服务器,负责管理文件系统的命名空间以及客户端对文件的访问。集群中的Datanode一般是一个节点一个,负责管理它所在节点上的存储。 |
FUSE(用户空间文件系统、挂载某些网络空间)客户端必须装 |
支持 |
支持 |
支持 |
支持 |
支持 |
访问接口 |
POSIX |
POSIX |
POSIX |
POSIX/MPI |
POSIX |
文件分布/数据分布 |
文件被分片,数据块保存在不同的存储服务器上。 |
文件被分片,每个数据块是一个对象。对象保存在不同的存储服务器上。 |
Gluster Translators(GlusterFS集群核心包),包括AFR、DHT、Stripe三种类型。
(1)AFR相当于RAID1,每个文件都被复制到多个存储节点上。 (2)Stripe相当于RAID0,文件被分片,数据被条带化到各个存储节点上。 (3)Translators可以组合,即AFR和stripe可以组成RAID10,实现高性能和高可用。 |
可以把大文件分片并以类似RAID0的方式分散存储在多个存储节点上。 |
一个典型的数据块大小是64MB。因而,HDFS中的文件总是按照64M被切分成不同的块,每个块尽可能地存储于不同的Datanode中 |
亢余保护/副本 |
多副本 |
多副本 |
镜像 |
无 |
|
数据可靠性 |
由数据的多副本提供可靠性 |
由数据的多副本提供可靠性。 |
由镜像提供可靠性。 |
由存储节点上的RAID1或RAID5/6提供可靠性。假如存储节点失效,则数据不可用。 |
|
备份 |
|
|
|
提供备份工具。支持远程备份 |
|
故障恢复 |
手动恢复 |
当节点失效时,自动迁移数据、重新复制副本。 |
当节点、硬件、磁盘、网络发生故障时,系统会自动处理这些故障,管理员不需介入。 |
无 |
|
扩展性 |
增加存储服务器,可以提高容量和文件操作性能。但是由于不能增加MDS,因此元数据操作性能不能提高,是整个系统的瓶颈。 |
可以增加元数据服务器和存储节点。容量可扩展。文件操作性能可扩展。元数据操作性能可扩展。 |
容量可扩展。 |
可增加存储节点,提高容量可文件操作性能,但是由于不能增加MDS,因此元数据操作性能不能提高,是整个系统的瓶颈。 |
|
安装和部署 |
简单 |
简单 |
简单 |
复杂。而且Lustre严重依赖内核,需要重新编译内核。 |
|
开发语言 |
C |
C++ |
C |
C |
JAVA |
适合场景 |
大量小文件读写 |
小文件 |
适合大文件。 对于小文件,无元数据服务设计解决了元数据的问题。但GlusterFS并没有在I/O方面作优化,在存储服务器底层文件系统上仍然是大量小文件,本地文件系统元数据访问是瓶颈,数据分布和并行性也无法充分发挥作用。因此,GlusterFS的小文件性能还存在很大优化空间 |
大文件读写 |
|
产品级别 |
小型 |
中型 |
中型 |
大型 |
|
应用 |
国内较多 |
无 |
较多用户使用 |
HPC领域 |
|
优缺点 |
(1)实施简单,但是存在单点故障。 (2)不停服务扩容。MFS框架做好后,随时增加服务器扩充容量;扩充和减少容量皆不会影响现有的服务。注:hadoop也实现了这个功能。 (3)高可靠性:数据能被分成几个副本存储在不同的服务器上。 |
不稳定,目前还在实验阶段,不适合于生产环境。 |
无元数据服务器,堆栈式架构(基本功能模块可以进行堆栈式组合,实现强大功能)。具有线性横向扩展能力。
由于没有元数据服务器,因此增加了客户端的负载,占用相当的CPU和内存。 但遍历文件目录时,则实现较为复杂和低效,需要搜索所有的存储节点。因此不建议使用较深的路径。 |
很成熟、很庞大。 |
|
2、LustreFS、HadoopFs、GlusterFS的比较:
|
LustreFS |
HadoopFS |
GlusterFS |
Metadata Server |
有。存在单点故障。
MDS使得用户可以访问到存储在一个或多个MDT上的元数据。每个MDS管理着LustreFS中的文件名和目录,并且为一个或者多个MDT提供网络请求处理。 |
有。存在单点故障。
Namenode是一个中心服务器,负责管理文件系统的命名空间以及客户端对文件的访问。集群中的Datanode一般是一个节点一个,负责管理它所在节点上的存储。 |
无。不存在单点故障。
靠运行在各个节点上的动态算法来代替MDS,不需同步元数据,无硬盘I/O瓶颈。 |
POSIX兼容 |
是 |
不完全。为了实现对文件的流式读取,放宽了对POSIX的要求 |
是 |
用户/组的配额 |
支持 |
支持 |
不详 |
权限控制 |
Access Control List (ACL) |
独立实现的一个和POSIX系统类似的文件和目录的权限模型 |
不详 |
快照 |
Lustre可以创建所有卷的快照,并且在快照系统中把他们集合在一起,以供Lustre挂载。 |
利用快照,可以让HDFS在数据损坏时恢复到过去一个已知正确的时间点。HDFS目前还不支持快照功能,但计划在将来的版本进行支持。 |
不支持 |
网络支持 |
可支持各种网络,如 Infiniband(光纤),TCP/IP, Quadrics Elan, Myrinet (MX and GM) 和 Cray。 |
只支持TCP/IP |
支持很多种网络,如千兆以太网,百兆以太网,Infiniband(光纤)。 |
文件分割 |
采用RAID 0模式,将数据分割到一定数量的对象中去,每个对象包含很多数据块。当一个被写入的数据块超过了这个对象的容量时,下一次写入将被存储到下一个目标中。Lustre可以把文件最多分布到160个目标存储上。 |
一个典型的数据块大小是64MB。因而,HDFS中的文件总是按照64M被切分成不同的块,每个块尽可能地存储于不同的Datanode中。 |
不支持 |
备份及恢复 |
提供两个备份工具,一个用于扫描文件系统,一个用于打包备份和加压恢复。 |
支持数据复制。采取一定的策略,将文件的多个副本存放到不同的节点。在读取副本的时候,系统会自动选择最近的副本。 |
支持数据复制,提供全局的命名空间。多个文件的多个副本可以被放置到不同的host上去。这意味着,host以及所有与其相关的磁盘可以因为任何原因而下线,而由其它弄得host来担任文件的完整副本(例如网络分割,甚至只是系统维护)。读取副本时,系统会选择最近的副本。 |
故障自救 |
Lustre中的MDS可以被配置成一个主动/被动对,而OSS通常被配置成主动/主动对,这样可以提供没有任何开销的冗余。通常,热备的MDS是另一个LustreFS的活跃MDS,所以在集群之中不会出现空闲的设备。 |
心跳信号检测机制。每个Datanode节点周期性地向Namenode发送心跳信号。
Namenode是HDFS集群中的单点故障所在。如果Namenode机器故障,是需要手工干预的。目前,自动重启或在另一台机器上做Namenode故障转移的功能还没实现。 |
当系统中出现永久性损坏的时候(如一台服务器的磁盘发生故障,导致本地文件无法读取),系统会更换主机并将其加入集群,并自动开始恢复过程。Gluster对一些假定的故障(如硬件故障, 磁盘故障,网络被分割,以外断电)都有处理预案,系统会自动处理这些故障,而不需要管理员的参与。 |
技术支持 |
Sun Microsystems |
Apache Hadoop项目组 |
Gluster |
商业应用 |
为全球100大高性能存储计算(High-Performance Computing-HPC)集群中的40%多提供支持。目前已经拥有成千上万的客户端系统,PB级的存储,数百GB/s的I/O吞吐量。由于Lustre的可扩展性,它在石油,燃气,制造业,媒体,金融等行业得到广泛应用。近年来在ISP(Internet Service Provider)方面的应用呈现增长趋势。 |
Hadoop由Doug Cutting在2004年开始开发,2008年开始流行于中国,2009年在中国已经火红,包括中国移动、百度、网易、淘宝、腾讯、金山和华为等众多公司都在研究和使用它,另外还有中科院、暨南大学、浙江大学等众多高校在研究它。 |
世界各地有100多个地区在测试或者使用Guster。大多集中在欧洲和美国地区。亚洲及中国用户较少。 |
动态扩容 |
件数据存在OSS上的对象中。LustreFS的容量以及总的存储带宽可以在不打断任何操作的情况下,通过增加新的带有OST的OSS来实现动态扩展。 |
不详 |
支持动态扩容。可以通过简单的操作动态增加存储,服务器和客户端。 |
扩展能力 |
高扩展性。在产业化环境中,大多数集群的客户端节点在1万到2万左右,最多可以支持到2.6万个客户端节点。目前足以支持40PB的文件系统。 |
在一个集群里可扩展到数百个节点。一个单一的HDFS实例应该能支撑数以千万计的文件。 |
支持线性扩展。可以轻松地扩展到数百PB的量级。 |
安装 |
略微复杂 |
简单 |
简单。在Ubuntu等发行版Linux中有内嵌的软件源的支持。 |
开发语言 |
C |
Java |
C |
I/O特性 |
Lustre在产业化环境中的部署目前可以提供100 GB/s的性能。在试验环境中,可以达到130GB/s以及13000 creates/s的性能。
Lustre单独客户端的节点的吞吐量最大可以达到2 GB/s,而OSS最大可以达到2.5 GB/s。在Oak Ridge National Laboratories,Lustre运行在Spider File System上,达到了240 GB/s的性能。 在千兆以太网中,写的速度保持在100 MB/s左右。 |
|
千兆以太网中,写的速度保持在65 MB/s左右。读的速度保持在117 MB/s左右。但对小文件的写入则只有3 MB/s左右的速度。 |
来源:CSDN
作者:狼-少年
链接:https://blog.csdn.net/u014151362/article/details/50292875