- MFS架构
- mfsmout向master获取chunk信息,向mfschunkserver发出读写数据的命令,chunkserver是磁盘IO的执行者。mfsmount是用户发出IO请求的命令接收者,master是mfs所有chunk和node信息的维护者。
- mfsmount:本地文件系统代理,挂接FUSE,监听文件系统IO。
- mfschunckserver:本地数据代理,数据节点间的数据复制,等待mfsmaster的调度。
- mfsmetalogger:元数据日志服务器,记录数据更改日志,便于recover。
- mfsmaster:总控制器,各个数据服务器的读写调度,节点间数据拷贝,数据节点管理等等。
- mfsmount模块分析
- mfschunkserver模块分析
- mfsmount向mfschunckserver发起READ指令,mfschunkserfer首先检查chunk的版本是否正确,需要读取chunk数据的大小以及偏移量是否合法,然后根据chunkid查找对应的chunk,打开chunk映射的文件。创建一个job异步读取数据。
- mfsmount向mfschunkserver发起WRITE指令,mfschunkserver首先验证chunk的版本是否正确,该请求是否需要chunkserver帮其转发到另外一个chunkserver中去处理,如果需要,请求的报文会带有另外一个chunkserver的ip地址和端口,cs为其建立连接转发请求。如果不需要转发,cs将创建一个job,异步的打开该chunk对应映射的文件。
- mfsmount从cs获取指定chunk对应的block的数量。
- mfsmount从cs获取指定chunk的校验和。
- mfsmount向cs获取disk的size信息。
- mfsmount向cs发出写数据请求,cs建立job,异步的完成写操作。
- mfsmaster模块分析
inode维护在master端,用户维护文件信息,比如权限,路径等等,数据结构为:
chunk维护在master端,用于维护数据chunk信息,数据结构为:
- master同chunk server,mfsmount和metalogger都有交互。
- master会收到来自meta logger server的metadata.mfs/session.mfs的下载命令,命令阶段包括:MLTOMA_DOWNLOAD_START,MLTOMA_DOWNLOAD_DATA以及MLTOMA_DOWNLOAD_END三个阶段。第一阶段master先open相应的文件,第二阶段为传输文件数据,第三阶段为关闭文件。
- master会收到来自mete logger server的注册信息,将其维护在一个单链表中。这个单链表的节点,维护了meta logger server的文件描述符(socket),ip,版本号,心跳检测的timeout以及正在下载的metadata/session的文件描述符,具体的数据结构为matomlserventry。
- master会收到来自chunk server的注册信息,注册信息被维护在一个单链表中,具体的数据结构为matocsserventry。
- chunk server向master询问总空间和已经使用了多少空间。
- chunk server向master发送让某个chunk失效的指令。将chunk的状态置为INVALID。
- chunk server向master发送删除某个chunk的指令。
- 当chunk server发生错误,向master发出统计指令,发生错误的次数将记录在master中。
- chunk server向master发出获取创建chunk的状态的指令。
- chunk server向master发出获取删除chunk的状态指令。
- chunk server向master发出获取replicate chunk的状态指令。
- chunk server向master发出获取duplicate chunk的状态指令。
- chunk server向master发出获取设置chunk的版本号状态指令。
- chunk server向master发出获取truncate某个chunk的状态指令。
- master定时向自己维护的所有的TCP链路发出心跳检测包,确保TCP长连接有流量不会被断开。
- master将每秒钟,触发一次回收未使用的chunk定时任务。
- master有一个定时任务,每秒钟做一次内存中的chunk到文件系统的同步,写在metadata.mfs文件中。进程启动的时候,将从文件系统中同步所有的chunk信息到内存。
- master收到mfsmount进程的注册信息,并维护在单链表中,数据结构为matocuserventry。
- mfsmount向master查询文件系统摘要,包括chunk数量,版本号,ip,端口,已使用空间,总空间等信息。
- mfsmount向master查询session相关信息,metalog的信息,chunk矩阵等等。
- mfsmetalogger模块分析
- mfsmetalogger作为客户端,建立和mfsmaster之间的TCP长连接,连接建立成功后,向mfsmaster发送注册信息,将major、minor和middle版本号以及将metalogger的连接超时时间一起送给mfsmaster验证。
- metalogger定时向自己发送心跳检测,保证自己的TCP连接不被底层协议栈断开。
- metalogger处理来自mfsmaster的获取change log的请求。metalogger将change log的长度和内容返回给mfsmaster。
- mfsmaster向metalogger发送开始下载meta data或session文件的请求,metalogger打开文件描述符,将文件总大小返回给mfsmaster。
- mfsmaster向metalogger发送下载meta data或session数据的请求,metalogger根据请求中提供的下载大小和偏移量,返回数据给mfsmaster。