前一段公司由于nfs存储的问题,作了一段时间的调研。最终虽然有nfs高可用方案(nfs+drbd+heartbeat),可是在nfs故障切换的时候会出现 2 分钟左右的延时。这样子。。。就开始了对分布式文件系统的调研选型。也就是这样,有了本系列的博文。html
针对 MooseFS 预计会有 3 篇博文,分为介绍、部署、深刻。本篇博文主要介绍 MooseFS 。前端
1、简述mysql
一、介绍web
MooseFS是一个具有冗余容错功能的分布式网络文件系统,它将数据分别存放在多个物理服务器或单独磁盘或分区上,确保一份数据有多个备份副本。对于访问的客户端或者用户来讲,整个分布式网络文件系统集群看起来就像一个资源同样。从其对文件操做的状况看,MooseFS就至关于一个类UNIX文件系统:算法
一、mfs是一个分层的目录树结构sql
二、存储支持POSIX标准的文件属性(权限,最后访问和修改时间)缓存
三、支持特殊的文件,如:块设备,字符设备,管道和套接字,连接文件(符号连接和硬连接)服务器
四、支持基于IP地址和密码的方式访问文件系统网络
二、特性架构
一、高可靠性,每一份数据能够设置多个副本(多份数据),并能够存储在不一样的主机上
二、高可扩展性,能够很轻松的经过增长主机磁盘容量或增长主机数量来动态扩展整个文件系统的存储量
三、高可容错性,咱们能够经过对mfs进行系统设置,实现当数据文件被删除后的一段时间内,依然存放于主机的回收站中,以备误删恢复数据
四、高数据一致性,即使文件被写入/访问时,咱们依然能够完成对文件的一致性快照
三、优缺点
优势:
一、因为MFS是基于GPL发布的,所以彻底免费,而且开发和社区都很活跃,资料也很是丰富
二、轻量、易部署、易配置、易维护
三、通用文件系统,不须要修改上层应用就可使用(那些须要专门 API 的DFS确实有点麻烦)
四、扩容成本低、支持在线扩容,不影响业务,体系架构可伸缩性极强(官方的case能够扩到70台了!)
五、体系架构高可用,全部组件无单点故障
六、文件对象高可用,可设置任意的文件冗余程度(提供比 Raid 10 更高的冗余级别)
七、提供系统负载,将数据读写分配到全部的服务器上,加速读写性能
八、提供诸多高级特性,好比相似Windows的回收站功能、相似JAVA语言的GC(垃圾回收)、快照功能等
九、MooseFS 是 Google Filesystem 的一个 c 实现
十、自带 Web Gui 的监控接口
十一、提升随机读或写效率和海量小文件的读写效率(有待进一步证实)
缺点:
一、Master Server 自己的性能瓶颈。MFS的主备架构状况相似于MySQL的主从复制,从能够扩展,主却不容易扩展。短时间的对策就是按照业务来作切分。
二、随着MFS体系架构中存储文件的总数上升,Master Server对内存的需求量会不断增大(MFS把文件系统的结构缓存到 Maset Server 的内存中)。根据官方提供的数据,8g对应2500万的文件数,2亿文件就得64GB内存。短时间的对策也是按照业务来作切分。
三、Master server的单点解决方案的健壮性。目前官方自带的是把数据信息从Master Server同步到Metalogger Server上,Master Server一旦出问题Metalogger Server能够恢复升级为Master Server,可是须要恢复时间。目前,也能够经过第三方的高可用方案(heartbeat+drbd+moosefs)来解决 Master Server 的单点问题。
四、Metalogger Server 复制元数据的间隔时间较长(可调整)
四、应用场景
谈及MooseFS的应用场景,其实就是去谈分布式文件系统的应用场景。
一、大规模高并发的数据存储及访问(小文件、大文件),TFS适合小文件(<1M)
二、大规模的数据处理,如日志分析
五、使用现状
针对 MooseFS 在全球的使用状况,我在国内的一篇论文上挖了一张图。图片以下,在该图中标记为驯鹿的就是 Moosefs 的使用者所在区域。从图中能够看出,它在中国、欧洲以及北美都拥有了大量的用户,正是有了普遍的用户基础,才能使得mfs特性可以快速的迭代和进步。
MooseFS官方的使用状况连接:http://www.moosefs.org/who-is-using-moosefs.html
2、组成
一、架构图
整个架构中,主要有四个组件,分别是管理服务器 Master Server、备份服务器Metalogger Server、数据存储服务器 Chunk Server 和 客户端 Client。其中,管理服务器 Master Server 负责全部数据存储服务器的数据存储管理,响应客户端文件的读写请求,收回文件空间以及恢复文件,多存储节点之间的文件复制;元数据日志服务器 Metalogger Server,对 Master Server 服务器的变化日志文件进行备份,changelog_ml.*.mfs 是备份文件的类型,当 Master Server 出现故障时替换其继续工做,避免 Master Server 的单点故障致使分布式文件系统的不能正常运行;数据存储服务器chunkserver,服从 Master Server 的安排,按期向 Master Server 发送本身的状态信息,除此以外,还能向客户提供数据存储空间,可以向客户传输数据;客户端 Client,经过 FUSE 内核接口挂载到数据存储服务器上,在客户端看来使用数据存储服务器上的文件系统和使用本地Unix文件系统是同样的。
下面再针对这4个组件进行更详细的介绍!
二、四个组件
组件名称 | 组件做用 |
管理服务器 Managing Server 简称Master Server |
这个组件的角色是管理整个mfs文件系统的主服务器,除了分发用户请求外,还用来存储整个文件系统中的每一个数据文件的metadata信息,metadata(元数据)信息包括文件(也能够是目录、socket、管道、设备等)的大小、属性、文件位置路径等,以及文件空间的回收和恢复,控制多chunk server节点的数据拷贝。很相似lvs负载均衡主服务器,不一样的是lvs仅仅根据算法分发请求,而master根据内存里的metadata信息来分发请求。这个master只能有一台处于激活工做的状态。 |
元数据备份服务器 Metadata backup servers 简称metalogger Server |
这个组件的做用是备份管理服务器master的变化的metadata信息日志文件,文件类型为changelog_ml.*.mfs,以便于在主服务器出现问题的时候,能够通过简单的操做便可让新主服务器进行工做。这很相似Mysql的主从同步,只不过他不像mysql从库那样在本地应用数据,而只是接收主服务器上文件写入时记录的文件相关的metadata信息。这个backup能够有一台或多台,它很相似于lvs从负载均衡器。 |
数据存储服务器组 Data Servers 简称Chunk Servers |
这个组件就是真正存放数据文件实体的服务器了,这个角色能够有多台不一样的物理服务器或不一样的磁盘及分区来充当,当配置数据的副本多于一份时,剧写入到一个数据服务器后,会根据算法在其余数据服务器上进行同步备份。这个很像lvs集群的rs节点。 |
客户机服务器组 Client |
这个组件就是挂载并使用mfs文件系统的客户端,当读写文件时,客户端首先链接主管理服务器获取数据的metadata信息,而后根据获得的metadata信息,访问数据服务器读取或写入文件实体。mfs客户端经过FUSE mechanism实现挂载MFS文件系统的。所以,只要系统支持FUSE,就能够做为客户端访问MFS整个文件系统。所谓的客户端并非网站用户,而是前端访问文件系统的应用服务器,如web |
3、原理
MooseFS是一个文件系统,所以其最主要的工做就是文件的读写流程,即 MooseFS的主要的两大工做过程。
一、MooseFS的读文件流程:
首先要了解的是它的读过程。以下图所示:
图中 Master Server用三角形表示,Chunk Server用圆形表示,Client 用方形表示。整个读过程有如下四个步骤:
一、首先client客户端访问主服务器master,获取文件实体的位置等相关信息
二、主服务器master查询缓存记录,把文件实体的位置等相关信息发给client客户端
三、Client客户端根据拿到的信息去访问对应的存储实体数据的服务器(data servers或者 chunk servers)
四、存储实体数据的服务器(data servers或者 chunk servers)把对应的数据返回给Client客户端
从上图,咱们还能够看出,当多个MFS客户端读数据的时候,master服务器充当路由为这些客户端分发指路的做用,而数据的返回时由不一样的数据服务器直接返回给请求的客户端,这样的模式能够极大的减轻主服务器的系统及网络瓶颈,增长了整个系统的吞吐,很像LVS的DR模式的负载均衡的分发和数据传输的状况。
二、MooseFS的写文件流程:
相对于读文件,MooseFS的写文件流程较为复杂,如图所示:
图中 Master Server用三角形表示,Chunk Server用圆形表示,Client 用方形表示。
整个写过程要分为下面八个步骤:
一、Client客户端访问主服务器master,请求写入数据
二、主服务器master查询缓存记录,若是是新文件,则会联系后面的数据服务器建立对应的chunk对象准备存放文件。
三、数据服务器返回建立对应的chunk对象成功给主服务器
四、主服务器master把文件实体的位置等相关信息发给client客户端。
五、Client客户端访问对应的数据服务器写数据
六、数据服务器之间进行数据同步,互相确认成功
七、数据服务器返回成功写入信息给Client客户端
八、Client客户端回报给主服务器master写入结束
OK!
以上就是 MooseFS 的简单介绍,但愿能对51博友有所帮助!