目前开源的几种分布式文件系统 :

1、 MooseFS易用,稳定,对小文件很高效。 

2、 MogileFS 据说对于 Web 2.0 应用存储图片啥的很好。 

3、 GlusterFS 感觉广告宣传做的比产品本身好。 

4、 OpenAFS/Coda 是很有特色的东西。 

5、 Lustre 复杂,高效,适合大型集群。 

6、 PVFS2 搭配定制应用会很好,据说曙光的并行文件系统就是基于 PVFS。 

以上评价,非个人评价,是从CHINAUNIX中,一些人总结的。在此借鉴一下。 

简单介绍MOOSEFS工作原理:

1.1 MFS文件系统结构 

管理服务器 

managing server (master) 

负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复.多节点拷贝 

元数据日志服务器 

Metalogger server(Metalogger) 

负责备份master 服务器的变化日志文件,文件类型为changelog_ml.*.mfs ,以便于在master server 出问题的时候接替其进行工作 

数据存储服务器 

data servers (chunkservers) 

负责连接管理服务器,听从管理服务器调度,提供存储空间,并为客户提供数据传输. 

客户机挂载使用 

client computers 

通过fuse 内核接口挂接远程管理服务器上所管理的数据存储服务器,.看起来共享的文件系统和本地unix 文件系统使用一样的效果.

1.2 MFS基础网络拓扑图 

MFS分布式文件系统_第1张图片

 

 

实验环境 

 

 

本次实验均在VMWARE虚拟机下进行实验
1、 机器配置
内存:256M
CPU:单核
2、 虚拟机数量 4台
3、 操作系统:RedHat 5.4 内核版本:2.6.18
4、 MFS版本: mfs-1.6.10
5、使用其他补丁的版本: fuse-2.8.3

 

安装流程 

MFS-MASTER安装 

1、 MFS-MASTER安装 

a) 下载源码包 

wget http://pro.hit.gemius.pl/hitredir/id=1007_2OM3IJvULucytAjEoZifZuFnMc7hqxV5WTnaEn.P7/url=moosefs.com/tl_files/mfscode/mfs-1.6.14.tar.gz 

b) tar zxvf mfs-1.6.14.tar.gz 
c) useradd mfs -s /sbin/nologin 
d) ./configure --prefix=/usr/local/mfs --with-default-user=mfs 
--with-default-group=mfs 
e) make ; make install 
f) cd /usr/local/mfs/etc 
g) cp mfsmaster.cfg.dist mfsmaster.cfg 
h) cp mfsexports.cfg.dist mfsexports.cfg 
2、MFS-MASTER配置 
a) 默认配置文件不做任何修改,即可以启动MFS-MASTER端 
b) 简单介绍配置文件的具体参数 
WORKING_USER = mfs 运行master server 的用户 
WORKING_GROUP = mfs 运行master server 的用户组 
SYSLOG_IDENT = mfsmaster master server 在syslog中的标识,说明是由master serve 产生的 
LOCK_MEMORY = 0 是否执行mlockall()以避免mfsmaster 进程溢出(默认为0) 
NICE_LEVEL = -19 运行的优先级(如果可以默认是-19; 注意: 进程必须是用root启动 
EXPORTS_FILENAME = /usr/local/mfs/etc/mfsexports.cfg 被挂接目录权限配置文件 
DATA_PATH = /usr/local/mfs/var/mfs 数据存放路径,此目录下大致有三类文件,changelog,sessions和stats; 
BACK_LOGS = 50 metadata 的改变log 文件数目(默认是50) 
REPLICATIONS_DELAY_INIT = 300 延迟复制的时间(默认是300s); 
REPLICATIONS_DELAY_DISCONNECT = 3600 chunkserver 断开的复制延迟(默认是3600); 
MATOML_LISTEN_HOST = * metalogger 监听的IP 地址(默认是*,代表任何IP); 
MATOML_LISTEN_PORT = 9419 metalogger 监听的端口地址(默认是9419); 
MATOCS_LISTEN_HOST = * 用于chunkserver 连接的IP 地址(默认是*,代表任何IP); 
MATOCS_LISTEN_PORT = 9420 用于chunkserver 连接的端口地址(默认是9420); 
MATOCU_LISTEN_HOST = * 用于客户端挂接连接的IP 地址(默认是*,代表任何IP); 
MATOCU_LISTEN_PORT = 9421 用于客户端挂接连接的端口地址(默认是9421); 
CHUNKS_LOOP_TIME = 300 chunks 的回环频率(默认是:300 秒); 
原文:在几秒钟内循环次数 
CHUNKS_DEL_LIMIT = 100 在一个loop设备中可以删除chunks的最大数 (默认:100) 
CHUNKS_WRITE_REP_LIMIT = 1 在一个循环里复制到一个chunkserver 的最大chunk数目(默认是1) 
CHUNKS_READ_REP_LIMIT = 5 在一个循环里从一个chunkserver 复制的最大chunk数目(默认是5) 
REJECT_OLD_CLIENTS = 0 弹出低于1.6.0 的客户端挂接(0 或1,默认是0) 
注意mfsexports 访问控制对于那些老客户是没用的 
LOCK_FILE=/var/run/mfs/mfsmaster.lock 避免启动多次启动同一个守护进程.
c) vi mfsexports.cfg 
192.168.198.0/24 / rw 
192.168.1.0/24 / rw,alldirs,maproot=0,password=passcode 
10.0.0.0-10.0.0.5 /test rw,maproot=nobody,password=test
第一部分:客户端的ip 地址 
第二部分:被挂接的目录 
第三部分:客户端拥有的权限
第二部分说明 :/ 标识MooseFS 根 
第三部分详细说明 :
ro 只读模式共享 ,rw 读写的方式共享 ,alldirs 允许挂载任何指定的子目录 ,maproot映射为root,还是指定的用户(0表示ROOT),password 指定客户端密码
d) 启动MFS-MASTER 
/usr/local/mfs/sbin/mfsmaster start 
关闭MFS-MASTER 
/usr/local/mfs/sbin/mfsmaster -s 
e) 首次启动会提示缺少元数据 解决: 
cp /usr/local/mfs/var/mfs/metadata.mfs.empty /usr/local/mfs/var/mfs/metadata.mfs 
f) 再次启动MFSMASTER 
g) 检查是否启动成功 
 netstat –nlp 
 ps –ef|grep mfs 
i) 日志观察 
 tail –f /var/log/message
mfsmetalogger的安装  
1、 mfsmetalogger的安装 
a) ./configure --prefix=/usr/local/mfs --with-default-user=mfs 
--with-default-group=mfs 
b) make ; make install 
c) useradd mfs -s /sbin/nologin 
d) cd /usr/local/mfs/etc 
e) cp mfsmetalogger.cfg.dist mfsmetalogger.cfg 
2、 配置mfsmetalogger 
a) vi mfsmetalogger.cfg 
WORKING_USER =mfs 运行master server 的用户 
WORKING_GROUP = mfs 运行master server 的用户组 
SYSLOG_IDENT =mfsmetalogger mfsmetalogger在syslog中的标识,说明是mfsmetalogger 产生的 
LOCK_MEMORY = 0 是否执行mlockall()以避免mfsmaster 进程溢出(默认为0) 
NICE_LEVEL = -19 运行的优先级(如果可以默认是-19; 注意: 进程必须是用root启动 
DATA_PATH= /usr/local/mfs/var/mfs 数据存放路径 
BACK_LOGS = 50 metadata 的改变log 文件数目(默认是50) 
META_DOWNLOAD_FREQ = 24 元数据备份文件下载请求频率。默认为24小时,即每隔一天从元数据服务器 (MASTER)下载一个metadata.mfs.back 文件。当元数据服务器关闭或者出故障时,matedata.mfs.back 文件将消失,那么要恢复整个mfs,则需从metalogger 服务器取得该文件。请特别注意这个文件,它与日志文件一起,才能够恢复整个被损坏的分布式文件系统。 
MASTER_RECONNECTION_DELAY = 5 
MASTER_HOST = 192.168.198.60 MFS-MASTER的IP 
MASTER_PORT = 9419 MFS-MASTER的端口 
MASTER_TIMEOUT = 60 可能是用于下载文件超时的重试时间 
LOCK_FILE = /var/run/mfs/mfsmetalogger.lock 避免启动多次启动同一个守护进程 
b) 启动mfsmetalogger 
/usr/local/mfs/sbin/mfsmetalogger start 
关闭MFS-METALOGGER 
/usr/local/mfs/sbin/mfsmetalogger -s 
c) 检查是否启动成功 
 netstat –nlp 
 ps –ef|grep mfs 
d) 日志观察 
 tail –f /var/log/messag 
chunkserver的安装 
1、chunkserver的编译安装 
a) ./configure --prefix=/usr/local/mfs --with-default-user=mfs 
--with-default-group=mfs 
b) make ; make install 
c) useradd mfs -s /sbin/nologin 
d) cd /usr/local/mfs/etc 
e) cp mfschunkserver.cfg.dist mfschunkserver.cfg 
f) cp mfshdd.cfg.dist mfshdd.cfg 
2、 配置chunkserver 
a) vi mfschunkserver.cfg 
WORKING_USER = mfs 运行master server 的用户 
WORKING_GROUP = mfs 运行master server 的用户组 
DATA_PATH = /usr/local/mfs/var/mfs 数据存放路径 
LOCK_FILE = /var/run/mfs/mfschunkserver.lock 避免启动多次启动同一个守护进程 
SYSLOG_IDENT = mfschunkserver chunkserver在syslog中的标识,说明是chunkserver 产生 
#BACK_LOGS = 50 
MASTER_RECONNECTION_DELAY = 30 重新连接延时30秒 
MASTER_HOST = 192.168.198.60 元数据服务器的名称或地址,可以是主机名,也可以是ip 地址 
MASTER_PORT = 9420 MFS-MASTER的端口 
MASTER_TIMEOUT = 60 连接MASTER的超时时间 
CSSERV_LISTEN_HOST = * 数据复制服务器地址 
CSSERV_LISTEN_PORT = 9422 这个监听端口用于与其它数据存储服务器间的连接,通常是数据复制 
CSSERV_TIMEOUT = 60 数据复制的超时时间 
HDD_CONF_FILENAME = /usr/local/mfs/etc/mfshdd.cfg 分配给MFS 使用的磁盘空间配置文件的位置 
b) vi mfshdd.cfg   /hdd 在chunkserver端挂载点,就是chunkserver这个机器真实存在的目录 
c) 启动mfschunkserver 
/usr/local/mfs/sbin/mfschunkserver start 
关闭MFS-METALOGGER 
/usr/local/mfs/sbin/mfschunkserver –s 
d) 检查是否启动成功 
 netstat –nlp || ps –ef|grep mfs 
e) 日志观察 
 tail –f /var/log/messag 
MFS-CLIENT的安装 
1、 MFS-CLIENT的安装 
client必须安装FUSE,全称filesystem-userspace.
tar xzf fuse-2.8.3.tar.gz 
 ./configure && make && make install
vi /etc/profile 添加
export KG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
source /etc/profile
useradd mfs -s /sbin/nologin 
a) 编译安装 
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --enable-mfsmount && make && make install
b) 配置挂载点 
 mkdir /mnt/mfs 
 chown –R mfs:mfs /mnt/mfs 
 /usr/local/mfs/bin/mfsmount /mnt/mfs -H 192.168.198.60 -p 
 mfsmount参数说明 
 -H master的IP地址 
 -p master用于与客户端连接的端口 
  -S 挂载MASTER端根目录下的子目录,前提是必须通过挂载根目录后,创建相应的子目录,才可以挂载 
 c) 挂载时,默认提示输入密码,没有密码直接回车即可; 
 d) 验证是否成功
df -h 
   mfs#192.168.198.60:9421   14G     0   14G   0% /mnt/mfs
从垃圾箱恢复意外删除的文件 
通过-m这个参数挂载mfsmeta文件系统时,必须在MASTER端的mfsexports.cfg里,必须
打开如下内容的注释: 
* . rw 
客户端直接执行 
/usr/local/mfs/bin/mfsmount /mnt/mfsmeta -H 192.168.198.60 / -p –m 
注: 
a) /mnt/mfsmeta这个目录不需要执行chown –R mfs.mfs,直接在ROOT下创建该
目录 
b) 在这个目录下进行恢复意外删除文件的时候,必须使用ROOT账户进行操作 
c) 原来的位置下不能有一个已存在的与被删文件同名的文件,否则恢复不会成功。 

恢复流程: 
a) ./reserved ./trash 出现这两个目录 
b) ./trash下,有一个./undel的目录,还有一些被删除的以8位16进制命名的
目录,并且以"|"作为目录符号,再加上被删除文件名字。(如果文件名字大于
系统支持的255最大长度时,将从左到右进行裁剪,直到满足255) 
规则:00000009|1,1代表删除的文件。 
0000002E|123|tst 代表123目录下tst文件,如果123目录被一起删除,
恢复的时候123这个目录也会被一同恢复出来。 
c) 如果想恢复文件,把00000009|1该文件移动到/mnt/mfsmeta/trash/undel下,
文件即可恢复。 
d) ./reserved这个目录的作用是针对那些已被彻底删除但目前正被打开着的文
件。 
3、 垃圾箱相关设定 
垃圾箱文件保留期默认是1天,86400秒 
查看垃圾箱保留期时间 
/usr/local/mfs/bin/mfsgettrashtime /mnt/mfs 
执行效果: 
/mnt/mfs: 86400 
/usr/local/mfs/bin/mfssettrashtime 
设置垃圾箱保留期 
/usr/local/mfs/bin/mfssettrashtime 3600 /mnt/mfs 
执行效果: 
/mnt/mfs: 
inodes with trashtime changed: 3 
inodes with trashtime not changed: 0 
inodes with permission denied: 0 
参数说明: 
-r 表示递归修改这个目录下所有文件属性,不带-r表示修改本级目录。 
如果将时间设置为0,表示不启用垃圾箱功能。 
4、 设置文件拷贝份数 
查看文件设置拷贝份数 
/usr/local/mfs/bin/mfsgetgoal /mnt/mfs/123/123 
执行效果 
/mnt/mfs/123/123: 2 
查看文件拷贝具体信息 
/usr/local/mfs/bin/mfscheckfile /mnt/mfs/123/123 
执行效果 
/mnt/mfs/123/123: 
2 copies: 1 chunks 
查看文件拷贝具体信息 
/usr/local/mfs/bin/mfsfileinfo /mnt/mfs/123/123 
执行效果 
/mnt/mfs/123/123: 
 chunk 0: 000000000000001D_00000001 / (id:29 ver:1) 
 copy 1: 192.168.198.62:9422 
 copy 2: 192.168.198.64:9422 
注: 
a) 一个文件数据长度为零,并且也没有对此文件设置为0份拷贝的时候,这
个文件查看拷贝信息的时候,会出现如下:/mnt/mfs/123/123:(通俗一点
说,就是空文件无法获取到信息的。 
查看目录具体信息,等同于du -s 
/usr/local/mfs/bin/mfsdirinfo /mnt/mfs 
执行效果 
/mnt/mfs: 
 inodes: 3 文件总数 
 directories: 2 目录数 
 files: 1 文件数 
 chunks: 1 块数 
 length: 31 文件大小总和 
 size: 70656 块长度总和 
 realsize: 141312 磁盘空间的使用包括所有的拷贝 
设置文件拷贝份数 
 /usr/local/mfs/bin/mfssetgoal 2 /mnt/mfs 
 执行效果 
 /mnt/mfs: 
 inodes with goal changed: 3 
 inodes with goal not changed: 0 
 inodes with permission denied: 0 
参数说明 
 -r 表示递归修改这个目录下所有文件属性,不带-r表示修改本级目录。
注:
a) 拷贝份数尽量和chunkserver这个服务的数量保持一致,比较易于管理,数据
额安全性也得到保障。 
b) 上面这个命令产生的效果是:改变当前目录的属性,如果当前目录下已经存在
一些文件,这些已存在文件的拷贝属性不会发生变化,只有新建的文件才会按
照新的拷贝属性进行复制。 
c) 递归修改这个目录下所有文件的拷贝份数属性后,所有文件的拷贝份数的变化
需要一定的时间才会发生变化。