简介
MogileFS是一个开源的分布式文件存储系统,由LiveJournal旗下的DangaInteractive公司开发。Danga团队开发了包括 Memcached、MogileFS、Perlbal 等多个知名的开源项目。目前使用MogileFS 的公司非常多,如日本排名先前的几个互联公司及国内的yupoo(又拍)、digg、豆瓣、1号店、大众点评、搜狗和安居客等,分别为所在的组织或公司管理着海量的图片。
MogileFS组成部分
MogileFS由3个部分组成:
1、server:主要包括mogilefs和mogstored两个应用程序。mogilefs实现的是tracker,它通过数据库来保存元数据信息,包括站点domain、class、hots等;mogstored是存储节点(storgenode’),它其实是个WsbDAV服务,默认监听在7500 端口,接受客户端的文件存储请求。在Mogilefs安装完后,要运行mogadm工具将所有storge node注册到mogilefs的数据库里,mogilefs会对这些节点进行管理和监控。
2、utils(工具集):主要是Mogilefs的一些管理工具,例如mogadm等
3、客户端API:mogilefs的客户端API很多,例如Perl、PHP、java、python等,用这个模块可以编写客户端程序,实现文件的备份管理功能等;
MogileFS特性
1、 工作与应用层
2、 无单点:三大组件(tracker、mogstore,database)皆可实现高可用;
3、 自动完成文件复制:复制的最小单位不是文件,而是class,文件可以被自动复制到多个有足够存储空间的存储节点上;
4、 传输无需特殊协议:可以通过NFS或HTTP协议进行通信;
5、 名称空间:文件通过一个给定的key来确定,是一个全局的命名空间,没有目录基于域实现文件隔离;
6、 不共享任何数据:无需通过昂贵的SAN来共享磁盘,每个存储节点只需维护自己所属的存储设备(device);
MogileFS原理
术语解释
tracker:借助数据库保存各个节点的元数据信息,便于检索定位数据位置并监控各个节点,告知客户端存储区的位置并指挥storage节点复制数据副本,进程为mogilefsd
database:为tracker节点存储节点文件的元数据信息;
storage:将指定域中的键转换我I特有的文件名存储与在特定的设备文件中,转换后文件名为值,storage自动维护键值之间的对应关系,storage节点使用http进行数据传输,依赖于perbl,进程为mogstored,perbal;
Domain:一个域中的键值为唯一的,一个Mogilefs可以有多个域来存储不同类型的文件;
Class:复制的最小单位,管理文件属性,定义文件存储在不同设备上的分数;
device:一个存储节点,可以有多个device,就是用来存放文件的目录,每个设备都有一个设备ID,需要在mogstored配置文件中docroot配置,设备不能删除,只能将设备的状态置为dead,置为dead之后数据就无法恢复了,并且设备ID也无法使用。(建议每个节点只有一个device,文件存储多份时,有多余数据备份在当前节点其他设备,等于没有备份,若只备份2份,节点发生故障,数据就会丢失);
Mogilefs架构图
上图为Mogilefs架构图,下面也描述了图中体现出一次数据请求过程。
1、 客户端在发起一次数据请求,假设请求banner.jpg,请求首先到达前端代理perbal(当然此处可利用Nginx实现)
2、 perbal或nginx会将请求代理至Mogilefs client(这里解释下,MogileFS本身就是一个Web服务可以提高返回数据信息,不过普通的浏览器或web客户端是不具备利用获取的Mogilefs返回的数据位置信息再次请求storage节点获取数据的,所以此处需要一个特定的客户端来访问Mogilefs,而此客户端在Nginx代理时,是nginx的特定的模块。)
3、 mogilefs client模块将请求发往trackers节点,trackers向DB server发起查询
4、 tracker将以banner.jpg为key查询到的vlaue值发给nginx。
5、 Nginx通过Mogilefs API向storage 节点请求数据。
这就是一次完整的数据获取过程。
本文出自 “秋季” 博客,请务必保留此出处http://lxlxlx.blog.51cto.com/3363989/1902458
原文:http://lxlxlx.blog.51cto.com/3363989/1902458