MooseFS源代码分析(一)——基础介绍
时间:2011-04-03 来源:无恙
一、MooseFS整体结构
MooseFS的整体结构比较简单。元数据放在masterserver上,客户端读取数据的时候先向masterserver读取元数据,然后再去具体的chunkserver读取数据。为保证容错性,chunkserver之间会相互更具配置复制数据。读取、写入数据的过程很明了,下面的两张图说得非常清楚:
具体实现需要去研究一下,主要想知道两点:
▲MooseFS具体是如何存储数据的。
▲MooseFS的masterver、chunkserver、客户端之间具体是如何通信的。
二、选择源代码版本
需要了解Moosefs的具体实现,相关的设计文档是没有的,只能去看源代码。下载了最新的MooseFS(mfs-1.6.20-2)的源代码,仔细看了下,源代码里面的注释非常少。 上网搜了一下相关的评论,曰:MooseFS的代码注释率大大低于一般的开源软件。
源代码肯定是要读的,但是能事情能简单点更好。找了下MooseFS的源代码,我能找到的最老版本的源代码是1.5.8。从1.5.8到1.6.20的主要更新如下:
- ◆各种算法进行优化
- ◆增加CGI脚本以提供管理界面
- ◆增加主控备份服务器模块(Metalogger Server)
- ◆增加一些辅助工具
- ◆存储块服务器的多线程支持
- ◆Bug修复以及其它功能完善
各个版本的核心功能没有太大的变化,但是1.5.*的代码结构比1.6.*的要简单很多,下面是1.6.20和1.5.8的对比。
1.5.*的代码并不比1.6.*的少,但是很多公用的代码它并没有抽出来放在单独的位置,虽然在结构上不可取,但是对于刚开始看它的代码来说还是更方便一些。考虑到1.5.*的代买结构更简单并且1.5.9是最后一个发布的1.5.*的版本,所以这里就从1.5.9的代码入手进行分析。后面的所有讨论都是基于1.5.9的版本。
MooseFS1.5.9版本的各个模块:
模块 |
内容 |
doc | 文档 |
mfschunkserver | 存储块服务器功能 |
mfsdata | 存放静态数据,例如一些配置文件的样本文件。 |
mfsmaster | 主服务器功能 |
mfsmetarestore | 恢复元数据的工具,与核心功能无关。 |
mfsmount | MooseFS客户端功能 |
其中mfsdoc、mfsdata里面没有什么代码,不用说。mfsmetarestore的功能很简单,用来还原元数据(metadata.mfs.back->metadata.mfs)。
核心的模块还是mfsmount、mfsmaster和mfschunkserver。 后面重点分析一下这三个模块的工作过程和一些重要的数据的存储结构。