一、简介

  MooseFS是一个具备冗余容错功能的分布式网络文件系统,它将数据分别存放在多个物理服务器或单独磁盘或分区上,确保一份数据有多个备份副本。对于访问的客户端或者用户来说,整个分布式网络文件系统集群看起来就像一个资源一样。从其对文件操作的情况看,MooseFS就相当于一个类UNIX文件系统。

二、适用场景

  MooseFS是一款相对小众的分布式文件系统,不需要修改上层应用接口即可直接使用,支持FUSE的操作方式,部署简单并提供Web界面的方式进行管理与监控,同其他分布式操作系统一样,支持在线扩容,并进行横向扩展。MooseFS还具有可找回误操作删除的文件,相当于一个回收站,方便业务进行定制;同时MooseFS对于海量小文件的读写要比大文件读写的效率高的多。但MooseFS的缺点同样明显,MFS的主备架构情况类似于MySQL的主从复制,从可以扩展,主却不容易扩展。短期的对策就是按照业务来做切分,随着MFS体系架构中存储文件的总数上升,Master Server对内存的需求量会不断增大。并且对于其单点问题官方自带的是把数据信息从Master Server同步到Metalogger Server上,Master Server一旦出问题Metalogger Server可以恢复升级为Master Server,但是需要恢复时间。目前,也可以通过第三方的高可用方案(heartbeat+drbd+moosefs)来解决 Master Server 的单点问题。

三、四大组件

MooseFS文件系统主要由四大组件构成,分别为管理服务器、元数据日志服务器、数据存储服务器、客户端,相关解释如下:

  1. 管理服务器(Master Server):这个组件的角色是管理整个mfs文件系统的主服务器,除了分发用户请求外,还用来存储整个文件系统中的每个数据文件的metadata信息,metadata(元数据)信息包括文件(也可以是目录、socket、管道、设备等)的大小、属性、文件位置路径等,以及文件空间的回收和恢复,控制多chunk server节点的数据拷贝。很类似lvs负载均衡主服务器,不同的是lvs仅仅根据算法分发请求,而master根据内存里的metadata信息来分发请求。这个master只能有一台处于激活工作的状态。
  2. 元数据日志服务器(metalogger Server):作用是备份管理服务器master的变化的metadata信息日志文件,文件类型为changelog_ml.*.mfs,以便于在主服务器出现问题的时候,可以经过简单的操作即可让新主服务器进行工作。这很类似Mysql的主从同步,只不过他不像mysql从库那样在本地应用数据,而只是接收主服务器上文件写入时记录的文件相关的metadata信息。这个backup可以有一台或多台,它很类似于lvs从负载均衡器。
  3. 数据存储服务器(Chunk Servers):存放数据文件实体的服务器了,这个角色可以有多台不同的物理服务器或不同的磁盘及分区来充当,当配置数据的副本多于一份时,剧写入到一个数据服务器后,会根据算法在其他数据服务器上进行同步备份。
  4. 客户端(Client):挂载并使用mfs文件系统的客户端,当读写文件时,客户端首先连接主管理服务器获取数据的metadata信息,然后根据得到的metadata信息,访问数据服务器读取或写入文件实体。mfs客户端通过FUSE mechanism实现挂载MFS文件系统的。因此,只要系统支持FUSE,就可以作为客户端访问MFS整个文件系统。所谓的客户端并不是网站用户,而是前端访问文件系统的应用服务器,如web

四、工作方式

如下图中 Master Server用三角形表示,Chunk Server用圆形表示,Client 用方形表示。整个读过程有以下四个步骤:

  1. 首先client客户端访问主服务器master,获取文件实体的位置等相关信息。
  2. 主服务器master查询缓存记录,把文件实体的位置等相关信息发给client客户端。
  3. Client客户端根据拿到的信息去访问对应的存储实体数据的服务器(data servers或者chunk servers)。
  4. 存储实体数据的服务器(data servers或者chunk servers)把对应的数据返回给Client客户端。

我们还可以看出,当多个MFS客户端读数据的时候,master服务器充当路由为这些客户端分发指路的作用,而数据的返回时由不同的数据服务器直接返回给请求的客户端,这样的模式可以极大的减轻主服务器的系统及网络瓶颈,增加了整个系统的吞吐。

MooseFS文件系统写过成比读过成相对复杂的多,如下图:

  1. Client客户端访问主服务器master,请求写入数据。
  2. 主服务器master查询缓存记录,如果是新文件,则会联系后面的数据服务器创建对应的chunk对象准备存放文件。
  3. 数据服务器返回创建对应的chunk对象成功给主服务器。
  4. 主服务器master把文件实体的位置等相关信息发给client客户端。
  5. Client客户端访问对应的数据服务器写数据。
  6. 数据服务器之间进行数据同步,互相确认成功。
  7. 数据服务器返回成功写入信息给Client客户端。
  8. Client客户端回报给主服务器master写入结束。

MooseFS分布式文件系统介绍的更多相关文章

  1. MooseFS分布式文件系统介绍及安装教程详解

    MFS系统由4个部分构成:master.metalogger.chunkserver.client. 1.Master —— mfs的大脑,记录着管理信息,比如:文件大小,存储的位置,份数等,和inn ...

  2. Linux MFS分布式文件系统介绍和安装

    MFS分布式文件系统 mooseFS(moose 驼鹿)是一款网络分布式文件系统.它把数据分散在多台服务器上,但对于用户来讲,看到的只是一个源.MFS也像其他类unix文件系统一样,包含了层级结构(目 ...

  3. 一文搞定FastDFS分布式文件系统配置与部署

    Ubuntu下FastDFS分布式文件系统配置与部署 白宁超 2017年4月15日09:11:52 摘要: FastDFS是一个开源的轻量级分布式文件系统,功能包括:文件存储.文件同步.文件访问(文件 ...

  4. 分布式文件存储:FastDFS简单使用与原理分析

    引言 FastDFS 属于分布式存储范畴,分布式文件系统 FastDFS 非常适合中小型项目,在我接手维护公司图片服务的时候开始接触到它,本篇文章目的是总结一下 FastDFS 的知识点. 用了 2 ...

  5. MFS分布式文件系统管理

    MFS官方网站http://www.moosefs.org/reference-guide.html mooseFS(moose驼鹿)是一款网络分布式文件系统,它把数据分散到多台服务器上,但对于用户来 ...

  6. 淘宝分布式文件存储系统:TFS

    TFS ——分布式文件存储系统 TFS(Taobao File System)是淘宝针对海量非结构化数据存储设计的分布式系统,构筑在普通的Linux机器集群上,可为外部提供高可靠和高并发的存储访问. ...

  7. .Net平台下,分布式文件存储的实现

    遇到的问题 对于Web程序,使用一台服务器的时候,客户端上传的文件一般也都是存储在这台服务器上.但在集群环境中就行不通了,如果每个服务器都存储自己接受到的文件,就乱套了,数据库中明明有这个附件的记录, ...

  8. 我心中的核心组件(可插拔的AOP)~分布式文件上传组件~基于FastDFS

    回到目录 一些概念 在大叔框架里总觉得缺点什么,在最近的项目开发中,终于知道缺什么了,分布式文件存储组件,就是缺它,呵呵,对于分布式文件存储来说,业界比较公认的是FastDFS组件,它自己本身就是集群 ...

  9. Linux文件系统介绍(转)

    文章转自:http://www.iteye.com/topic/816268 文件系统是linux的一个十分基础的知识,同时也是学习linux的必备知识. 本文将站在一个较高的视图来了解linux的文 ...

随机推荐

  1. (转).Net基础体系和跨框架开发普及

    在园子里看到了一篇关于.net体系及框架开发的文章,感触颇深,身为一个.net程序员,发现自己在这方面的跟进和理解远远不够.转到自己这里,分享的同时方便日后查看. 原文链接: http://www.c ...

  2. cocos2d-x v3.3开发环境配置

    开发环境: Win10 VS2012 链接:http://pan.baidu.com/s/1bn6S31d 密码:j2ol 配置Java SDK: 新建:JAVA_HOME =G:\Java\jdk1 ...

  3. Command对象

  4. thread.Join(); 让主线程等待自己完成

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  5. Linux下安装Python2.7

    Linux下安装Python2.7 CentOS6.8 中默认安装了Python2.6,但是很多应用需要使用Python2.7,于是要学会如何在Linux下安装Python2.7,这里记录一下,免得以 ...

  6. UML类图介绍及简单用法

    原文链接 一.类的属性的表示方式 在UML类图中,类使用包含类名.属性(field) 和方法(method) 且带有分割线的矩形来表示,比如下图表示一个Employee类,它包含name,age和em ...

  7. codeforeces:Mister B and Astronomers分析和实现

    题目很长,稍微翻译一下: 外星球每隔T秒中只有一秒可以被观测到,其它T-1秒无法被观测.n个天文学家(分别编号为1,...,n)轮流观测天空1秒,且第i+1个科学家在第i个天文学家后ai+1秒后才执行 ...

  8. c++原型模式(Prototype)

    原型模式是通过已经存在的对象的接口快速方便的创建新的对象. #include <iostream> #include <string> using namespace std; ...

  9. SqlServer try catch 捕获不到的一些错误及解决方法

    IF (OBJECT_ID('AA','U') IS NOT NULL) DROP TABLE AA CREATE TABLE AA(ID INT) SELECT * FROM AA --注:数据库当 ...

  10. 基于unittest测试框架的扩展

    1 unittest介绍 Unittest,Python自带的单元测试框架,PyUnit类包含TestResult,TestCase, TestSuite,TextTestResult,TextTes ...