MFS特性
Free(GPL)
通用文件系统,不需要修改上层应用就可以使用
可以在线扩容,体系架构可伸缩性极强。
部署简单。
高可用,可设置任意的文件冗余程度
可回收在指定时间内删除的文件
提供netapp,emc,ibm等商业存储的snapshot特性
google filesystem的一个c实现。
提供web gui监控接口。
提高随机读或写的效率
提高海量小文件的读写效率
读示意图:
MFS的读数据过程:
client当需要一个数据时,首先向master server发起查询请求;
管理服务器检索自己的数据,获取到数据所在的可用数据服务器位置ip|port|chunkid;
管理服务器将数据服务器的地址发送给客户端;
客户端向具体的数据服务器发起数据获取请求;
数据服务器将数据发送给客户端;
写示意图:
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记录着管理信息,比如:文件路径|大小|存储的位置(ip,port,chunkid)|份数|时间等,元数据信息存在于内存中,会定期写入metadata.mfs.back文件中,定期同步到metalogger,操作实时写入changelog.*.mfs,实时同步到metalogger中。master启动将metadata.mfs载入内存,重命名为metadata.mfs.back文件。
文件以chunk大小存储,每chunk最大为64M,小于64M的,该chunk的大小即为该文件大小(验证实际chunk文件略大于实际文件),超过64M的文件将被切分,以每一份(chunk)的大小不超过64M为原则;块的生成遵循规则:目录循环写入(00-FF 256个目录循环,step为2)、chunk文件递增生成、大文件切分目录连续。
Chunkserver上的剩余存储空间要大于1GB(Reference Guide有提到),新的数据才会被允许写入,否则,你会看到No space left on device的提示,实际中,测试发现当磁盘使用率达到95%左右的时候,就已经不行写入了,当时可用空间为1.9GB。
文件可以有多份copy,当goal为1时,文件会被随机存到一台chunkserver上,当goal的数大于1时,copy会由master调度保存到不同的chunkserver上,goal的大小不要超过chunkserver的数量,否则多出的copy,不会有chunkserver去存。