专栏首页北京马哥教育分布式文件系统Mogilefs介绍

分布式文件系统Mogilefs介绍

一、分布式文件系统简介:

什么是分布式存储:

分布式存储系统,是将数据分散存储在多台独立的设备上。传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务器成为系统性能的瓶颈,也是可靠性和安全性的焦点,不能满足大规模存储应用的需要。分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,它不但提高了系统的可靠性、可用性和存取效率,还易于扩展。

分布式文件系统设计目标 :

  • 访问透明
  • 位置透明
  • 并发透明
  • 失效透明
  • 硬件透明
  • 可扩展性
  • 复制透明
  • 迁移透明

CAP理论:

C:Consistency(一致性) 任何一个读操作总是能够读取之前完成的写操作。

A:Availability(可用性) 每一次操作总是能够在确定的时间返回。

P: Partition Tolerance ( 分区容错性)在出现网络分区的情况下,仍然能够满足一致性和可用性。

有科学家都在致力于CAP三元素并存的时候,Eric.Brewer教授指出CAP永远无法兼顾,只能根据具体应用来权衡和取舍,并且至多两个元素可以共存,后来由两位麻省理工学院的科学家证明此观点是具有前瞻性的,由此形成Brewer的 CAP定理。

正所谓鱼和熊掌不可兼得,关注一致性就需要处理因系统不可用而带来写操作失败的情况,反之关注可用性就无法保证每次都能读取到最新的写入操作。传统关系型数据库侧重于CA,而非关系型键值数据库则侧重于AP 。

  • 强一致性(ACID):在单机环境中,强一致性可以由数据库的事务来保证;在分布式环境中,强一致性很难做到,即便是做到也会因为分布式事物所带来的性能低下,不适合在互联网的环境中应用。
  • 弱一致性(包括最终一致性):系统不能保证后续访问返回最新的值,在访问到最新值之前这段时间称之为 不一致窗口 。
  • 最终一致性:是弱一致性的一种特例,存储系统保证如果对象有多次更新,在渡过 不一致窗口之后必将放回最后更新的值。
  • 服务器的一致性:N代表节点的个数;W代表更新的时候需要确认已经被更新的节点个数;R代表读取数据需要的节点数量。

W + R > N —->强一致性(通常N=3,W=R=2)

W=N,R=1 —-> 最佳读

W=1,R=N —-> 最佳写

W + R <= N —-> 弱一致性

分布式存储或分布式文件系统

  • 集中式:
    • NAS
    • SAN
  • 分布式存储:
    • 专用的元数据节点:集中元数据存储,数据节点至负责存储数据
    • 无专用元数据几点:所有数据均完整存储元数据,存储了部分数据

常见的分布式文件系统:

  • GFS:Google File System GFS擅长处理单个大文件 。
  • HDFS:Hadoop Distributed File System 根据GFS思想开发的,擅长处理单个大文件,使用场景,数据不太多的大文件。
  • TFS:Taobao File System 淘宝开源的文件系统,擅长处理海量小文件,适用于大规模场景。将元数据存储于关系型数据库或其他高性能存储中,从而能维护海量文件元数据。
  • GlusterFS:去中心化设计:擅长处理单个大文件
  • ceph:整合到linux内核实现的文件系统,已经被收录在内核,是一个 Linux PB级别的分布式文件系统。
  • MogilesFS:MogileFS是一个开源的分布式文件系统,用于组建分布式文件集群

二、MogilesFS介绍:

1.MogilesFS简介:

MogileFS是一个开源的分布式文件系统,用于组建分布式文件集群,由LiveJournal旗下DangaInteractive公司开发,Danga团队开发了包括 Memcached、MogileFS、Perlbal等不错的开源项目:(注:Perlbal是一个强大的Perl写的反向代理服务器)。MogileFS是一个开源的分布式文件系统。

目前使用 MogileFS的公司非常多,比如国外的一些公司,日本前几名的公司基本都在使用这个.国内所知道的使用 MogileFS 的公司有图片托管网站 yupoo又拍,digg, 土豆, 豆瓣,1 号店,大众点评,搜狗,安居客等等网站.基本很多网站容量,图片都超过 30T 以上。

2.MogileFS特性:

  • 1) 应用层提供服务,不需要使用核心组件
  • 2)无单点失败,主要有三个组件组成,分为tracker(跟踪节点)、mogstore(存储节点)、database(数据库节点)
  • 3)自动复制文件,复制文件的最小单位不是文件,而是class
  • 4)传输中立,无特殊协议,可以通过NFS或HTTP实现通信
  • 5)简单的命名空间:没有目录,直接存在与存储空间上,通过域来实现
  • 6)不用共享任何数据

3.MogileFS的组成

1)Tracker–跟踪器,调度器

MogileFS的核心,是一个调度器,mogilefsd进程就是trackers进程程序,trackers的主要职责有:删除数据、复制数据、监控、查询等等.这个是基于事件的( event-based ) 父进程/消息总线来管理所有来之于客户端应用的交互(requesting operations to be performed),包括将请求负载平衡到多个”query workers”中,然后让mogilefs的子进程去处理.

mogadm,mogtool的所有操作都要跟trackers打交道,Client的一些操作也需要定义好trackers,因此最好同时运行多个trackers来做负载均衡.trackers也可以只运行在一台机器上,使用负载均衡时可以使用搞一些简单的负载均衡解决方案,如haproxy,lvs,nginx等,tarcker的配置文件为/etc/mogilefs/mogilefsd.conf,监听在TCP的7001端口

2)Database–数据库部分

主要用来存储mogilefs的元数据,所有的元数据都存储在数据库中,因此,这个数据相当重要,如果数据库挂掉,所有的数据都不能用于访问,因此,建议应该对数据库做高可用

3)mogstored–存储节点

数据存储的位置,通常是一个HTTP(webDAV)服务器,用来做数据的创建、删除、获取,任何 WebDAV 服务器都可以, 不过推荐使用 mogstored . mogilefsd可以配置到两个机器上使用不同端口… mogstored 来进行所有的 DAV 操作和流量,IO监测,并且你自己选择的HTTP服务器(默认为 perlbal)用来做 GET 操作给客户端提供文件.

典型的应用是一个挂载点有一个大容量的SATA磁盘. 只要配置完配置文件后mogstored程序的启动将会使本机成为一个存储节点.当然还需要mogadm这个工具增加这台机器到Cluster中.

配置文件为/etc/mogilefs/mogstored.conf,监听在TCP的7500端口

4.基本工作流程:

应用程序请求打开一个文件 (通过RPC 通知到 tracker, 找到一个可用的机器). 做一个 “create_open” 请求.

tracker 做一些负载均衡(load balancing)处理,决定应该去哪儿,然后给应用程序一些可能用的位置。

应用程序写到其中的一个位置去 (如果写失败,他会重新尝试并写到另外一个位置去).

应用程序 (client) 通过”create_close” 告诉tracker文件写到哪里去了.

tracker 将该名称和域命的名空间关联 (通过数据库来做的)

tracker, 在后台,开始复制文件,知道他满足该文件类别设定的复制规则

然后,应用程序通过 “get_paths” 请求 domain+key (key == “filename”) 文件, tracker基于每一位置的I/O繁忙情况回复(在内部经过 database/memcache/etc 等的一些抉择处理), 该文件可用的完整 URLs地址列表.

应用程序然后按顺序尝试这些URL地址. (tracker’持续监测主机和设备的状态,因此不会返回死连接,默认情况下他对返回列表中的第一个元素做双重检查,除非你不要他这么做..)

5.MogileFS的组成:

1) server:主要包括mogilefsd和mogstored两个应用程序。mogilefsd实现的是tracker,它通过数据库来保存元数据信息,包括站点domain、class、 host等;mogstored是存储节点(store node),它其实是个WebDAV服务,默认监听在7500端口,接受客户端的文件存储请求。在MogileFS安装完后,要运行mogadm工具将所有的store node注册到mogilefsd的数据库里,mogilefsd会对这些节点进行管理和监控。

2) utils(工具集):主要是MogileFS的一些管理工具,例如mogadm等。

3) 客户端API:MogileFS的客户端API很多,例如Perl、PHP、Java、Python等,用这个模块可以编写客户端程序,实现文件的备份管理功能等。

本文分享自微信公众号 - 马哥Linux运维(magedu-Linux),作者:N18-jude

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-05-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 存储系统的那些事

    存储系统从其与生俱来的使命来说,就难以摆脱复杂系统的魔咒。无论是从单机时代的文件系统,还是后来C/S或B/S结构下数据库这样的存储中间件兴起,还是如今炙...

    小小科
  • Linux:chattr命令和chgrp命令

    文 | 云豆 图 | 来源网络 云豆贴心提醒,本文阅读时间5分钟,文末有秘密! Linux chattr命令 Linux chattr命令用于改变文件...

    小小科
  • 十分钟看懂时序数据库(I)-存储

    2017年时序数据库忽然火了起来。开年2月Facebook开源了beringei时序数据库;到了4月基于PostgreSQL打造的时序数据库TimeScaleD...

    小小科
  • 网络设备性能指标之pps

    pps:Packet Per Second(包每秒),网络设备的转发性能以“包转发性能”来表示,即设备在单位时间内能够处理多少个“包”,这决定了设备转发能力的强...

    WindWant
  • 云计算平台开启餐饮智能化营销模式

    随着人们生活水平和消费习惯的改变,餐饮行业迅速发展,行业竞争愈演愈烈。运营成本上升,经营管理滞后,服务质量参差不齐等问题日益突出。互联网技术与云计算时代的到来或...

    静一
  • 18.3.7日报

    1,修复vc6模式electron接口编译错误。其实原因比较简单,就是KeyWeakMap里用了 v8::Global<v8::Object>,

    龙泉寺扫地僧
  • Oracle删除字段的方式和风险,你都了解么?

    Oracle中和字段相关的知识还是很多的,不要小瞧了字段的增删改,一个小小的字段操作,一旦不清楚他的原理,随意在生产环境中执行,就可能产生让你印象深刻的影响。

    bisal
  • 国际机器学习大会ICML2014 主题演讲直播!

    国际机器学习大会ICML2014 主题演讲直播由腾讯视频、腾讯高校合作支持。 直播链接:http://ur.tencent.com/home/live_icml...

    腾讯高校合作
  • 契约测试:解决微服务测试问题的一种手段

    契约测试(ContractTest)第一次看到我是在Martin Fowler的文章里。(原文在这里感兴趣的可以去看看https://martinfowler....

    Criss@陈磊
  • 1 - SQL Server 2008 之 使用SQL语句创建具有约束条件的表

    约束条件分为以下几种: 1)非空约束,使用NOT NULL关键字; 2)默认值约束,使用DEFAULT关键字; 3)检查约束,使用CHECK关键字; 4)唯一约...

    CNXY

扫码关注云+社区

领取腾讯云代金券