欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MFS详解

程序员文章站 2022-05-21 19:04:26
...

一、分布式文件系统

    分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。分布式文件系统的设计基于客户机/服务器模式。一个典型的网络可能包括多个供多用户访问的服务器。另外,允许一些系统扮演客户机和服务器的双重角色。例如,用户可以“发表”一个允许其他客户机访问的目录,一旦被访问,这个目录对客户机来说就象使用本地驱动器一样。

二、主流分布式文件系统介绍及特性比较

MooseFS(MFS)

MooseFS是一款网络分布式文件系统。它把数据分散在多台服务器上,但对于用户来讲,看到的只是一个源。MFS也像其他类unix文件系统一样,包含了层级结构(目录树),存储着文件属性(权限,最后访问和修改时间),可以创建特殊的文件(块设备,字符设备,管道,套接字),符号链接,硬链接。

MFS文件系统个人理解: 将分布在各个范围的计算机,将他们的分区统一进行管理使用的一种文件系统。

简单来讲,就是将分布在各个范围的计算机,将他们的分区统一进行管理使用的一种文件系统。

Ceph

Ceph是加州大学Santa Cruz分校的Sage Weil(DreamHost的联合创始人)专为博士论文设计的新一代*软件分布式文件系统。自2007年毕业之后,Sage开始全职投入到Ceph开发之中,使其能适用于生产环境。Ceph的主要目标是设计成基于POSIX的没有单点故障的分布式文件系统,使数据能容错和无缝的复制,2010年3 月,Linus Torvalds将Ceph client合并到内核2.6.34中,目前还不适用于生产环境。

GlusterFS

Glusterfs 是一个具有可以扩展到几个 PB 数量级的分布式集群文件系统。它可以把多个不同类型的存储块通过 Infiniband RDMA 或者 TCP/IP 汇聚成一个大的并行网络文件系统。

Lustre

lustre是一个大规模的、安全可靠的,具备高可用性的集群文件系统,它是由SUN公司开发和维护。该项目主要的目的就是开发下一代的集群文件系统,可以支持超过10000个节点,数以PB的数量存储系统

    特性比较如下:

 

MooseFS(MFS)

Ceph

GlusterFS

Lustre

Metadata server

单个MDS。存在单点故障和瓶颈。

多个MDS,不存在单点故障和瓶颈。MDS可以扩展,不存在瓶颈。

无,不存在单点故障。靠运行在各个节点上的动态算法来代替MDS,不需同步元数据,无硬盘I/O瓶颈。

双MDS(互相备份)。MDS不可以扩展,存在瓶颈。

文件分布/数据分布

文件被分片,数据块保存在不同的存储服务器上。

文件被分片,每个数据块是一个对象。对象保存在不同的存储服务器上。

Cluster Translators(GlusterFS集群存储的核心)包括AFR、DHT(和Stripe三种类型。

AFR相当于RAID1,每个文件都被复制到多个存储节点上。Stripe相当于RAID0,文件被分片,数据被条带化到各个存储节点上。

Translators可以组合,即AFR和stripe可以组成RAID10,实现高性能和高可用。

可以把大文件分片并分散存储在多个存储节点上。

冗余保护/副本

多副本

多副本

镜像

数据可靠性

由数据的多副本提供可靠性。

由数据的多副本提供可靠性。

由镜像提供可靠性。

由存储节点上的RAID1或RAID5/6提供可靠性。假如存储节点失效,则数据不可用。

故障恢复

手动恢复

当节点失效时,自动迁移数据、重新复制副本。

当节点、硬件、磁盘、网络发生故障时,系统会自动处理这些故障,管理员不需介入。

扩展性

增加存储服务器,可以提高容量和文件操作性能。但是由于不能增加MDS,因此元数据操作性能不能提高,是整个系统的瓶颈。

可以增加元数据服务器和存储节点。容量可扩展。文件操作性能可扩展。元数据操作性能可扩展。

容量可扩展。

可增加存储节点,提高容量可文件操作性能,但是由于不能增加MDS,因此元数据操作性能不能提高,是整个系统的瓶颈。

安装/部署

简单

简单

简单

复杂。而且Lustre严重依赖内核,需要重新编译内核。

开发语言

C

C++

C

C

适合场景

大量小文件读写

小文件

适合大文件。

对于小文件,无元数据服务设计解决了元数据的问题。但GlusterFS并没有在I/O方面作优化,在存储服务器底层文件系统上仍然是大量小文件,本地文件系统元数据访问是瓶颈,数据分布和并行性也无法充分发挥作用。因此,GlusterFS的小文件性能还存在很大优化空间。

大文件读写

产品级别

小型

中型

中型

大型

应用

国内较多

较多用户使用

HPC领域。

优缺点

实施简单

易用、稳定、对小文件很高效

但是存在单点故障。

不稳定,目前还在实验阶段,不适合于生产环境。

无元数据服务器,堆栈式架构(基本功能模块可以进行堆栈式组合,实现强大功能)。具有线性横向扩展能力。

 

由于没有元数据服务器,因此增加了客户端的负载,占用相当的CPU和内存。

但遍历文件目录时,则实现较为复杂和低效,需要搜索所有的存储节点。因此不建议使用较深的路径。

复杂、高效、很成熟、适合大型集群。

三、MooseFS系统的组成

角色

角色作用

管理服务器(mfs master)

负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复.多节点拷贝。

元数据日志服务器

Metalogger server(Metalogger)

负责备份master 服务器的变化日志文件,文件类型为changelog_ml.*.mfs ,以便于在master server 出问题的时候接替其进行工作。

数据存储服务器(chunkservers)

负责连接管理服务器,听从管理服务器调度,提供存储空间,并为客户提供数据传输。

MooseFS Client

通过fuse 内核接口挂接远程管理服务器上所管理的数据存储服务器,.看起来共享的文件系统和本地unix 文件系统使用一样的效果。

四、MooseFs的工作原理

    在客户端上对挂载在 MooseFS 上的文件操作与的文件系统完全一样,操作系统内核将文件操作传输至 FUSE 模块,进而与 mfsmount 进程进行交互。 Mfsmount 进程通过网络与管理服 务器及数据服务器交互。整个过程对用户来说是完全透明的。Mfsmount 每次与管理服务器交互,以下的操作文件元是必须的:

  • 创建文件
  • 删除文件
  • 读取文件目录
  • 读取及改变属性
  • 改变文件大小
  • 开始读取或写入数据
  • 访问MFSMETA 上的任何特殊文件

    mfsmount 直接连接到数据服务器,用于存储相关片段的文件。当写入一个文件时,写入过程完成后,管理服务器会接收从 mfsmount 发送回来的信息,用于更新文件的长度及最后的修改时间。此外,数据服务器间能够相互复制数据,以达到将数据文件存储在不同机器上的目的,以下用图来简单介绍mooseFs的读写过程:

MFS详解
            
    
    博客分类: Linux系统 分布式文件系统MFS系统详解MFS构造MFS安装 

读文件流程如上图所示, 分4个步骤

  • Client向Master请求Chunk Server地址和Chunk版本;
  • Master返回按照拓扑位置排序Chunk Server地址列表,以及Chunk版本;
  • Client从第一个Chunk Server读取数据;
  • 若版本匹配, Chunk Server返回Chunk数据;

MFS详解
            
    
    博客分类: Linux系统 分布式文件系统MFS系统详解MFS构造MFS安装 

写流程如上图所示分为一下几个步骤:

  • Client向Master请求Chunk Server地址和Chunk版本;
  • Master返回Chunk Server地址和版本
  • 若Chunk不存在, Master通知Chunk Server创建Chunk
  • 若Chunk存在, Master通知Chunk Server增加Chunk版本
  • 若多个文件引用chunk,Master通知Chunk Server复制一份Chunk
  • 若Chunk上没有Lease,Master设置Lease,Lease超时时间为120s
  • Master返回Chunk版本,和按照拓扑排序之后的Chunk Server地址
  • Client与第一个ChunkServer建立连接, 发送写请求CLTOCS_WRITE,CLTOCS_WRITE 包含Chunk Server链信息,Chunk Server转发该消息到后续Chunk Server,建立一条Chunk Server pipeline
  • Client发送多个CLTOCS_WRITE_DATA消息到Chunk Server pipeline(管道),CLTOCS_WRITE_DATA包含要写入的数据,偏移和长度等信息。
  • Chunk Server收到消息后, 写请求到下一个Chunk Server, 同时调用写本地Chunk文件,写Chunk文件过程如下:
  • 检查请求版本和Chunk版本是否一致、检查请求的CRC校验是否正确(Chunk分为64KB block,每个block对应32位CRC校验),检查其他参数
  • 修改Chunk文件(写到操作系统缓存)
  • 重新计算block checksum
  • 如果写Chunk文件成功,且后续Chunk Server也返回成功,则返回成功到前一个Chunk Server或者Client
  • Client收到Chunk Server响应消息之后, 通知Master写操作完成, Master记录必要的日志,并释放Chunk Lease

五、MooseFs的系统结构说明

服务器名

系统

IP

备注

master

Centos5.8

192.168.108.108

vm

chunkserver1

Centos5.8

192.168.108.161

vm

Chunkserver2

Centos5.8

192.168.108.162

vm

Chunkserver3

Centos5.8

192.168.108.163

vm

Chunkserver4

Centos5.8

192.168.108.164

vm

client

Centos5.8

192.168.108.109

vm

MFS详解
            
    
    博客分类: Linux系统 分布式文件系统MFS系统详解MFS构造MFS安装 

六、MooseFs备份、故障恢复机制说明

1、MooseFs元数据的备份

    通常元数据有两部分的数据

  • 要元数据文件metadata.mfs,当mfsmaster运行的时候会被命名为metadata.mfs.back
  • 元数据改变日志changelog.*.mfs,存储了过去的N小时的文件改变(N的数值是由BACK_LOGS参数设置的,默认50,参数的设置在mfschunkserver.cfg配置文件中)

    主要的元数据文件需要定期备份,备份的频率取决于取决于多少小时changelogs储存。元数据changelogs应该实时的自动复制。自从MooseFS 1.6.5,这两项任务是由mfsmetalogger守护进程做的。

2、MooseFs Master的恢复

    一旦mfsmaster崩溃(例如因为主机或电源失败),需要最后一个元数据日志changelog并入主要的metadata中。这个操作时通过mfsmetarestore工具做的,最简单的方法是:mfsmetarestore -a

    如果master数据被存储在MooseFS编译指定地点外的路径,则要利用-d参数指定使用,如:mfsmetarestore -a -d /storage/mfsmaster

3、从备份恢复MooseFS master

    为了从备份中恢复一个master,需要做:

1、安装一个mfsmaster

2、利用同样的配置来配置这台mfsmaster(利用备份来找回mfsmaster.cfg),可见配置文件也是需要备份的。

3、找回metadata.mfs.back文件,可以从备份中找,也可以中metalogger主机中找(如果启动了metalogger服务),然后把metadata.mfs.back放入data目录,一般为${prefix}/var/mfs。

4、从在master宕掉之前的任何运行metalogger服务的服务器上拷贝最后metadata文件,然后放入mfsmaster的数据目录。

5、利用mfsmetarestore命令合并元数据changelogs,可以用自动恢复模式mfsmetarestore –a,也可以利用非自动化恢复模式,语法如下:mfsmetarestore -m metadata.mfs.back -o metadata.mfs changelog_ml.*.mfs

七、MooseFs安装配制说明

1、安装mfs的前提条件:

    由于mfs的客户端程序也就是加载mfs磁盘系统的命令是使用fuse编写的,因此只要是想挂载mfs的服务器,必要的前提条件就是先安装fuse,这样编译mfs的时候才能顺利通过。另外一点需要注意:linux 2.6.18-164.e15 版本的linux内核中已经内置了fuse模块。但在该版本之前的linux内核中是不包含这个模块的。另fuse 从2.8.0-pre1 版本的源码包中去掉了fuse系统模块的源码部分,原因就是上一点提到的。这样我们在编译安装当前最新版本的fuse(2.8以上版本) 且正在使用的linux内核版本低于2.6.18-164.e15版本,则系统中是不包含fuse模块的。

2、解决的方法:

  • 升级系统内核为2.6.18-164版本:为了方便起见直接利用yum升级系统内核即可【yum install kernel】。安装成功后需重启系统
  • 使用fuse 2.7x版本编译安装。该版本的fuse中包含了linux内核需要的fuse模块,配置编译选项时指定 –enable-kernel-module 选项,make的时候就会编译相应的fuse模块,make intall会将fuse.ko复制到 /lib/modules/`uname -r`/kernel/fs/fuse/ 目录下安装后利用【modprobe -l | grep fuse  /lib/modules/2.6.18-128.el5xen/kernel/fs/fuse/fuse.ko】查看是否正常安装
  • 利用yum安装当前内核版本的fuse模块【yum install -y dkms-fuse dkms】

3、本次实验均在VMWARE虚拟机下进行实验

  • 机器配置:内存:256MCPU:双核
  • 虚拟机数量:1台
  • 操作系统RedHat 4.1.2 内核版本:2.6.18-308
  • MFS版本:mfs-1.6.27-1
  • 使用其它补丁:fuse-2.7.4
4、安装过程及步骤如下:

    ①最新的 MooseFS 稳定发行版本下载:http://jaist.dl.sourceforge.net/project/moosefs/moosefs/1.6.27/mfs-1.6.27-1.tar.gz

    ②在安装 MooseFS 系统客户端时,应当确保系统已经安装了正确的 fuse 版本,fuse版本下载:http://jaist.dl.sourceforge.net/project/fuse/fuse-2.X/2.7.4/fuse-2.7.4.tar.gz

    ③安装fuse如果只编译元数据服务端或数据存储服务端的话是没有必要安装fuse的。只有mfsmount需要fuse支持(编译时需要fuse的开发包,使用mfsmount挂载时需要fuse.ko系统模块)所以可以使用源码或yum两种方式安装fuse

#cd /usr/src
#tar -zxvf fuse-2.7.4.tar.gz
#cd fuse-2.7.4
#./configure
#make
#make install

    ④安装MooseFs

#groupadd mfs
#useradd -g mfs mfs
#cd /usr/src
#tar -zxvf mfs-1.6.27-1.tar.gz
#cd mfs-1.6.27-1
#./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var/lib --with-default-user=mfs --with-default-group=mfs –-enable-mfsmount
#make
#make install

    其中prefix=安装目录,sysconfdir=配置文件目录,localstatedir=数据存放路径,存放metadate和changelog文件等。   

    ⑤配置文件将会建立在/etc/mfs下扩展名为.dist,我们使用这些作为我们最终的配置文件:

#cd /etc/mfs
#cp mfschunkserver.cfg.dist mfschunkserver.cfg
#cp mfsexports.cfg.dist mfsexports.cfg
#cp mfshdd.cfg.dist mfshdd.cfg
#cp mfsmaster.cfg.dist mfsmaster.cfg
#cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
#cp mfstopology.cfg.dist mfstopology.cfg

    ⑥二进制metadata文件和changelog文本文件存放在一个文件夹,该文件夹是在编译期间localstatedir所设置-在我们的例子中这个文件夹是:/var/lib/mfs.首次安装会建立一个名字为metadata.mfs.empty的空的metadata文件.我们把这个空文件改变为metadata.mfs:

#cd /var/lib/mfs
#cp  metadata.mfs.empty metadata.mfs

    ⑦mfsexports.cfg文件指定哪个客户端可以挂载MooseFS文件系统并且拥有什么权限.在我们的例子中指定仅仅192.168.56.x的机器能读写MooseFS的整个架构.该文件的第一行,并有这行没有注释我们把星号(*)改变为192.168.56.0/255 因此像下面这样:

192.168.56.0/255            /    rw,alldirs,maproot=0   

   ⑧在我们的示例中mfsmaster.cfg和mfschunkserver.cfg文件中的选项没有做任何改变。

   ⑨也把下面一行添加到/etc/hosts:192.168.56.103   mfsmaster

   ⑩此时可以运行master server,CGI monitor的进程:

#/usr/sbin/mfsmaster start
#/usr/sbin/mfscgiserv

   ⑪开启cgi监控可以通过192.168.56.103:9425 查看mfs服务器的信息,查看时要关闭防火墙

#service iptables stop

   ⑫建立使用的目录:

#mkdir /mnt/chunkserver1
#mkdir /mnt/chunkserver2

    在这里/mnt/chunkserver1和/mnt/chunkserver2是两个给mfs的分区,但在本机上是一个独立的磁盘挂载目录。

   ⑬修改分区的所有者为mfs:

#chown –R mfs:mfs /mnt/chunkserver1
#chown –R mfs:mfs /mnt/chunkserver2

   ⑭修改配置文件:

#cd /etc/mfs
#vim mfsadd.cfg

    mfshdd.cfg配置文件是服务器用来分配给MFS使用的空间,配置如下:

/mnt/chunkserver1
/mnt/chunkserver2

   ⑮此时可以启动chunk server的进程:

#/usr/sbin/mfschunkserver start

   ⑯现在挂载系统到/mnt/mfs

#mkdir /mnt/mfs
#/usr/bin/mfsmount /mnt/mfs -H mfsmaster

5、出现的问题

    Fuse安装不上,后来改用centos镜像里带的fuse的rpm包安装上的

MFS详解
            
    
    博客分类: Linux系统 分布式文件系统MFS系统详解MFS构造MFS安装 

  • MFS详解
            
    
    博客分类: Linux系统 分布式文件系统MFS系统详解MFS构造MFS安装 
  • 大小: 17.4 KB
  • MFS详解
            
    
    博客分类: Linux系统 分布式文件系统MFS系统详解MFS构造MFS安装 
  • 大小: 120.6 KB
  • MFS详解
            
    
    博客分类: Linux系统 分布式文件系统MFS系统详解MFS构造MFS安装 
  • 大小: 1.8 KB
  • MFS详解
            
    
    博客分类: Linux系统 分布式文件系统MFS系统详解MFS构造MFS安装 
  • 大小: 11.3 KB
  • MFS详解
            
    
    博客分类: Linux系统 分布式文件系统MFS系统详解MFS构造MFS安装 
  • 大小: 1.8 KB