首页 >
高性能 >
文件存储
分析分布式文件系统MooseFS架构(基于HDFS架构思想)
时间:2015-12-14 15:24:42 点击: 来源: 作者:
由于工作关系,以前测试过moosefs分布式文件系统,最近在学习hadoop,发现moosefs的文件系统的架构和hdfs竟然很相似,估计编写moosefs分布式文件系统的作者肯定也是参考hdfs原理编写的该软件的!
先来大体介 ...
由于工作关系,以前测试过moosefs分布式文件系统,最近在学习hadoop,发现moosefs的文件系统的架构和hdfs竟然很相似,估计编写moosefs分布式文件系统的作者肯定也是参考hdfs原理编写的该软件的!
先来大体介绍下moosefs系统的组成:
1.元数据服务器(master):负责管理整个体系中的文件系统,数据存储大小为每个文件(信息,属性和文件的位置(第),包括所有设备的信息有关非正规文件,即目录,插座,管道
和)。个人理解相当于hdfs中的namenode节点;
2.元数据日志服务器:备份元数据服务器的日志,相当于hdfs中的slave namenode;
3.数据存储服务器chunkserver:真正存储数据的节点,相当于hdfs中的datanode;
4,moosefs客户端:使用moosefs文件系统来存储和访问的主机称为moosefs的客户端,在MooseFS文件-使用任何机器数量mfsmount过程中的沟通
与管理服务器(接收和修改文件元数据)和chunkservers(实际的文件交换数据)。mfsmount是基于FUSE的机制 (用户空间文件系统中),所以可以用MooseFS每一个作业系统的
实施FUSE的机制(Linux操作系统,FreeBSD的,MacOS X系统等)
各种角色作用:
1 管理服务器:负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复.多节点拷贝
2 元数据日志服务器: 负责备份master服务器的变化日志文件,文件类型为changelog_ml.*.mfs,以便于在master server出问题的时候接替其进行工作
3 数据存储服务器:负责连接管理服务器,听从管理服务器调度,提供存储空间,并为客户提供数据传输.
4 客户端: 通过fuse内核接口挂接远程管理服务器上所管理的数据存储服务器,.看起来共享的文件系统和本地unix文件系统使用一样的效
MooseFS的特点是:
高可靠性(数据的多个副本可以存储在不同的计算机上)
动态扩展能力是通过附加/新电脑磁盘
删除的文件保留的时间可配置时间(文件系统层次的“垃圾桶”)
相干快照文件,甚至当该文件被写入/访问
架构如下:
读流程: 写流程: mfs的运行原理:
就是客户端请求master,master分派他去哪里读数据,
MFS系统由4个部分构成,master、metalogger、chunkserver、client。
Master —— mfs的大脑,记录着管理信息,比如:文件大小,存储的位置,份数等,和innodb中共享空间(ibdata)中存储的信息类似,这些信息被记录到metadata.mfs中,当该文件被载入内存后,改文件会重命名为metadata.mfs.back,当chunkserver上有更新时,master会定期将获得的新的信息回写到metadata.mfs.back中,保重元数据的可靠。
硬件推荐:大内存,因为内存中需要将metadata.mfs加载进来,这个文件的大小取决于你chunkserver上存储的数据量,内存的大小会成为之后的问题,要ECC的可以进行错误校验,当内存中数据量达到一定程度,如果没有个容错的机制,会很可怕;冗余电池,和磁盘配置RAID1/RAID5/RAID10,都是为了保证高可靠。
Metalogger —— mfs的备份,好比mysql中的m-s结构,metalogger会定期重master上将的metadata、changelog、session类型的文件下载同步到本地目录下,并加后缀”_ml”将其重命名。
硬件推荐:与master机器配置一致,metalogger本身就是master的一个备机,当master宕机后,可以直接将metalogger提升为master。
Chunkserver —— 数据存储地,文件以chunk大小存储,每chunk最大为64M,小于64M的,该chunk的大小即为该文件大小,超过64M的文件将被均分,每一份(chunk)的大小以不超过64M为原则;文件可以有多份copy,即除了原始文件以外,该文件还存储的份数,当goal为1时,表示只有一份copy,这份copy会被随机存到一台chunkserver上,当goal的数大于1时,每一份copy会被分别保存到每一个chunkserver上,goal的大小不要超过chunkserver的数量,否则多出的copy,不会有chunkserver去存,goal设置再多实际上也就没有意义的。Copy的份数,一般设为大于1份,这样如果有一台chukserver坏掉后,至少还有一份copy,当这台又被加进来后,会将失去的那份copy补回来,始终保持原有的copy数,而如果goal设为1copy,那么当存储该copy的chunkserver坏掉,之后又重新加入回来,copy数将始终是0,不会恢复到之前的1个copy。
Chunkserver上的剩余存储空间要大于1GB(Reference Guide有提到),新的数据才会被允许写入,否则,你会看到No space left on device的提示,实际中,测试发现当磁盘使用率达到95%左右的时候,就已经不行写入了,当时可用空间为1.9GB。
Client —— 客户端通过内核加载的FUSE模块,再通过和master的共同,将chunkserver共享的分区挂载到本地,然后进行读写操作。由于FUSE模块是外加的模块,当系统重启后,需要执行modprobe fuse,将其加载到内核中
”您可通过以下微信二维码,赞赏作者“