MFS工作原理

一、MFS简介

1、什么是MFS
MFS(MooseFS) 是一个具备冗余容错功能的分布式网络文件系统,它将数据分别存放在多个物理服务器或单独磁盘或分区上,确保一份数据有多个备份副本(默认是2份),然而对于访问 MFS 的客户端或者用户来说,整个分布式网络文件系统集群看起来就像一个资源一样,从其对文件系统的情况看 MooseFS 就相当于 UNIX 的文件系统(原来对UNIX 的文件怎么操作现在就怎么做)。
冗余:将一份文件在多台服务器上保存,就是我们常说的副本数或期望值。
容错:当删除一个文件时,并不是直接将文件删掉,而是提供一个后悔时间(进攻策略的延迟时间)
,类似于将文件先放入垃圾箱的机制,这个文件在垃圾箱中也有保存时间,默认是一周,超过就会自动彻底删除。
分布式网络文件系统,分布式的两种方案:
方案1:
将单个文件A划分成3份,分别存放在3个存储服务器,优点是获取文件时可以同时从三个服务器中读取,利用了多个磁盘IO,读取效率高。缺点是对于较小的文件而言,因为TCP的慢启动特性,反而多次的TCP连接没有直接传输的效率高。
在这里插入图片描述

方案2:
将整个文件分散到后端不同的节点分散存储,注意是完整文件存到单个节点上,而不是将文件拆分成多份。如图,A、B、C三个不同的文件放在不同的服务器,这样做的好处是文件很小的时候也有高的读写效率。MFS采取的就是这种方案。
在这里插入图片描述

2、MFS文件系统的特性
2.1 高可靠性
每一份数据可以设置多个备份(多分数据,默认是2份),并可以存储在不同的主机上,而且在节点足够的情况下,当有一个节点损坏时会在另一个存活的节点备份损坏节点中的数据,以保证所有数据都有2个备份,也就是说只有2个节点同时损坏,数据才会丢失。
2.2 高可扩展性
无缝扩容,可以很轻松的通过增加主机的磁盘容量或增加主机数量来动态扩展整个文件系统的存储量,只要是能作为文件存储的都可以加入MFS进行扩容,当然官方建议所有集群节点性能和存储一样大,这样可以避免不对某个节点使用压力过大。
2.3 高可容错性
我们可以通过对mfs进行系统设置,实现当数据文件被删除后的一段时间内,依旧存放于主机的回收站中,以备误删除恢复数据。
2.4 高数据一致性
即使文件被写入、访问时,我们依然可以轻松完成对文件的一致性快照。

2.5 缺点
1)社区版Master 目前是单节点,虽然会把数据信息同步到备份服务器,但是恢复需要时间,企业版已解决。
2)Master 服务器对主机的内存要求略高,因为他会把所有元数据信息放在内存里用于整个集群数据检索,加快检索。当然也会时时写入磁盘中保存。
3)默认 Metalogger 复制元数据时间较长(可调整)
补充:内存使用问题
处理一百万个文件元数据,大概需要300M的内存空间。据此,推算如果未来1个亿的文件元数据,大概需要30G内存空间。

3、MFS文件系统的应用场景
大规模高并发的线上数据存储及访问(小文件,大文件都适合)
提示:使用NFS的原因是因为他简单,换句话说就是低并发,适用于小的环境。
大规模的数据处理,如日志分析,小文件强调性能不用 HDFS(数据重复性问题可用共享解决)
补充:
HDFS是架在本地文件系统上面的分布式文件系统,它就是个软件,也就是用一套代码把底下所有机器的硬盘变成一个软件下的目录,和mysql没有什么区别,思想一样。
mysql 本质是一个解析器,把sql变成io去读文件,再把数据转换出来给用户,存文件的底层就是使用linux或者windows的文件系统,文件名就是表名,目录名就是库名。

二、MFS组件说明

1、管理服务器 managing server 简称 master
这个组件的角色是管理整个mfs文件系统的主服务器,除了分发用户请求外,还用来存储整个文件系统中每个数据文件的 metadata 信息,metadate(元数据)信息包括文件(也可以是目录,socket,管道,块设备等)的大小,属性,文件的位置路径等

2、元数据备份服务器 Metadata backup servers 简称 metalogger
这个组件的作用是备份管理服务器 master 的变化的 metadata 信息日志文件,文件类型为 changelog_ml.*.mfs 。以便于在管理服务器出问题时,可以经过简单的操作即可让新的主服务器进行工作

3、数据存储服务器组 data servers(chunk servers)简称 data
这个组件就是真正存放数据文件实体的服务器了,这个角色可以有多台不同的物理服务器或不同的磁盘及分区来充当,当配置数据的副本多于一份时,据写入到一个数据服务器后,会根据算法在其他数据服务器上进行同步备份

4、客户机服务器组(client servers)简称 client
这个组件就是挂载并使用 mfs 文件系统的客户端,当读写文件时,客户端首先会连接主管理服务器获取数据的 metadata 信息,然后根据得到的 metadata 信息,访问数据服务器读取或写入文件实体,mfs 客户端通过 fuse mechanism 实现挂载 mfs 文件系统的,因此,只有系统支持 fuse,就可以作为客户端访问 mfs 整个文件系统
FUSE:用户空间文件系统。他允许我们在用户空间上创建文件系统,一般文件系统都是基于linux内核的,FUSE是基于用户空间开发的,好处是高度的一致性和高速的开发速度,还有高跨平台的兼容性,只要软件是基于用户空间开发的,都具有跨平台性,当然稳定性没有基于内核开发的那么高。我们的MFS客户端就是基于FUSE开发的,所以他具有高度的扩容性。
在这里插入图片描述

三、MFS 的数据操作流程

#以下C代表客户端,M代表服务器端
1、查寻文件
1.1 遍历 : ls /root
C 连接 M 发送遍历目录请求
M 检索元数据信息返回至 C
C 展现数据
在这里插入图片描述

1.2 查看文件内容:cat a.txt
C 连接 M 发起查看文件请求
M 检索元数据信息,返回 chunkip port id 至 C
C 连接对应的 chunkserver 的 块,读取数据
在这里插入图片描述

2、删除 rm filename
C 连接 M 发起删除文件请求
M 删除对应文件的元数据信息,并且将删除真实文件数据块的操作加入的对应节点的异步清除队列中,到达清除时间后,chunkserver 负责清除自己的无效块数据,返回成功请求至 C
在这里插入图片描述

3、增加文件 copy
C 连接 M 发送拷贝文件请求,发送目标元数据信息
M 选择最优节点,要求创建新块
chunkserver 创建完新块以后,返回块ID 至 M
M 将新块 ID 返回至 C
C 连接至对应chunkserver 新块写入数据,写入完成后,向 M 发送关闭文件请求
M 连接新块确认数据信息,更新元数据
在这里插入图片描述

4、修改文件 vi xxx
4.1 文件是新文件
C 连接 M 发起创建文件请求
M 选择对应 chunkserver 创建新块
chunkserve 创建新块(临时块) 返回至 M
M 返回 chunkserver ip port id 至 C
C 连接对应 chunkserver 写入数据
C 向 M 发起关闭文件请求
M 连接 chunkserver 查看块
如果块为空,更新元数据信息
如果块有数据,按照 64 MB 分配原则,创建块拷贝临时块数据至 新块,更新元数据信息
在这里插入图片描述

4.2 文件是已经存在
C 连接 M 发起修改文件请求
M 连接至 CHUNKSERVER ,通知创建临时块拷贝源块数据
CHunkserver 临时块 IP PORT ID 发送至M
M 将 临时块 IP PORT ID 发送给 C
C 连接至对应的临时块修改数据,修改完成后,通知 M 关闭文件响应
M 连接临时块对比源块数据
如果数据一致,删除临时块,更新元数据信息
如果数据不一致,按照 64MB 原则,创建新块,将临时块数据拷贝至新块,删除临时块以及源块,更新元数据信息
在这里插入图片描述

提示:MFS中块大小(簇)为64MB,虚拟的,实际是用多少分配多少,但一个块中还是只存一个文件。
簇:将一个文件分成多大的块去存储。

四、补充概念

1、元数据信息持久化
Master 记录着管理信息,比如:文件路径|大小|存储的位置(ip,port,chunkid)|份数|时间等,元数据信息存在于内存中,会定期写入metadata.mfs.back 文件中,定期同步到 metalogger,操作实时写入changelog..mfs(增量),实时同步到 metalogger 中。Master 启动将 metadata.mfs (完全备份)载入内存,重命名为 metadata.mfs.back (相当于上一的完全备份)文件(重命名后当前系统就不存在metadata.mfs )
#如果是正常启动,changelog.
.mfs文件和 metadata.mfs.back 文件合并后形成metadata.mfs文件。如果changelog..mfs不写入成功是不会更改内存写入数据的,changelog..mfs文件和 metadata.mfs.back 文件两者加在一起才是当前的最新值

2、存储块分割
文件以 chunk 大小存储,每 chunk 最大为 64M,小于 64M 的,该 chunk 的大小即为该文件大小(验证实际 chunk 文件略大于实际文件),超过 64M 的文件将被切分,以每一份(chunk)的大小不超过 64M 为原则;块的生成遵循规则:目录循环写入( 00-FF 256 个目录循环,step(步进数) 为 2,间隔写入)、chunk 文件递增生成、大文件切分目录连续。
在这里插入图片描述

3、存储的可用性
Chunkserver 上的剩余存储空间要大于 1GB(Reference Guide 有提到),新的数据才会被允许写入,否则,你会看到 No space left on device 的提示,实际中,测试发现当磁盘使用率达到 95% 左右的时候,就已经不行写入了,当时可用空间为 1.9GB。因为修改文件的时候需要创建临时块和新块,都需要用到空间。(linux哲学为所见即所得)
提示:生产环境中到达90%就很危险了,一般70%-80%就要报警。

4、副本的可用性(goal值/期望值)
文件可以有多份 copy,当 goal 为 1 时,文件会被随机存到一台 chunkserver 上,当 goal 的数大于 1 时,copy 会由 master 调度保存到不同的 chunkserver 上,goal 的大小不要超过 chunkserver 的数量,否则多出的 copy,不会有 chunkserver 去存。
#生产环境中master调度保存到某台 chunkserver ,再由这台 chunkserver 将数据同步到其他 chunkserver。

5、时间同步服务器
ntp1.aliyun.com
ntp2.aliyun.com
ntp3.aliyun.com
#目前使用最多的时间授时服务器
Centos6中默认时间同步服务器器:ntp
Centos7中默认时间同步服务器器:chrony(全平台)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值