分布式存储文件系统

分布式文件系统设计主要关注几个方面:

设计特点、分布式能力、性能、容灾、维护和扩展、成本

分布式文件系统主要关键技术:

全局名字空间、缓存一致性、安全性、可用性、可扩展性

其他关键技术:

文件系统的快照和备份技术、热点文件处理技术、元数据集群的负载平衡技术、分布式文件系统的日志技术

分布式文件系统:

Ceph,GlusterFS,Sheepdog,Lustre,Swift,Cinder,TFS,HDFS,MooseFS,FastDFS,MogileFS等

开源协议说明:

GPL:不允许修改后和衍生的代码做为闭源的商业软件发布和销售,修改后该软件产品必须也采用GPL协议;
GPL V2:修改文本的整体就必须按照GPL流通,不仅该修改文本的源码必须向社会公开,而且对于这种修改文本的流通不准许附加修改者自己作出的限制;
GPL V3:要求用户公布修改的源代码,还要求公布相关硬件;
LGPL:更宽松的GPL

Ceph与GlusterFS对比

Ceph:多个MDS,不存在单点故障和瓶颈。MDS可以扩展,不存在瓶颈;支持FUSE(用户空间文件系统);采用的POSIX访问接口;文件被分片,每个数据块是一个对象。对象保存在不同的服务器上;冗余保护多副本;由数据的多副本提供可靠性;节点失效时,自动迁移数据,重新复制副本;可增加元数据服务器和存储节点。容量可扩展,文件操作性能可扩展,元数据操作性能可扩展;适合大,中,小文件;FS不适合生产环境

GlusterFS:无MDS,不存在单点故障。不需要元数据,无硬盘I/O瓶颈;支持FUSE(用户空间文件系统);采用的POSIX访问接口;Cluster Translators(GlusterFS集群存储的核心)包括AFR,DHT和Stripe三种类型,AFR相当于RAID1,每个文件都会被复制到多个存储节点上,Stripe相当于RAID0,文件被切分,数据被条带化到各个存储节点上,Translator可以组合,即ARF和stripe组成;冗余保护镜像;有镜像提供可靠性;节点,硬盘,磁盘,网络发生故障时,系统会自动处理这些故障,不需要管理员介入;容量可扩展,只支持大文件,无元数据服务器,堆栈式架构(基本功能模块可以进行堆栈式组合,实现强大功能)。具有线性横向扩展能力。由于没有元数据服务器,增加了客户端的负载,占用相当的CPU和内存

共同点:
纵向扩展和横向扩展:在云环境中,必须可以很容易地向服务器添加更多存储空间以及扩展可用存储池。Ceph和GlusterFS都可以通过将新存储设备集成到现有存储产品中,满足扩充性能和容量的要求。

高可用性:GlusterFS和Ceph的复制是同时将数据写入不同的存储节点。这样做的结果是,访问时间增加,数据可用性也提高。在Ceph中,默认情况下将数据复制到三个不同的节点,以此确保备份始终可用性。

商品化硬件:GlusterFS和Ceph是在Linux操作系统之上开发的。因此,对硬件唯一的要求是这些产品具有能够运行Linux的硬件。任何商品化硬件都可以运行Linux操作系统,结果是使用这些技术的公司可以大大减少在硬件上的投资——如果他们这样做的话。然而,实际上,许多公司正在投资专门用于运行GlusterFS或Ceph的硬件,因为更快的硬件可以更快地访问存储。

差异:
GlusterFS是来自Linux世界的文件系统,并且遵守所有Portable Operating System Interface标准。尽管你可以将GlusterFS轻松集成到面向Linux的环境中,但在Windows环境中集成GlusterFS很难。

Ceph是一种全新的存储方法,对应于Swift对象存储。在对象存储中,应用程序不会写入文件系统,而是使用存储中的直接API访问写入存储。因此,应用程序能够绕过操作系统的功能和限制。如果已经开发了一个应用程序来写入Ceph存储,那么使用哪个操作系统无关紧要。结果表明Ceph存储在Windows环境中像在Linux环境中一样容易集成。

基于API的存储访问并不是应用程序可以访问Ceph的唯一方式。为了最佳的集成,还有一个Ceph块设备,它可以在Linux环境中用作常规块设备,使你可以像访问常规Linux硬盘一样来使用Ceph。Ceph还有CephFS,它是针对Linux环境编写的Ceph文件系统。

速度对比:
GlusterFS存储算法更快,并且由于GlusterFS以砖组织存储的方式实现了更多的分层,这在某些场景下(尤其是使用非优化Ceph)可能导致更快的速度。另一方面,Ceph提供了足够的定制功能来使其与GlusterFS一样快。

应用:
Ceph访问存储的不同方法使其成为更流行的技术。更多的公司正在考虑Ceph技术而不是GlusterFS,而且GlusterFS仍然与Red Hat密切相关。例如,SUSE还没有GlusterFS的商业实施,而Ceph已经被开源社区广泛采用,市场上有各种不同的产品。在某种意义上来说,Ceph确实已经胜过GlusterFS。

Ceph
开发语言:C++
开源协议:LGPL

Ceph是一个可以按对象/块/文件方式存储的开源分布式文件系统,该系统具备高可用性,高性能及可扩展等特点。支持OSD方式存储。
1.对象存储(RADOSGW):通常意义的键值存储,接口是GET,PUT,DEL和其他扩展,代表主要有Swift,S3以及Gluster等。
2.块存储(RDB):接口通常以QEMU Driver 或者 Kernel Module的方式存在,接口需要实现linux的Block Device的接口或者 QEMU 提供的 Block Driver 接口,如 Sheepdog,AWS 的 EBS,青云的云硬盘和阿里云的盘古系统,还有 Ceph 的 RBD(RBD是Ceph面向块存储的接口)。在常见的存储中 DAS、SAN 提供的也是块存储;
3.文件存储(CephFS):支持POSIX接口,跟传统的文件系统EXT4是一个类型,区别在于分布式存储提供了并行化的能力,如Ceph的CephFS(CephFS是Ceph面向文件存储的接口),GlusterFS,HDFS这种非POSIX接口的类文件存储也归入此类。NFS,NAS也是属于文件系统存储。

Ceph组件:
Monitor, 负责监视整个集群的运行状况,信息由维护集群成员的守护程序来提供,各节点之间的状态、集群配置信息。Ceph monitor map主要包括OSD map、PG map、MDS map 和 CRUSH 等,这些 map 被统称为集群 Map。ceph monitor 不存储任何数据。下面分别开始介绍这些map的功能:

    Monitor map:包括有关monitor 节点端到端的信息,其中包括 Ceph 集群ID,监控主机名和IP以及端口。并且存储当前版本信息以及最新更改信息,通过 "ceph mon dump" 查看 monitor map。
    OSD map:包括一些常用的信息,如集群ID、创建OSD map的 版本信息和最后修改信息,以及pool相关信息,主要包括pool 名字、pool的ID、类型,副本数目以及PGP等,还包括数量、状态、权重、最新的清洁间隔和OSD主机信息。通过命令 "ceph osd dump" 查看。
    PG map:包括当前PG版本、时间戳、最新的OSD Map的版本信息、空间使用比例,以及接近占满比例信息,同事,也包括每个PG ID、对象数目、状态、OSD 的状态以及深度清理的详细信息。通过命令 "ceph pg dump" 可以查看相关状态。
    CRUSH map: CRUSH map 包括集群存储设备信息,故障域层次结构和存储数据时定义失败域规则信息。通过 命令 "ceph osd crush map" 查看。
    MDS map:MDS Map 包括存储当前 MDS map 的版本信息、创建当前的Map的信息、修改时间、数据和元数据POOL ID、集群MDS数目和MDS状态,可通过"ceph mds dump"查看。

OSD,Ceph OSD 是由物理磁盘驱动器、在其之上的 Linux 文件系统以及 Ceph OSD 服务组成。Ceph OSD 将数据以对象的形式存储到集群中的每个节点的物理磁盘上,完成存储数据的工作绝大多数是由 OSD daemon 进程实现。在构建 Ceph OSD的时候,建议采用SSD 磁盘以及xfs文件系统来格式化分区。BTRFS 虽然有较好的性能,但是目前不建议使用到生产中,目前建议还是处于围观状态。

Ceph 元数据,MDS。ceph 块设备和RDB并不需要MDS,MDS只为 CephFS服务。

RADOS,Reliable Autonomic Distributed Object Store。RADOS是ceph存储集群的基础。在ceph中,所有数据都以对象的形式存储,并且无论什么数据类型,RADOS对象存储都将负责保存这些对象。RADOS层可以确保数据始终保持一致。

librados,librados库,为应用程度提供访问接口。同时也为块存储、对象存储、文件系统提供原生的接口。

ADOS块设备,它能够自动精简配置并可调整大小,而且将数据分散存储在多个OSD上。
RADOSGW,网关接口,提供对象存储服务。它使用librgw和librados来实现允许应用程序与Ceph对象存储建立连接。并且提供S3 和 Swift 兼容的RESTful API接口。
CephFS,Ceph文件系统,与POSIX兼容的文件系统,基于librados封装原生接口。

CRUSH,Controlled Replication Under Scalable Hashing,它表示数据存储的分布式选择算法, ceph 的高性能/高可用就是采用这种算法实现。CRUSH 算法取代了在元数据表中为每个客户端请求进行查找,它通过计算系统中数据应该被写入或读出的位置。CRUSH能够感知基础架构,能够理解基础设施各个部件之间的关系。并且CRUSH保存数据的多个副本,这样即使一个故障域的几个组件都出现故障,数据依然可用。CRUSH 算是使得 ceph 实现了自我管理和自我修复。

特性
1)Ceph底层存储是基于RADOS(可靠的、自动的分布式对象存储),它提供了LIBRADOS/RADOSGW/RBD/CEPH FS方式访问底层的存储系统,如下图所示
2)通过FUSE,Ceph支持类似的POSIX访问方式;Ceph分布式系统中最关键的MDS节点是可以部署多台,无单点故障的问题,且处理性能大大提升
3)Ceph通过使用CRUSH算法动态完成文件inode number到object number的转换,从而避免再存储文件metadata信息,增强系统的灵活性

优点
1)支持对象存储(OSD)集群,通过CRUSH算法,完成文件动态定位, 处理效率更高
2)支持通过FUSE方式挂载,降低客户端的开发成本,通用性高
3)支持分布式的MDS/MON,无单点故障
4)强大的容错处理和自愈能力
5)支持在线扩容和冗余备份,增强系统的可靠性

RADOS 分布式存储相较于传统分布式存储的优势在于:
  1. 将文件映射到object后,利用Cluster Map 通过CRUSH 计算而不是查找表方式定位文件数据存储到存储设备的具体位置。优化了传统文件到块的映射和Block MAp的管理。
  2. RADOS充分利用OSD的智能特点,将部分任务授权给OSD,最大程度地实现可扩展。

应用场景
1)全网分布式部署的应用
2)对实时性、可靠性要求比较高官方宣传,存储容量可轻松达到PB级别

参考
http://ceph.com/

GlusterFS
开发语言:C
开源协议:GPL V3

GlusterFS是Red Hat旗下的一款开源分布式文件系统,它具备高扩展、高可用及高性能等特性,由于其无元数据服务器的设计,使其真正实现了线性的扩展能力,使存储总容量可 轻松达到PB级别,支持数千客户端并发访问;对跨集群,其强大的Geo-Replication可以实现集群间数据镜像,而且是支持链式复制,这非常适用 于垮集群的应用场景

特性
1)目前GlusterFS支持FUSE方式挂载,可以通过标准的NFS/SMB/CIFS协议像访问本体文件一样访问文件系统,同时其也支持HTTP/FTP/GlusterFS访问,同时最新版本支持接入Amazon的AWS系统
2)GlusterFS系统通过基于SSH的命令行管理界面,可以远程添加、删除存储节点,也可以监控当前存储节点的使用状态
3)GlusterFS支持集群节点中存储虚拟卷的扩容动态扩容;同时在分布式冗余模式下,具备自愈管理功能,在Geo冗余模式下,文件支持断点续传、异步传输及增量传送等特点
Yuyj GlusterFS.png

优点
1)系统支持POSIX(可移植操作系统),支持FUSE挂载通过多种协议访问,通用性比较高
2)支持在线扩容机制,增强系统的可扩展性
3)实现了软RAID,增强系统的 并发处理能力及数据容错恢复能力
4)强大的命令行管理,降低学习、部署成本
5)支持整个集群镜像拷贝,方便根据业务压力,增加集群节点
6)官方资料文档专业化,该文件系统由Red Hat企业级做维护,版本质量有保障

缺点
1)通用性越强,其跨越的层次就越多,影响其IO处理效率
2)频繁读写下,会产生垃圾文件,占用磁盘空间

应用场景
1)多集群部署的应用
2)中大型文件根据目前官方提供的材料,现有的使用GlusterFS系统存储容量可轻松达到PB

术语:

brick:分配到卷上的文件系统块;
client:挂载卷,并对外提供服务;
server:实际文件存储的地方;
subvolume:被转换过的文件系统块;
volume:最终转换后的文件系统卷。

参考
http://www.gluster.org/
http://www.gluster.org/wp-content/uploads/2012/05/Gluster_File_System-3.3.0-Administration_Guide-en-US.pdf
http://blog.csdn.net/liuben/article/details/6284551

TFS
开发语言:C++
开源协议:GPL V2

TFS(Taobao File System)是由淘宝开发的一个分布式文件系统,其内部经过特殊的优化处理,适用于海量的小文件存储,目前已经对外开源;
TFS采用自有的文件系统格式存储,因此需要专用的API接口去访问,目前官方提供的客户端版本有:C++/JAVA/PHP。

特性
1)在TFS文件系统中,NameServer负责管理文件元数据,通过HA机制实现主备热切换,由于所有元数据都是在内存中,其处理效率非常高效,系统架构也非常简单,管理也很方便;
2)TFS的DataServer作为分部署数据存储节点,同时也具备负载均衡和冗余备份的功能,由于采用自有的文件系统,对小文件会采取合并策略,减少数据碎片,从而提升IO性能;
3)TFS将元数据信息(BlockID、FileID)直接映射至文件名中,这一设计大大降低了存储元数据的内存空间;

优点
1)针对小文件量身定做,随机IO性能比较高;
2)支持在线扩容机制,增强系统的可扩展性;
3)实现了软RAID,增强系统的并发处理能力及数据容错恢复能力;
4)支持主备热倒换,提升系统的可用性;
5)支持主从集群部署,其中从集群主要提供读/备功能;

缺点
1)TFS只对小文件做优化,不适合大文件的存储;
2)不支持POSIX通用接口访问,通用性较低;
3)不支持自定义目录结构,及文件权限控制;
4)通过API下载,存在单点的性能瓶颈;
5)官方文档非常少,学习成本高;

应用场景
1)多集群部署的应用
2)存储后基本不做改动
3)海量小型文件
根据目前官方提供的材料,对单个集群节点,存储节点在1000台以内可以良好工作,如存储节点扩大可能会出现NameServer的性能瓶颈,目前淘宝线上部署容量已达到1800TB规模(2009年数据)
安装及使用

安装指导
TFS_配置使用
源代码路径:http://code.taobao.org/p/tfs/src/

参考
http://rdc.taobao.com/blog/cs/?p=128
http://elf8848.iteye.com/blog/1724423
http://baike.baidu.com/view/1030880.htm
http://blog.yunnotes.net/index.php/install_document_for_tfs/

FastDFS
开发语言:C
开源协议:GPL v3

FastDFS是国人开发的一款分布式文件系统,目前社区比较活跃。如上图所示系统中存在三种节点:Client、Tracker、Storage,在底层存储上通过逻辑的分组概念,使得通过在同组内配置多个Storage,从而实现软RAID10,提升并发IO的性能、简单负载均衡及数据的冗余备份;同时通过线性的添加新的逻辑存储组,从容实现存储容量的线性扩容。
文件下载上,除了支持通过API方式,目前还提供了apache和nginx的插件支持,同时也可以不使用对应的插件,直接以Web静态资源方式对外提供下载。
目前FastDFS(V4.x)代码量大概6w多行,内部的网络模型使用比较成熟的libevent三方库,具备高并发的处理能力。

特性
1)在上述介绍中Tracker服务器是整个系统的核心枢纽,其完成了访问调度(负载均衡),监控管理Storage服务器,由此可见Tracker的作用至关重要,也就增加了系统的单点故障,为此FastDFS支持多个备用的Tracker,虽然实际测试发现备用Tracker运行不是非常完美,但还是能保证系统可用。
2)在文件同步上,只有同组的Storage才做同步,由文件所在的源Storage服务器push至其它Storage服务器,目前同步是采用Binlog方式实现,由于目前底层对同步后的文件不做正确性校验,因此这种同步方式仅适用单个集群点的局部内部网络,如果在公网上使用,肯定会出现损坏文件的情况,需要自行添加文件校验机制。
3)支持主从文件,非常适合存在关联关系的图片,在存储方式上,FastDFS在主从文件ID上做取巧,完成了关联关系的存储。

优点
1)系统无需支持POSIX(可移植操作系统),降低了系统的复杂度,处理效率更高
2)支持在线扩容机制,增强系统的可扩展性
3)实现了软RAID,增强系统的并发处理能力及数据容错恢复能力
4)支持主从文件,支持自定义扩展名
5)主备Tracker服务,增强系统的可用性

缺点
1)不支持断点续传,对大文件将是噩梦(FastDFS不适合大文件存储)
2)不支持POSIX通用接口访问,通用性较低
3)对跨公网的文件同步,存在较大延迟,需要应用做相应的容错策略
4)同步机制不支持文件正确性校验,降低了系统的可用性
5)通过API下载,存在单点的性能瓶颈

应用场景
1)单集群部署的应用
2)存储后基本不做改动
3)小中型文件根据
目前官方提供的材料,现有的使用FastDFS系统存储容量已经达到900T,物理机器已经达到100台(50个组)

安装指导_FastDFS
源码路径:https://github.com/happyfish100/fastdfs

参考
https://code.google.com/p/fastdfs/
http://bbs.chinaunix.net/forum-240-1.html
http://portal.ucweb.local/docz/spec/platform/datastore/fastdfs

MooseFS
开发语言:C
开源协议:GPL v3

MooseFS是一个高可用的故障容错分布式文件系统,它支持通过FUSE方式将文件挂载操作,同时其提供的web管理界面非常方便查看当前的文件存储状态。

特性
1)MooseFS文件系统由四部分组成:Managing Server 、Data Server 、Metadata Backup Server 及Client
2)其中所有的元数据都是由Managing Server管理,为了提高整个系统的可用性,Metadata Backup Server记录文件元数据操作日志,用于数据的及时恢复
3)Data Server可以分布式部署,存储的数据是以块的方式分布至各存储节点的,因此提升了系统的整体性能,同时Data Server提供了冗余备份的能力,提升系统的可靠性
4)Client通过FUSE方式挂载,提供了类似POSIX的访问方式,从而降低了Client端的开发难度,增强系统的通用性

元数据服务器(master):负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复

元数据日志服务器(metalogger):负责备份master服务器的变化日志文件,以便于在master server出问题的时候接替其进行工作

数据存储服务器(chunkserver):数据实际存储的地方,由多个物理服务器组成,负责连接管理服务器,听从管理服务器调度,提供存储空间,并为客户提供数据传输;多节点拷贝;在数据存储目录,看不见实际的数据

优点
1)部署安装非常简单,管理方便
2)支持在线扩容机制,增强系统的可扩展性
3)实现了软RAID,增强系统的 并发处理能力及数据容错恢复能力
4)数据恢复比较容易,增强系统的可用性5)有回收站功能,方便业务定制

缺点
1)存在单点性能瓶颈及单点故障
2)MFS Master节点很消耗内存
3)对于小于64KB的文件,存储利用率较低

应用场景
1)单集群部署的应用
2)中、大型文件
参考
http://portal.ucweb.local/docz/spec/platform/datastore/moosefsh
http://www.moosefs.org/
http://sourceforge.net/projects/moosefs/?source=directory
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值