一.MogileFS简单介绍
MogileFS是一个开源的分布式文件存储系统,用于组建分布式文件集群。由LiveJournal旗下的Danga Interactive公司开发。 Danga团队开发了包括 Memcached、MogileFS、Perlbal (Perlbal是一个强大的Perl写的反向代理服务器)等多个知名的开源项目。
目前使用MogileFS 的公司非常多,以大众点评为例,用户全部图片均有mogileFS存储,数据量已经达到500TB级别以上。
二.MogileFS特征
1.应用层提供服务,没有特殊组件要求
2.无单点失败,主要有三个组件组成,分为tracker(跟踪节点)、mogstore(存储节点)、database(数据库节点),皆可实现高可用,可支持多点冗余
3.自动文件复制:复制的最小单位不是文件,而class;
4.传输中立,无特殊协议:可以通过NFS或HTTP进行通信;
5.简单的命名空间: 每个文件对应一个key
6.不共享任何数据,MogileFS不需要依靠昂贵的SAN来共享磁盘,每个机器只用维护好自己的磁盘
7.无需RAID支持,应用层可以直接实现RAID,不共享任何东西,通过“集群”接口提供服务,具有比RAID更好的可靠性
三.MogileFS架构三大组件
1.tracker(跟踪节点)-------->mogilefsd进程
它是MogileFS的核心,是一个调度器,mogilefsd进程是trackers进程.
trackers的主要职责有:删除数据、复制数据、监控、查询、Reaper(收割程序)等等.
这个是基于事件的( event-based ) 父进程/消息总线来管理所有来自于客户端应用的交互(requesting operations to be performed), 包括将请求负载平衡到多个”query workers”中,然后让 mogilefs的子进程去处理.
它借助数据库保存各节点文件的元数据信息保存每个域中所有键的存储位置分布,方便检索定位数据位置的同时监控各节点,告诉客户端存储区位置并指挥storage节点复制数据副本,进程名为mogilefsd(7001)。
2.database(数据库节点)-------->存放元数据地方
用于为tracker存储元数据信息,是Trackers 来操作和管理它。建议做成高可用
3.mogstore(存储节点)------------>实际文件存放的地方
存储节点是mogilefs的存储文件储存的地方,也是 mogstored 节点,也叫 Storage Server,一台存储要启动一个mogstored服务,扩容就是增加这些机器,扩大文件存放的地方,mogstored(7501),perbal(7500)。
它将指定域中的键转换特有的文件名存储与在特定的设备文件中,转换后文件名为值,storage自动维护键值之间的对应关系,storage节点使用http进行数据传输,依赖于perbl,进程为mogstored,perbal;
通常是一个HTTP(WebDAV)服务器,用来数据的创建、删除、获取;
4.mogileFS三大模块组成图:
简单说明:
客户端的请求先发给tracker节点,然后tracker节点到database节点去查询数据存储在什么位置,然后将结果反馈给客户端,客户端再根据tracker节点提供的路径去访问相应的storage节点去找到数据。
tracker节点除了帮助客户端到数据库中去检索你要查找的数据,还管理storage节点,如果storage节点有损坏的,会控制storage节点进行数据自动迁移到其他节点,同时数据备份的时候也是由trackers节点来控制复制几个副本的。
四.MogileFS常用的术语:
1.Domain
一个mogilefs可以有多个domain,用来存放不同文件(大小、类型),同一个domain内key必须唯一,不同domain内key可以是相同的
2.class
文件属性管理,复制文件的最小单位不是文件,而是class,定位文件存储在不同设备上的份数,也就是定义副本的数量
3.host:每个存储节点称为一个host主机,Domain+Fid来定位文件
4.device:一个存储节点,可以有多个device,就是用来存放文件的目录,每个设备都有一个设备ID,设备不能删除,只能将设备的状态置为dead,置为dead之后数据就无法恢复了,并且设备ID也无法使用。(建议每个节点只有一个device,文件存储多份时,有多余数据备份在当前节点其他设备,等于没有备份,若只备份2份,节点发生故障,数据就会丢失);
五.理想架构图:
1、通过Nginx+Keepalived实现高可用的负载均衡,通过upstream模块可以有选择性的转发应用层的请求至后端tracker节点。
2、DRBD+Corosync+Pacemaker的机制保证了Mysql的高可用