前言:
分布式文件系统(DIstributed File System) 时值文件系统管理的物理存储资源不一定直接连接在本地
的节点上,而是通过计算机网络与节点相连,简单的来讲,就是把一些分散的(分散在局域网内的各个计算机
上)共享共享文件夹,及河道一个文件夹中(虚拟共享文件夹),对于用户来说,要访问这些共享文件夹中的数据
时,只要打开这个虚拟共享文件夹,就可以看到所有连接到虚拟共享文件夹内的共享文件夹,用户感觉不到这
些共享文件是分散在各个计算机上的,分布式文件系统的好除就是击中访问,简单操作,数据容载,以及提高
文件的存取性能。
MFS原理:
MFS是一个具有容错性的网络分布是文件系统,它把数据分散在多个物理服务器上,而呈现给用户的则是一个
统一的资源,
MFS文件系统的组成:
元数据服务器(Master):在整个体系中负责管理文件系统,维护元数据
元数据日志服务器(MstaLogger):备份Master服务器的变化日志文件,文件类型为changelog_ml.*.mfs ,当
Master服务器数据丢失或者损坏时,可以从日志中获得文件,进行修复。
数据存储服务器:(Chunk Server):真正存储数据的服务器,存储文件时,会把文件分块保存,在数据服务
器之间进行复制,数据服务器越多,能使用的 ‘容量’ 就越大,可靠性就越高,性能也就越好。
客户端(Client):可以像挂载NFS一样挂载MFS文件系统,其操作都是相同的。
下面为MFS文件系统的基本组成架构:
MFS进行读写的原理图:
进行数据读取的原理图:
MFS的读取数据的过程
client需要一个数据时,首先向master server发送查询请求
管理服务器检索自己的数据,获取数据所载的可用数据存储器位置ip(port) chunkip
管理服务器旧爱嗯数据服务器的地址发送给客户端
客户端向具体的数据存储服务器发起数据获取请求
数据服务器将数据发送给客户端
进行数据写入的原理图:
MFS的写数据的过程
当客户端有数据写入请求时,首先向元数据存储服务器发送请求存储地址(元数据信息如:文件大小|份数)
管理服务器根据写文件的数据信息,到数据服务器创建新的数据块
数据服务其返回建成功的信息
元数据存储器激昂数据存储的地址返回给客户端(chunkIP | port{chunkid}):
客户端向数据存储服务器进行数据的写入
数据服务器返回给客户端写入成功的消息
客户端将此次写完成结束信号和一些信息发送到管理服务器来更新文件的长度和最后的修改时间
MFS的删除文件过程
客户端有删除操作时,首先向master发送删除信息
master定位到相应元数据信息进行删除,并将chunk server上的块的删除加入到异步清理
相应客户端删除成功的信号
MFS修改文件内容的过程:
客户端修改文件内容时,首先给master发送操作信息
master申请新的块给.swp文件
客户端关闭文件后,会向master发送关闭信息
master会检测内容是否有更新,若有,则申请新的块存放更改后的文件,删除原有的
块和.swp文件块。
若无,则停止删除.swp文件。
MFS重命名文件的过程
客户端重命名文件时,会向master发送操作请求
master直接修改元数据信息中的文件名,返回重命名完成信息。
MFS编历文件的过程
煸历文件不需要访问chunk server,当客户端有边历请求时,向master发送请求信息
master返回元数据信息
客户端接收到信息后进行显示
注意:Master记录着管理信息,比如:文件存放的路径,文件大小,文件份数,存储时间等,元数据
信息存放于内存中,会定期写入metadata mfs back文件中,定期同不到metalogger,操作实时写入chang
elog*mfs ,实时同步到matalogger中,master启动metadata mfs载入内存,重命名为metadata mfs back
文件。
文件以chunk大小存储,每个chunk最大为64M,小于64M的,该chunk的大小即为该文件的大小(验证
实际的chunk文件略大于实际文件),超过64M的文件将会被切分,每一份的(chunk)的大小以不超
过64M为原则,块的生成通道原则,目录循环写入(00-FF 256个目录循环,step为2),chunk文件递增生
成,大文件切分目录连续。
chunkserver上剩余的存储空间要大于1G,新的数据才会被允许写入,否则,你会看到 No space left on
device的提示,实际中,测试发现磁盘使用率到达95左右的时候,就已经不能写入了,当时可用空间为
1.9G。
文件可以有多份copy,当goal为1时,文件会被随即存储到一台chunkserver上,当goal的数大于1时,copy
会由master调度保存到不同的chunkserver上,goal的大小不要超过chunkserver的数量,否则多出的copy不
会有chunkserver去保存。
&n