logo资料库

MooseFS分布式文件系统源码分析.doc

第1页 / 共202页
第2页 / 共202页
第3页 / 共202页
第4页 / 共202页
第5页 / 共202页
第6页 / 共202页
第7页 / 共202页
第8页 / 共202页
资料共202页,剩余部分请下载后查看
第一章MooseFS文件系统介绍
1.1 MooseFS 系统简介
1.1.1 MoosFS特点
1.1.2 MooseFS 的体系结构
1.1.3系统如何工作
1.1.4容错性
1.1.5平台
1.2.1 MooseFS系统源码结构
第二章master主服务器工作原理
2.1 元数据结构分析
2.1.1 节点数据结构与文件树的构成
2.1.2 块数据结构和文件节点与块的关系
2.1.3 元数据文件metadata.mfs
2.2 master整体运行框架
2.2.1 一切从main开始
2.2.2 文件锁与进程启停控制
2.2.3 系统各模块的初始化
2.2.4 大循环mainloop
2.2.5 总结
2.3 master的初始化
2.3.1 日志模块初始化
2.3.2 随机数产生器初始化
2.3.3 数据cache管理初始化
2.3.4 加载sessions初始化
2.3.5 exports管理初始化
2.3.5 文件系统管理初始化
2.4 mater的消息交互概述
2.4.1 消息交互框架
2.4.2 对应metalogger的消息结构
2.4.3 对应chunkserver的消息结构
2.4.3 对应client的消息结构
2.5 master与client的消息交互
2.5.1 消息REGISTER
2.5.2 消息STATFS
2.5.3 消息ACCESS
2.5.4 消息LOOKUP
2.5.5消息GETATTR
2.5.6消息SETATTR
2.5.7消息READLINK
2.5.8消息SYMLINK
2.5.9消息MKNOD
2.5.10消息MKDIR
2.5.11消息UNLINK
2.5.12消息RMDIR
2.5.13消息RENAME
2.5.14消息LINK
2.5.15消息GETDIR
2.5.16消息OPEN
2.5.17消息READ CHUNK及读数据过程
2.5.18消息WRITE CHUNK及写数据过程
2.6 exports机制
2.6.1 mfsexports.mfs文件结构
2.6.2 exports数据结构
2.6.3 session数据结构
2.6.4 客户端 IP访问控制
2.6.5 挂在目录路径访问控制
2.6.6 密码访问控制
2.6.7 版本访问控制
2.6.8 用户映射机制
2.6.9 文件权限控制
2.7 用户与组机制(自定义模块)
2.7.1 数据结构
2.7.2 保存加载与初始化
2.7.3 访问控制
2.7.4 用户与组的相关命令
2.7.5 密码的维护
2.7.6 root用户的特殊性
2.7.7 掉电保护和恢复
2.8 session机制
2.8.1 session数据结构
2.8.2 sessions.mfs文件结构
2.8.3 session与用户重映射
2.8.4 session统计文件操作次数
2.8.5 session记录打开文件
2.8.6 session的维护
2.9 副本机制
2.9.1 副本数据结构
2.9.2 块ID
2.9.2 块的版本号
2.9.4 副本状态及转换
2.9.5 块的副本数
2.9.6 块的副本操作
2.9.7 chunk的周期维护
2.9.8副本放置算法
2.9.9 块节点的移除
2.10 快照机制
2.10.1 快照的生成
2.10.2 快照的写时复制
2.11 配额机制
2.11.1 配额相关的数据结构和变量
2.11.2 配额的维护
2.11.3 配额的使用
2.11.4 配额的设置和配额信息的获取
2.12回收站机制
2.12.1 回收站数据结构
2.12.2 META系统
2.12.3 文件信息的获取
2.12.4 trashpath的获取和设置
2.12.5 trashtime的获取和设置
2.12.6 文件的清除PURGE
2.12.7 文件的恢复UNDEL
2.12.8 回收站的维护
2.13 reserved机制
2.13.1 记录打开文件
2.13.2 reserved机制数据结构
2.13.3 META系统
2.13.4 文件信息的获取
2.13.5 文件保持和释放
2.13.6 reserved维护
2.14 DCM机制
2.14.1 数据结构及初始化
2.14.2 dcm_open
2.14.3 dcm_modify
2.14.4 总结
2.15 优化机制
2.15.1 freenode与位管理节点编号
2.16 master的容错恢复
2.16.1 changelog机制
2.16.2 mfsmetarestore机制
2.17 异地备份机制(自定义模块)
2.17.1 工作模型
2.17.2 基本实现原理
2.17.3 冲突文件的产生与解决
2.17.4 备份文件副本数可控
2.17.5 新增配置参数说明
2.17.6 测试
2.18 master端函数调用逻辑框架
第三章chunkserver块服务器工作原理
3.1基本数据结构
3.1.1 块文件存储结构及命名规则
3.1.2 块目录组织结构及配置文件
3.1.3 块文件对应的数据结构chunk
3.1.4 块目录对应的数据结构folder
3.1.5 数据结构组织方式
3.2 chunkserver的初始化
3.2.1 块文件管理初始化
3.2.2 与client&cs通信模块初始化
3.2.3 与master通信模块初始化
3.2.4 表格数据模块初始化
3.3 周期性数据结构维护
3.3.1 周期性chunk维护
3.3.2 周期性folder维护
3.3.3 延时计数器维护
3.3.4 块目录操作状态维护
3.4 与master的消息交互
3.4.1 消息交互数据结构及框架
3.4.2 消息CREATE
3.4.3 消息DELETE
3.4.4 消息DUPLICATE
3.4.5 消息SET_VERSION
3.4.6 消息REPLICATE
3.4.7 消息TRUNCATE
3.4.8 消息DUPTRUNC
3.4.9 消息REGISTER
3.4.10 信息反馈
3.5 线程池机制
3.5.1 数据结构
3.5.2 基本操作函数
3.5.3 工作原理
3.5.4 总结
3.6 与client/cs的消息交互
3.6.1 消息交互数据结构及框架
3.6.2 读块数据过程
3.6.3 单副本写块数据过程
3.6.4 多副本写块数据过程
3.6.5 读/写操作阶段状态转换
3.6.6 总结
3.7 cs端函数调用逻辑框架
第四章metalogger备份服务器工作原理
4.1 metalogger的初始化
4.2 与master的消息交互
4.3 metalogger实时接收日志消息
4.4 metalogger定期下载元数据的过程
4.5 metalogger定期下载session文件的过程
4.6 总结
第五章client客户端工作原理
5.1 mfsmount的工作原理
5.1.1 数据结构
5.1.2 FUSE基本原理
5.1.3 从main()开始
5.1.4 向master注册
5.1.5 线程fs_receive_thread
5.1.6 线程fs_nop_thread
5.1.4 各类消息请求
5.1.5 读数据过程
5.1.6 写数据过程
5.1.7 mfsmount参数说明
5.2 mfstool的工作原理
5.2.1 mfsfilerepair
MooseFS 分布式文件系统调研分析报告
第一章MooseFS 文件系统介绍--------------------------------------------------------------7 1.1 MooseFS 系统简介 ----------------------------------------------------------------------------- 7 1.1.1 MoosFS 特点 ------------------------------------------------------------------------------------------------7 1.1.2 MooseFS 的体系结构 ------------------------------------------------------------------------------------ 7 1.1.3 系统如何工作 -----------------------------------------------------------------------------------------------8 1.1.4 容错性 -------------------------------------------------------------------------------------------------------- 8 1.1.5 平台 ----------------------------------------------------------------------------------------------------------- 9 1.2.1 MooseFS 系统源码结构 ----------------------------------------------------------------------9 第二章master 主服务器工作原理--------------------------------------------------------- 10 2.1 元数据结构分析 ------------------------------------------------------------------------------- 10 2.1.1 节点数据结构与文件树的构成 -----------------------------------------------------------------------10 2.1.2 块数据结构和文件节点与块的关系 ---------------------------------------------------------------- 14 2.1.3 元数据文件 metadata.mfs ------------------------------------------------------------------------------ 17 2.2 master 整体运行框架 ------------------------------------------------------------------------- 19 2.2.1 一切从 main 开始 ----------------------------------------------------------------------------------------19 2.2.2 文件锁与进程启停控制 --------------------------------------------------------------------------------21 2.2.3 系统各模块的初始化 ----------------------------------------------------------------------------------- 21 2.2.4 大循环 mainloop ----------------------------------------------------------------------------------------- 23 2.2.5 总结 ---------------------------------------------------------------------------------------------------------26 2.3 master 的初始化 ------------------------------------------------------------------------------- 26 2.3.1 日志模块初始化 ----------------------------------------------------------------------------------------- 27 2.3.2 随机数产生器初始化 ----------------------------------------------------------------------------------- 27 2.3.3 数据 cache 管理初始化 ---------------------------------------------------------------------------------27 2.3.4 加载 sessions 初始化 ------------------------------------------------------------------------------------27 2.3.5 exports 管理初始化 -------------------------------------------------------------------------------------- 27 2.3.5 文件系统管理初始化 ----------------------------------------------------------------------------------- 28 2.4 mater 的消息交互概述 ------------------------------------------------------------------------29 2.4.1 消息交互框架 -------------------------------------------------------------------------------------------- 29 2.4.2 对应 metalogger 的消息结构 --------------------------------------------------------------------------32 2.4.3 对应 chunkserver 的消息结构 ------------------------------------------------------------------------ 34 2.4.3 对应 client 的消息结构 ---------------------------------------------------------------------------------35 2.5 master 与 client 的消息交互 ----------------------------------------------------------------- 37 2.5.1 消息 REGISTER ----------------------------------------------------------------------------------------- 43 2.5.2 消息 STATFS --------------------------------------------------------------------------------------------- 43 2.5.3 消息 ACCESS -------------------------------------------------------------------------------------------- 44 2.5.4 消息 LOOKUP ------------------------------------------------------------------------------------------- 44 2.5.5 消息 GETATTR ------------------------------------------------------------------------------------------- 45 2.5.6 消息 SETATTR --------------------------------------------------------------------------------------------46 2.5.7 消息 READLINK -----------------------------------------------------------------------------------------46 2.5.8 消息 SYMLINK -------------------------------------------------------------------------------------------46 2.5.9 消息 MKNOD --------------------------------------------------------------------------------------------- 47
2.5.10 消息 MKDIR ---------------------------------------------------------------------------------------------48 2.5.11 消息 UNLINK ------------------------------------------------------------------------------------------- 48 2.5.12 消息 RMDIR --------------------------------------------------------------------------------------------- 49 2.5.13 消息 RENAME ------------------------------------------------------------------------------------------ 49 2.5.14 消息 LINK ------------------------------------------------------------------------------------------------50 2.5.15 消息 GETDIR --------------------------------------------------------------------------------------------51 2.5.16 消息 OPEN ----------------------------------------------------------------------------------------------- 51 2.5.17 消息 READ CHUNK 及读数据过程 --------------------------------------------------------------- 52 2.5.18 消息 WRITE CHUNK 及写数据过程 -------------------------------------------------------------- 53 2.6 exports 机制 -------------------------------------------------------------------------------------55 2.6.1 mfsexports.mfs 文件结构 ------------------------------------------------------------------------------- 55 2.6.2 exports 数据结构 ----------------------------------------------------------------------------------------- 57 2.6.3 session 数据结构 ------------------------------------------------------------------------------------------58 2.6.4 客户端 IP 访问控制 ------------------------------------------------------------------------------------ 58 2.6.5 挂在目录路径访问控制 --------------------------------------------------------------------------------59 2.6.6 密码访问控制 -------------------------------------------------------------------------------------------- 59 2.6.7 版本访问控制 -------------------------------------------------------------------------------------------- 59 2.6.8 用户映射机制 -------------------------------------------------------------------------------------------- 61 2.6.9 文件权限控制 -------------------------------------------------------------------------------------------- 62 2.7 用户与组机制(自定义模块) ------------------------------------------------------------- 63 2.7.1 数据结构 ---------------------------------------------------------------------------------------------------63 2.7.2 保存加载与初始化 -------------------------------------------------------------------------------------- 65 2.7.3 访问控制 ---------------------------------------------------------------------------------------------------66 2.7.4 用户与组的相关命令 ----------------------------------------------------------------------------------- 67 2.7.5 密码的维护 ------------------------------------------------------------------------------------------------70 2.7.6 root 用户的特殊性 --------------------------------------------------------------------------------------- 71 2.7.7 掉电保护和恢复 ----------------------------------------------------------------------------------------- 71 2.8 session 机制 ------------------------------------------------------------------------------------- 71 2.8.1 session 数据结构 ------------------------------------------------------------------------------------------71 2.8.2 sessions.mfs 文件结构 -----------------------------------------------------------------------------------72 2.8.3 session 与用户重映射 ----------------------------------------------------------------------------------- 73 2.8.4 session 统计文件操作次数 ----------------------------------------------------------------------------- 73 2.8.5 session 记录打开文件 ----------------------------------------------------------------------------------- 74 2.8.6 session 的维护 ---------------------------------------------------------------------------------------------75 2.9 副本机制 ---------------------------------------------------------------------------------------- 75 2.9.1 副本数据结构 -------------------------------------------------------------------------------------------- 75 2.9.2 块 ID --------------------------------------------------------------------------------------------------------76 2.9.2 块的版本号 ------------------------------------------------------------------------------------------------77 2.9.4 副本状态及转换 ----------------------------------------------------------------------------------------- 77 2.9.5 块的副本数 ------------------------------------------------------------------------------------------------79 2.9.6 块的副本操作 -------------------------------------------------------------------------------------------- 80 2.9.7 chunk 的周期维护 ----------------------------------------------------------------------------------------82 2.9.8 副本放置算法 --------------------------------------------------------------------------------------------- 87
2.9.9 块节点的移除 -------------------------------------------------------------------------------------------- 90 2.10 快照机制 ---------------------------------------------------------------------------------------92 2.10.1 快照的生成 ----------------------------------------------------------------------------------------------92 2.10.2 快照的写时复制 ----------------------------------------------------------------------------------------93 2.11 配额机制 ---------------------------------------------------------------------------------------94 2.11.1 配额相关的数据结构和变量 ------------------------------------------------------------------------ 95 2.11.2 配额的维护 ---------------------------------------------------------------------------------------------- 96 2.11.3 配额的使用 ---------------------------------------------------------------------------------------------- 97 2.11.4 配额的设置和配额信息的获取 --------------------------------------------------------------------- 97 2.12 回收站机制 ------------------------------------------------------------------------------------ 97 2.12.1 回收站数据结构 ----------------------------------------------------------------------------------------98 2.12.2 META 系统 -----------------------------------------------------------------------------------------------99 2.12.3 文件信息的获取 ----------------------------------------------------------------------------------------99 2.12.4 trashpath 的获取和设置 ------------------------------------------------------------------------------100 2.12.5 trashtime 的获取和设置 ------------------------------------------------------------------------------100 2.12.6 文件的清除 PURGE --------------------------------------------------------------------------------- 102 2.12.7 文件的恢复 UNDEL --------------------------------------------------------------------------------- 102 2.12.8 回收站的维护 ----------------------------------------------------------------------------------------- 102 2.13 reserved 机制 -------------------------------------------------------------------------------- 102 2.13.1 记录打开文件 ----------------------------------------------------------------------------------------- 103 2.13.2 reserved 机制数据结构 -------------------------------------------------------------------------------103 2.13.3 META 系统 --------------------------------------------------------------------------------------------- 104 2.13.4 文件信息的获取 -------------------------------------------------------------------------------------- 105 2.13.5 文件保持和释放 -------------------------------------------------------------------------------------- 105 2.13.6 reserved 维护 ------------------------------------------------------------------------------------------- 105 2.14 DCM 机制 ------------------------------------------------------------------------------------ 106 2.14.1 数据结构及初始化 ----------------------------------------------------------------------------------- 106 2.14.2 dcm_open ------------------------------------------------------------------------------------------------107 2.14.3 dcm_modify ---------------------------------------------------------------------------------------------108 2.14.4 总结 ------------------------------------------------------------------------------------------------------109 2.15 优化机制 ------------------------------------------------------------------------------------- 110 2.15.1 freenode 与位管理节点编号 ------------------------------------------------------------------------ 110 2.16 master 的容错恢复 --------------------------------------------------------------------------112 2.16.1 changelog 机制 ----------------------------------------------------------------------------------------- 113 2.16.2 mfsmetarestore 机制 -----------------------------------------------------------------------------------115 2.17 异地备份机制(自定义模块) ---------------------------------------------------------- 118 2.17.1 工作模型 ------------------------------------------------------------------------------------------------119 2.17.2 基本实现原理 ----------------------------------------------------------------------------------------- 121 2.17.3 冲突文件的产生与解决 -----------------------------------------------------------------------------123 2.17.4 备份文件副本数可控 --------------------------------------------------------------------------------124 2.17.5 新增配置参数说明 ----------------------------------------------------------------------------------- 125
2.17.6 测试 ------------------------------------------------------------------------------------------------------126 第三章chunkserver 块服务器工作原理-------------------------------------------------128 3.1 基本数据结构 --------------------------------------------------------------------------------- 129 3.1.1 块文件存储结构及命名规则 ------------------------------------------------------------------------ 129 3.1.2 块目录组织结构及配置文件 ------------------------------------------------------------------------ 130 3.1.3 块文件对应的数据结构 chunk ----------------------------------------------------------------------131 3.1.4 块目录对应的数据结构 folder ---------------------------------------------------------------------- 133 3.1.5 数据结构组织方式 -------------------------------------------------------------------------------------134 3.2 chunkserver 的初始化 -----------------------------------------------------------------------134 3.2.1 块文件管理初始化 -------------------------------------------------------------------------------------135 3.2.2 与 client&cs 通信模块初始化 ----------------------------------------------------------------------- 136 3.2.3 与 master 通信模块初始化 ---------------------------------------------------------------------------137 3.2.4 表格数据模块初始化 --------------------------------------------------------------------------------- 137 3.3 周期性数据结构维护 ------------------------------------------------------------------------137 3.3.1 周期性 chunk 维护 -------------------------------------------------------------------------------------138 3.3.2 周期性 folder 维护 -------------------------------------------------------------------------------------139 3.3.3 延时计数器维护 ----------------------------------------------------------------------------------------140 3.3.4 块目录操作状态维护 --------------------------------------------------------------------------------- 142 3.4 与 master 的消息交互 ---------------------------------------------------------------------- 142 3.4.1 消息交互数据结构及框架 --------------------------------------------------------------------------- 142 3.4.2 消息 CREATE -------------------------------------------------------------------------------------------143 3.4.3 消息 DELETE -------------------------------------------------------------------------------------------143 3.4.4 消息 DUPLICATE --------------------------------------------------------------------------------------144 3.4.5 消息 SET_VERSION ----------------------------------------------------------------------------------145 3.4.6 消息 REPLICATE -------------------------------------------------------------------------------------- 146 3.4.7 消息 TRUNCATE -------------------------------------------------------------------------------------- 147 3.4.8 消息 DUPTRUNC --------------------------------------------------------------------------------------148 3.4.9 消息 REGISTER ----------------------------------------------------------------------------------------148 3.4.10 信息反馈 ------------------------------------------------------------------------------------------------149 3.5 线程池机制 ------------------------------------------------------------------------------------149 3.5.1 数据结构 ------------------------------------------------------------------------------------------------- 149 3.5.2 基本操作函数 -------------------------------------------------------------------------------------------153 3.5.3 工作原理 ------------------------------------------------------------------------------------------------- 154 3.5.4 总结 ------------------------------------------------------------------------------------------------------- 157 3.6 与 client/cs 的消息交互 --------------------------------------------------------------------- 157 3.6.1 消息交互数据结构及框架 --------------------------------------------------------------------------- 157 3.6.2 读块数据过程 -------------------------------------------------------------------------------------------159 3.6.3 单副本写块数据过程 --------------------------------------------------------------------------------- 163 3.6.4 多副本写块数据过程 --------------------------------------------------------------------------------- 166 3.6.5 读/写操作阶段状态转换 ----------------------------------------------------------------------------- 169 3.6.6 总结 ------------------------------------------------------------------------------------------------------- 172
第四章metalogger 备份服务器工作原理----------------------------------------------- 173 4.1 metalogger 的初始化 ------------------------------------------------------------------------ 173 4.2 与 master 的消息交互 ---------------------------------------------------------------------- 175 4.3 metalogger 实时接收日志消息 -------------------------------------------------------------176 4.4 metalogger 定期下载元数据的过程 -------------------------------------------------------176 4.5 metalogger 定期下载 session 文件的过程 ----------------------------------------------- 178 4.6 总结 ---------------------------------------------------------------------------------------------178 第五章client 客户端工作原理-------------------------------------------------------------178 5.1 mfsmount 的工作原理 -----------------------------------------------------------------------178 5.2 mfstool 的工作原理 -------------------------------------------------------------------------- 202 5.2.1 mfsfilerepair ---------------------------------------------------------------------------------------------- 202
第一章 MooseFS 文件系统介绍 1.1 MooseFS 系统简介 MooseFS 是一个高容错性的分布式文件系统,它能够将资源分布存储于几台不同的物 理介质,对外只提供给用户一个访问接口。对它的操作与其它文件系统完全一样:  分层文件结构(目录树结构);  存储 POSIX 文件属性(权限、最后访问、修改时间);  支持特殊的文件(块文件夹、字符文件及管道和 socket );  软链接(文件名指向目标文件)及硬链接(不同的文件名指向同一块数据);  仅限于基于 IP 地址或密码来访问文件系统。 1.1.1 MoosFS 特点  高可靠性:数据可以被存储于几个不同的地方;  可扩展性:可以动态的添加计算机或磁盘来增加系统的容量产;  高可控性:系统能够设置删除文件的时间间隔;  可追溯性:能够根据文件的不同操作(写入/ 访问)生成文件快照。 1.1.2 MooseFS 的体系结构 MooseFS 体系结构包含以下四个模块,如图所示: 块服务器 块服务器 块服务器 < - r e p l i c a t i o n - > < - r e p l i c a t i o n - > <- data management status -> 主服务器 m e t a d a t a b a c k u p - > <-data transmission -> 客户端 客户端 备份服务器
 主服务器( master server ):它用来管理整个文件系统,用来存储每个文件的元数 据(包括文件大小、属性及存储位置,同时也包括的一些非规则性的文件,如目录、 socket 、管道及设备);  块服务器( chunk servers ):用于存储文件的服务器,同时它们之间可以同步数据;  备份服务器( metalogger servers ):用于存储元数据变化日志并周期性的下载元 数据文件;同时也可以替代管理服务器暂不能工作的情况;  客户端:用于访问 MooseFS 中的文件,采用 mfsmount 来与管理服务器进行交互 (接收或修改元数据文件)及与数据服务器交换真正的数据。 1.1.3 系统如何工作 在客户端上对挂载在 MooseFS 上的文件操作与的文件系统完全一样,操作系统内核将 文件操作传输至 FUSE 模块,进而与 mfsmount 进程进行交互。 Mfsmount 进程通过网络 与管理服务器及数据服务器交互。整个过程对用户来说是完全透明的。 Mfsmount 每次与管理服务器交互,以下的操作文件元是必须的:  创建文件;  删除文件;  读取文件目录;  读取及改变属性;  改变文件大小;  开始读取或写入数据;  访问 MFSMETA 上的任何特殊文件。 mfsmount 直接连接到数据服务器,用于存储相关片段的文件。当写入一个文件时,写 入过程完成后,管理服务器会接收从 mfsmount 发送回来的信息,用于更新文件的长度及 最后的修改时间。 此外,数据服务器间能够相互复制数据,以达到将数据文件存储在不同机器上的目的。 1.1.4 容错性 系统 管理员可以通过管理命令将数据文件拷贝至不同的数据服务器上。设置多于一台 数据服务器的目标将有利于提高系统的容错性。多份数据文件的存储有利于消除单一数据服 务器宕机或网络延迟带来的灾难。 当采用 mfssetgoal 的目标数为 1 时,会将数据文件存储在系统中的单一数据服务器 中。当有重要数据时,可以将该目标值设置大于 2 ,它能够有效的防止因系统宕机而带来 数据无法访问的后果。当然了目标数的设定不能多于数据服务器的数目,否则将无法将数据 保存到预定数目的服务器中。当有一个服务器已经存储满时,它将无法再容纳数据存储,在 这种情况下,需要重新挂载一台数据服务器,才能够满足预期的目标数。如果有一台数据服 务器临时无法访问或网络出现问题,由于之前数据文件至少有两份以上的备份,客户端可以 从其它服务器上进行有效访问。 新的数据服务器能够随时挂载到系统中,同时新的存储容量也会立即生效,用来存储新 文件或从其它数据服务器复制备份文件。管理工具能够查询文件系统中的状态以及是否在目 标值设定的范围之前内,工具也能够用来改变目标值的设置。客户端(运行 mfsmount 进
分享到:
收藏