简介前端
MogileFS是一个开源的分布式文件存储系统,由LiveJournal旗下的DangaInteractive公司开发。Danga团队开发了包括 Memcached、MogileFS、Perlbal 等多个知名的开源项目。目前使用MogileFS 的公司很是多,如日本排名先前的几个互联公司及国内的yupoo(又拍)、digg、豆瓣、1号店、大众点评、搜狗和安居客等,分别为所在的组织或公司管理着海量的图片。java
MogileFS组成部分node
MogileFS由3个部分组成:python
一、server:主要包括mogilefs和mogstored两个应用程序。mogilefs实现的是tracker,它经过数据库来保存元数据信息,包括站点domain、class、hots等;mogstored是存储节点(storgenode’),它实际上是个WsbDAV服务,默认监听在7500 端口,接受客户端的文件存储请求。在Mogilefs安装完后,要运行mogadm工具将全部storge node注册到mogilefs的数据库里,mogilefs会对这些节点进行管理和监控。nginx
二、utils(工具集):主要是Mogilefs的一些管理工具,例如mogadm等web
三、客户端API:mogilefs的客户端API不少,例如Perl、PHP、java、python等,用这个模块能够编写客户端程序,实现文件的备份管理功能等;数据库
MogileFS特性浏览器
一、 工做与应用层架构
二、 无单点:三大组件(tracker、mogstore,database)皆可实现高可用;dom
三、 自动完成文件复制:复制的最小单位不是文件,而是class,文件能够被自动复制到多个有足够存储空间的存储节点上;
四、 传输无需特殊协议:能够经过NFS或HTTP协议进行通讯;
五、 名称空间:文件经过一个给定的key来肯定,是一个全局的命名空间,没有目录基于域实现文件隔离;
六、 不共享任何数据:无需经过昂贵的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架构图,下面也描述了图中体现出一次数据请求过程。
一、 客户端在发起一次数据请求,假设请求banner.jpg,请求首先到达前端代理perbal(固然此处可利用Nginx实现)
二、 perbal或nginx会将请求代理至Mogilefs client(这里解释下,MogileFS自己就是一个Web服务能够提升返回数据信息,不过普通的浏览器或web客户端是不具有利用获取的Mogilefs返回的数据位置信息再次请求storage节点获取数据的,因此此处须要一个特定的客户端来访问Mogilefs,而此客户端在Nginx代理时,是nginx的特定的模块。)
三、 mogilefs client模块将请求发往trackers节点,trackers向DB server发起查询
四、 tracker将以banner.jpg为key查询到的vlaue值发给nginx。
五、 Nginx经过Mogilefs API向storage 节点请求数据。
这就是一次完整的数据获取过程。