MogileFS_系统_应用在EshangTu项目的可行性分析_第1页
MogileFS_系统_应用在EshangTu项目的可行性分析_第2页
MogileFS_系统_应用在EshangTu项目的可行性分析_第3页
MogileFS_系统_应用在EshangTu项目的可行性分析_第4页
MogileFS_系统_应用在EshangTu项目的可行性分析_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、MogileFS 系统应用在EshangTu项目的可行性分析摘要1关键词1涉及的关键概念1分布式文件系统2MogileFs2正文3选择MogileFs的理由3MogileFS 特性就介绍,官方介绍3MogileFS 的结构4MogileFS 的三个大的部分5MogileFS 的二个服务进程6MogileFS 的其它7MogileFS 中的存储节点7MogileFS 内部的管理关系8MogileFS 的安装与配置 详细参考文档9MogileFS 的客户端和API9MogileFs应用到eshangtu项目的设想14 摘要 描述了MogileFS 系统涉及的计算机概念,该系统能解决的问题,运行结构

2、,原理。并讨论了当应用在eshangtu项目上时,要解决的几个问题,和初步的解决方案。 关键词MogileFS 分布式文件系统 perl 存储节点(store node) 跟踪节点(tracker) 跟踪数据库 涉及的关键概念分布式文件系统 分布式系统图示分布式+文件系统。它包含这两个方面的内涵,从文件系统的客户使用的角度来看,它就是一个标准的文件系统,提供了一系列API,由此进行文件或目录的创建、移动、删除,以及对文件的读写等操作。从内部实现来看,分布式的系统则不再和普通文件系统一样负责管理本地磁盘,它的文件内容和目录结构都不是存储在本地磁盘上,而是通过网络传输到远端系统上。并且,同一个文件

3、存储不只是在一台机器上,而是在一簇机器上分布式存储,协同提供服务,正所谓分布式。因此,考量一个分布式文件系统的实现,其实不妨可以从这两方面来分别剖析,而后合二为一。首先,看它如何去实现文件系统所需的基本增删改查的功能。然后,看它如何考虑分布式系统的特点,提供更好的容错性,负载平衡,等等之类的。这二者合二为一,就明白了一个分布式文件系统,整体的实现模式。MogileFs MogileFS 是一个开源的分布式文件系统,用于组建分布式文件集群,由 LiveJournal 旗下 Danga Interactive 公司开发,Danga 团队开发了包括 Memcached、MogileFS、Perlba

4、l 等不错的开源项目:(注:Perlbal 是一个强大的 Perl 写的反向代理服务器)。目前国内使用 MogileFS 的有图片托管网站 yupoo 等。 MogileFS由3个部分组成: 第1个部分是server端,包括mogilefsd和mogstored两个程序。前者即是mogilefsd的tracker,它将一些全局信息保存在数据库里,例如站点domain,class,host等。后者即是存储节点(store node),它其实是个HTTP Daemon,默认侦听在7500端口,接受客户端的文件备份请求。在安装完后,要运行mogadm工具将所有的store node注册到mogile

5、fsd的数据库里,mogilefsd会对这些节点进行管理和监控。 第2个部分是utils(工具集),主要是MogileFS的一些管理工具,例如mogadm等。 第3个部分是客户端API,用这个模块可以编写客户端程序,实现文件的备份管理功能。正文选择MogileFs的理由MogileFS系统的分布式存储可以解决Web服务器负载过大的问题。Eshangtu项目中需要存储大量的图片,并对用户提供存取服务,IO吞吐量较大。为了减轻Web服务器压力,考虑采用分布式文件系统,分流图片文件的读写操作。图片是静态内容,有如下需求:1, 需要集中存储,也就是对服务的需求者,只有一个统一的接口。2, 图片需要的存

6、储量比较大3, 要稳定,文件不能丢失根据上述要求我们可以采用如下模式:可以使用众多的网络协议来使用File Server上的文件,可以是NFS或是CIFS,甚至可以是SAN(当然,这东东比较贵的说)。但是为了满足上面提出的3个要求,我更倾向于用分布式文件来取代File Server。MogileFS就是这样一种系统。MogileFS 特性就介绍,官方介绍(1. 应用层 不需要特殊的核心组件(2. 无单点失败 MogileFS分布式文件存储系统安装的三个组件(存储节点、跟踪器、跟踪用的数据库),均可运行在多个 机器上,因此没有单点失败。(你也可以将跟踪器和存储节点运行在同一台机器上,这样你就没有

7、必要用4台机器)推荐至少两台机器。(3. 自动的文件复制 基于不同的文件“分类”,文件可以被自动的复制到多个有足够存储空间的存储节点上,这样可以满足这个“类别”的最少复制要求。比如你有一个图片网站,你可以设置原始的JPEG图片需要复制 至少三份,但实际只有1or2份拷贝,如果丢失了数据,那么MogileFS分布式文件存储系统可以重新建立遗失的拷贝数。用这种办法,MogileFS(不做RAID)可以节约磁盘,否则你将存储同样的拷贝多份,完全没有必要。(4. “比RAID好多了” 在一个非存储区域网络的RAID(non-SAN RAID)的建立中,磁盘是冗余的,但主机不是,如果你整个机器坏了,那么

8、文件也将不能访问。 MogileFS分布式文件存储系统在不同的机器之间进行文件复制,因此文件始终是可用的。(5.传输中立,无特殊协议 MogileFS分布式文件存储系统客户端可以通过NFS或HTTP来和MogileFS的存储节点来通信,但首先需要告知跟踪器一下。(6. 简单的命名空间 文件通过一个给定的key来确定,是一个全局的命名空间。你可以自己生成多个命名空间,只要你愿意,不过这样可能在同一MogileFS中会造成key冲突。(7. 不用共享任何东西 MogileFS分布式文件存储系统不需要依靠昂贵的SAN来共享磁盘,每个机器只用维护好自己的磁盘。(8. 不需要RAID 在MogileFS

9、中的磁盘可以是做了RAID的也可以是没有,如果是为了安全性着想的话RAID没有必要买了,因为MogileFS分布式文件存储系统已经提供了。MogileFS 的结构在使用前,我们需要对 MogileFS 有个基本的了解,就是他的三个大的部分,Tracker and Database 和 Storage Nodes, Client 组成。由二个服务进程 MogileFSd 和mogstored .如图:客户端,连接到一个域,然后在域中拿着文件的 key 来查文件的位置,然后通过集群中的位置来打开这个文件。 MogileFS 的结构图MogileFS 的三个大的部分   

10、;  前面提到 Tracker and Database 和 Storage Nodes, Client 组成,我们这先不讲 Client.因为Client实际上是一个 Perl 的 pm,可以写程序调用该 pm 来使用 MogileFS 系统,对整个系统进行读写操作。另外,象 nginx 之类有相关的模块。另外也有做成象文件系统一样采用fuse方式挂载.(1.Trackers(跟踪器 ,调度器)-MogileFSd       这个是 MogileFS 的核心部分,通俗点讲,就他是一个调度器。MogileFSd 进程就是 trackers程序

11、,类似 MogileFS 的 wiki 上介绍的,trackers 做了很多工作,Replication ,Deletion,Query,Reaper,Monitor等等。这个是基于事件的( event-based ) 父进程/消息总线来管理所有来之于客户端应用的交互(requesting operations to be performed), 包括将请求负载平衡到 “query workers” 中,让 MogileFSd 的子进程去处理. mogadm,mogtool 的所有操作都要跟 trackers 打交 道,Client 的一些操作也需要定义好 trackers,因此最好同时运行多

12、个 trackers 来做负载均衡。trackers 也可以只运行在一台机器 上,也可以跟其他程序运行在一起(不建议)· 注:mogilefsd的子进程有: o Replication 机器间复制文件o Deletion 从命名空间删除是立即的,从文件系统删除是异步的o Query 响应客户端的请求o Reaper 在磁盘失败后将文件复制请求重新放到队列中o Monitor 监测主机和设配的健康度和状态配置文件: /etc/mogilefs/mogilefsd.conf(2. 数据库(MySQL)部分      如上图所显示的,数据库用来存放

13、MogileFS 的元数据 (命名空间, 和文件在哪里). 是 Trackers 来操作和管理它。你可以用 mogdbsetup 程序来初始化数据库。因为数据库保存了MogileFS的所有元数据,如果这儿挂了,那么整个 MogileFS 将处于不可用状态。因此最好是HA结构。(3. 存储节点(Storage Nodes )-mogstored,Apache,Nginx      实际文件存放的地方. 存储节点是一个 HTTP 服务器,用来做删除,存放,重命名等事情,任何 WebDAV 服务器都可以, 不过推荐使用 mogstored 。 Mog

14、ileFSd 可以配置到两个机器上使用不同端口 mogstored 为所有 DAV 操作 (和流量监测), 并且你自己选择的快速的 HTTP 服务器用来做 GET 操作(给客户端提供文件). 典型的应用是一个挂载点有一个大容量的 SATA 磁盘,它们被挂载到 /var/mogdata/devNN. 只要配置完配置文件后 mogstored 程序的启动将会使本机成为一个存储节点。当然还需要 mogadm 这个工具增加这台机器到 Cluster 中。配置文件: /etc/mogilefs/mogstored.confMogileFS 的二个服务进程 对应上面的部分MogileFSd Mo

15、gileFS 的主守护进程,就是上面指的 trackers(跟踪器 ),由 /etc/MogileFS/MogileFSd.conf 这个配置文件控制。Mogstored MogileFS 存储守护进程, 这个就是上面指的存储节点(Storage Nodes ),由 /etc/MogileFS/mogstored.conf 这个配置文件控制。 MogileFS 的其它     有几个小工具,主要就是 mogadm,mogtool 这两个工具了,用来在命令行下控制整个 MogileFS 系统以及查看状态等等。MogileFS 中的存储节点我们先看

16、下面的图下面多了几个存储节点,他们都是单独的,便宜的,多硬盘的机器。每个机器下面有多个分区,可以用来存放这个存储系统的数据的"device".下面我们来详细讲讲:存储主机(节点)这个是 MogileFS 存储文件存放在这些机器上,也是 mogstored 节点,也叫 Storage Server,一台存储主要都要启动一个 mogstored 服务。扩容就是增加这些机器。设备(device)一个存储节点,以就是上面的主机,可以有多个 device, 就是用来存放文件的目录(比较挂载的目录),每个设备都有一个设备 id,需要在 mogstored 的配置文件中的 docroot

17、 配置的项目 指定的目录下面创建相应的设备的目录,目录名为 $docroot/dev$id,设备是不能删除的。只能将其设备的状态的值置为dead,当一个设备 dead 之后,就真的 dead了,里面的数据也无法恢复了,且这个dead了的设备的 id 也不能再用.MogileFS 内部的管理关系从上面我们可以见到,整个 MogileFS 分几个小的部分,所有文件的操作,都是通过 Key 来取的。一个 Key 对应一个 MogileFS 中的文件。在这个中,有几个东西我们需要知道,就是域,和类的作用。域(domain)在一个 MogileFS 中,可以有多个域,用来存放不同的文件,比如,不同大小的

18、文件,不同类型的文件。所有 alive 的"设备"是一个大的整体,形成一个统一的存储空间,里面的数据可以根据 "域" domain 和类 class 来分类管理,属于同一个 domain,即使是属于不同的class,文件的key也必须是唯一的.不同域的 key 才能重复类(class)在一个域中,可以有多个类,主要是用来控制复制单元的,类是用来做属性管理的,类是比域 domain 低一个级别,可以定义一个文件存储在不同 device 中的份数。一个文件必须通过 domain,class 和 key 才能找出来。我们可以给不同的重要程度的文件,不同热度的文

19、件,来分别用类来控制份数。MogileFS 的安装与配置 详细参考文档MogileFS 的客户端和API在 MogileFS 最重要的一个部分是客户端的应用,可以支持的语言非常多,也支持 FUSE。现在就描述一下Java客户端的操作和Fuse挂载的操作。(1.MogileFS类介绍要对远程的MogileFS服务端进行操作,首先需要创建一个MogileFS类;   MogileFS mfs = new MogileFS(String domain, String trackerStrings, boolean connectNow); String domain : Mogi

20、leFS服务端的domain名字;String trackerStrings : mogileFS服务端track的ip加端口;boolean connectNow : 是否现在进行连接。例如: MogileFS mfs = new MogileFS("funtestdomain",new String":6001",true);创建MogileFS类可能抛出的异常有: NoTrackersException, BadHostFormatExceptionMogileFS客户端输出流的生成:    要把客户端中

21、的图片或文件上传到MogileFS的服务端中需要创建一个输出流,当创建MogileFS对象成功(暂命名该对象的名称为mfs)后就能调用newFile方法创一个MogileFS输出流。    public MogileOutputStream newFile(String key, String storageClass,long byteCount) String key : 文件上传到服务端后,存储该名字到数据库中作为标识;String storageClass :接受该文件的storage的class名字。long byteCount : 文件的长度。例如:&

22、#160;        OutputStream out = mfs.newFile("myjpg","funtestclass", file.length();可能抛出的异常有:NoTrackersException,TrackerCommunicationException,StorageCommunicationException MogileFS客户端输出流(MogileOutputStream)输出动作的调用:MogileOutputStream是继承了OutputStream,该类

23、的构造方法如下:MogileOutputStream(Backend backend, String domain, String fid, String path, String devid, String key,long totalBytes) 可能抛出的异常有:MalformedURLException,StorageCommunicationException在这里我使用了对象的上传对象方法,所以对这个类就不作介绍了,只介绍写的方法:write(byte) public void write(byte b) throws IOException writ

24、e(int) public void write(int b) throws IOException write(byte,int,int) public void write(byte b, int off, int len) throws IOException整个个过程如下:  OutputStream out = mfs.newFile(key,tclass, file.length();                FileInputStrea

25、m in = new FileInputStream(file);                byte buffer = new byte1024;                int count = 0;                System.out.println("Sta

26、rtTime:"+d);                while (count = in.read(buffer) >= 0)                     out.write(buffer, 0, count);             

27、  输出流的另外两个方法:flush()刷新缓冲区;close()关闭输出流。依靠以上两个东西就能够对MogileFS进行写的操作了。MogileFS类其它相关的方法delete(String key)删除服务器上相应的文件;public void delete(String key) 可能抛出的异常有:   NoTrackersException,NoTrackersExceptiongetFile(String key,File destination)下载文件 public File getFile(String key, File destina

28、tion)可能抛出的异常有:        NoTrackersException, TrackerCommunicationException,IOException, StorageCommunicationExceptiongetFileStream(String key) 获取下载文件的输入流 public InputStream getFileStream(String key)      可能抛出的异常有:NoTrackersException,TrackerCommunicationException,Stor

29、ageCommunicationExceptiongetFileBytes(String key)获取文件的输入流 public byte getFileBytes(String key)可能抛出的异常有:TrackerCommunicationException,IOException,StorageCommunicationException setMaxRetries(int maxRetries) 设置最大的失败重试数Rename(String fromKey, String toKey)  public void rename(String fromKe

30、y, String toKey)可能抛出的异常有:  NoTrackersException sleep(int seconds)MogileFS有自己的睡眠线程 public void sleep(int seconds)可能抛出的异常有:   NoTrackersException,TrackerCommunicationExceptionsetRetryTimeout(int retrySleepTime) 设置连接等待的时间          public void setRe

31、tryTimeout(int retrySleepTime)(2.使用MogileFS的FUSE的API来对文件进行操作另一个是基于象文件系统一样的 FUSE先有个准备工作,就是准备 FUSE 的环境,这个要系统支持,也得 Perl 支持。 FUSE 主要就是原来给 VFS 的命令,转成 MogileFS 相应的命令来替换文件系统的操作。这样就能和正常的文件系统一样。显示和操作想关的文件。MogileFS 中 FUSE 功能操作系统支持需要的包如下yum install fuse fuse-devel fuse-libsPerl 要支持 FUSE 的操作,所需要的模块cpanm FUSE:Cl

32、ientcpanm FUSE:Servercpanm Fuse最后,我们需要挂载文件系统的内容。默认 MogileFS 有一些操作。来支持这个功能。我们可以使用 sixapart 提供的一个程序我们可以使用 svn 下载 ,然后使用其中的 mount-filepaths 就可以实现这个功能了。命令的参数如下:mount-filepaths -tracker HOST:PORT -domain DOMAINNAME -class CLASSNNAME -file-perms FILEPERM -dir-perms DIRPERM -log LOGFILE -cache-size NUM -cache-age SECS -verbose -help 这个功能的使用,我们要借助另外二个插件MogileFS-Plugin-FilePathsMogileFS-Plugin-MetaData这二个插件的作用是,让 MogileFS 支持文件列表。会给一些 MetaData 传到这个系统中。不过这二个插件(模块)可能得修改一下才能正常使用。 上面

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论