一、什么是MFS
1.MFS相关介绍
MooseFS是一个具备冗余容错功能的分布式网络文件系统,它将数据分别存放在多个物理服务器或单独磁盘或分区上,确保一份数据有多个备份副本,然而对于访问MFS的客户端或者用户来说,整个分布式网络文件系统集群看起来就像一个资源一样,从其对文件系统的情况看MooseES,就相当于UNIX的文件系统。
2.MFS的特性说明
①高可靠性:每一份数据可以设置多个备份(多分数据),并可以存储在不同的主机上;
②高可扩展性:可以很轻松的通过增加主机的磁盘容量或增加主机数量来动态扩展整个文件系统的存储量;
③高可容错性:我们可以通过对mfs,进行系统设置,实现当数据文件被删除后的一段时间内,依旧存放于主机的回收站中,以备误删除恢复数据;
④高数据一致性:即使文件被写入、访问时,我们依然可以轻松完成对文件的一致性快照
3.MFS的缺点
①master目前是单点,虽然会把数据信息同步到备份服务器,但是恢复需要时间
② master服务器对主机的内存要求略高
③默认metaloggex.复制元数据时间较长(可调整)
内存使用问题对于master服务器来说,资源型要求就是内存大小,为了整个系统访问更快,mfs会把所有访问的元数据metadate信息放在内存中提供用户访问,因此,当文件数量增加时,内存使用量就会增加,根据官方说法,处理一百万个文件 chunksetver,大概需要300M的内存空间。据此,推算如果未来要出来1个亿的文件ghuksevex,大概需要30G内存空间。但这个是完全可以接受的。
4.MFS的应用场景
①大规模高并发的线上数据存储及访问(小文件,大文件都适合)
②大规模的数据处理,如日志分析,小文件强调性能不用HDFS
二、MFS组件说明
1.管理服务器master
管理服务器managing server简称master :这个组件的角色是管理整个mfs,文件系统的主服务器,除了分发用户请求外,还用来存储整个文件系统中每个数据文件的metadate信息metadate(元数据)信息包括文件(也可以是目录,socket,管道,块设备等)的大小,属性,文件的位置路径等。
2.元数据备份服务器matelogger
元数据备份服务器Metadate backup servers简称metalogger:这个组件的作用是备份管理服务器master的变化的metadata信息日志文件,文件类型为changelog ml.*.mfs。以便于在管理服务器出问题时,可以经过简单的操作即可让新的主服务器进行工作。
3.数据存储服务器组chunk servers
数据存储服务器组date servers (chunk servers)简称date:这个组件就是真正存放数据文件实体的服务器了,这个角色可以有多台不同的物理服务器或不同的磁盘及分区来充当,当配置数据的副本多于一份时,据写入到一个数据服务器后,会根据算法在其他数据服务器上进行同步备份。
4.客户机服务器组client
客户机服务器组(client servers)简称client:这个组件就是挂载并使用mfs文件系统的客户端,当读写文件时,客户端首先会连接主管理服务器获取数据的metadate信息,然后根据得到的metadate信息,访问数据服务器读取或写入文件实体,mfs客户端通过fuse mechanism实现挂载mfs文件系统的,因此,只有系统支持fuse,就可以作为客户端访问mfs整个文件系统。
三、数据操作组件之间的协同过程
1.MFS的读数据过程
①client当需要一个数据时,首先向master server发起查询请求;
②管理服务器检索自己的数据,获取到数据所在的可用数据服务器位置ip/port/chunk id;
③管理服务器将数据服务器的地址发送给客户端;
④客户端向具体的数据服务器发起数据获取请求;
⑤数据服务器将数据发送给客户端;
2.MFS的写数据过程
①当客户端有数据写需求时,首先向管理服务器提供文件元数据信息请求存储地址(元数据信息如:文件名|大小|份数等)﹔
②管理服务器根据写文件的元数据信息,到数据服务器创建新的数据块;
③数据服务器返回创建成功的消息;
④管理服务器将数据服务器的地址返回给客户端(chumkIP/port/chumk id);
⑤客户端向数据服务器写数据;
⑥数据服务器返回给客户端写成功的消息;
⑦客户端将此次写完成结束信号和一些信息发送到管理服务器来更新文件的长度和最后修改时间;
3.MFS删除文件过程
①客户端有删除操作时,首先向Master 发送删除信息;
②Master定位到相应元数据信息进行删除,并将chunk server上块的删除操作加入队列异步清理;
③响应客户端删除成功的信号
4.MFS修改文件内容的过程
①客户端有修改文件内容时,首先向Master 发送操作信息;
②Master申请新的块给.swp文件;
③客户端关闭文件后,会向Master 发送关闭信息;
④Master 会检测内容是否有更新,若有,则申请新的块存放更改后的文件,删除原有块和.swp文件块;
⑤若无,则直接删除.swp文件块;
5.MFS重命名文件的过程
①客户端重命名文件时,会向Master 发送操作信息;
②Master直接修改元数据信息中的文件名;返回重命名完成信息;
6.MFS遍历文件的过程
①遍历文件不需要访问chunk server,当有客户端遍历请求时,向Master 发送操作信息;
②Master返回相应元数据信息;
③客户端接收到信息后显示;
四、补充描述
1.Master记录着管理信息,比如:文件路径|大小|存储的位置(ip.port.chunkid)|份数|时间等,元数据信息存在于内存中,会定期写入metadata.mfs. back文件中,定期同步到matelogger,操作实时写入changelog. *.mfs,实时同步到metalogger中。master启动将metadate .mfs载入内存,重命名为metadate.mfs.back文件。
2.文件以chunk大小存储,每 chunk最大为64M,小于64M的,该chuk的大小即为该文件大小(验证实际chunk文件略大于实际文件),超过64M的文件将被切分,以每一份(chunk)的大小不超过64M为原则;块的生成遵循规则:目录循环写入(00-FF 256个目录循环,step为2)、chunk 文件递增生成、大文件切分目录连续。
3.Chunkserver上的剩余存储空间要大于1GB(Reference Guide有提到),新的数据才会被允许写入,否则,你会看到No space left on device的提示,实际中,测试发现当磁盘使用率达到95%左右的时候,就已经不能写入了,当时可用空间为1.9GB。
4.文件可以有多份copy,当goal为1时,文件会被随机存到一台chunkserver上,当goal的数大于1时,copy 会由master调度保存到不同的chunkserwer上,goal的大小不要超过chunksetver的数量,否则多出的copy,不会有chunkserver去存。
(注:不当之处还请大佬批评指正!!!)