MFS学习总结jluzc.docx
《MFS学习总结jluzc.docx》由会员分享,可在线阅读,更多相关《MFS学习总结jluzc.docx(20页珍藏版)》请在冰豆网上搜索。
MFS学习总结jluzc
MFS学习总结
jluzc2012.11.13
∙MFS概述、特性和新版改进
∙MFS工作原理和设计架构
∙MFS的安装、部署、配置
∙MFS的高级特性
∙MFS的性能测试
∙MFS集群的维护
∙MFS的常见问题和建议对策
一、MFS概述、特性和新版改进
MooseFS是一个分布式存储的框架,其具有如下特性:
1.Free(GPL)
2.通用文件系统,不需要修改上层应用就可以使用(那些需要专门api的dfs很麻烦!
)。
3.可以在线扩容,体系架构可伸缩性极强。
(官方的case可以扩到70台了!
)
4.部署简单。
(sa们特别高兴,领导们特别happy!
)
5.高可用,可设置任意的文件冗余程度(提供比raid1+0更高的冗余级别,而绝对不会影响读或者写的性能,只会加速!
)
6.可回收在指定时间内删除的文件(“回收站”提供的是系统级别的服务,不怕误操作了,提供类似oralce的闪回等高级dbms的即时回滚特性!
)
7.提供netapp,emc,ibm等商业存储的snapshot特性。
(可以对整个文件甚至在正在写入的文件创建文件的快照)
8.googlefilesystem的一个c实现。
9.提供webgui监控接口。
10.提高随机读或写的效率(有待进一步证明)。
11.提高海量小文件的读写效率(有待进一步证明)。
MooseFS1.6版本改进:
∙修复1.5.x中在大批量操作时打开文件过多的bug。
报的错误说是打开的文件过多,造成chunkerserver的链接错误。
在1.6.x中解决此问题,就解决了很大的问题。
∙新增加了masterlogger服务器。
这是在1.5.x中所没有的,就是做了master服务器的冗余,进一步的加强的master服务器的稳定性。
在mfs体系中master是要求最稳定以及性能要求最高的,因此务必保证master的稳定。
∙修改1.5.x中存在的对于坏块的修复功能。
在mfs1.5.x中遇到chunker坏块校验,错误比较多的时候导致master将出现坏块的chunker自动的剔除出去的情况,此次增加了对坏块的修复功能,很方便的进行修复,简化对坏块的处理功能。
∙对metadata和changelog的新认识。
之前认为changelog记录的是文件的操作,定期的像数据库的日志一样归档到metadata中。
发现上面的理解存在误区,真正的是changelog中记录了对文件的操作,metadata记录文件的大小和位置。
因此metadata是比较重要的,在进行修复的过程中是采用metadata和最后一次的changelog进行修复的。
∙MFS文档中明确指出对于内存和磁盘大小的要求。
∙指出了在测试的过程中多个chunker并不影响写的速度,但是能加快读的速度。
在原来的基础上增加一个chunker时,数据会自动同步到新增的chunker上以达到数据的平衡和均衡。
二、MFS工作原理和设计架构
角色
角色作用
管理服务器
managingserver(master)
负责各个数据存储服务器的管理,文件读写调
度,文件空间回收以及恢复.多节点拷贝
元数据日志服务器
Metaloggerserver(Metalogger)
负责备份master服务器的变化日志文件,文
件类型为changelog_ml.*.mfs,以便于在
masterserver出问题的时候接替其进行工作
数据存储服务器
dataservers(chunkservers)
负责连接管理服务器,听从管理服务器调度,
提供存储空间,并为客户提供数据传输.
客户机挂载使用
clientcomputers
通过fuse内核接口挂接远程管理服务器上所
管理的数据存储服务器,.看起来共享的文件
系统和本地unix文件系统使用一样的效果.
官方的网络示意图是这样的:
读写原理:
MFS的读数据过程
1.client当需要一个数据时,首先向masterserver发起查询请求;
2.管理服务器检索自己的数据,获取到数据所在的可用数据服务器位置ip|port|chunkid;
3.管理服务器将数据服务器的地址发送给客户端;
4.客户端向具体的数据服务器发起数据获取请求;
5.数据服务器将数据发送给客户端;
MFS的写数据过程
1.当客户端有数据写需求时,首先向管理服务器提供文件元数据信息请求存储地址(元数据信息如:
文件名|大小|份数等);
2.管理服务器根据写文件的元数据信息,到数据服务器创建新的数据块;
3.数据服务器返回创建成功的消息;
4.管理服务器将数据服务器的地址返回给客户端(chunkIP|port|chunkid);
5.客户端向数据服务器写数据;
6.数据服务器返回给客户端写成功的消息;
7.客户端将此次写完成结束信号和一些信息发送到管理服务器来更新文件的长度和最后修改时间
MFS的删除文件过程
1.客户端有删除操作时,首先向Master发送删除信息;
2.Master定位到相应元数据信息进行删除,并将chunkserver上块的删除操作加入队列异步清理;
3.响应客户端删除成功的信号
MFS修改文件内容的过程
1.客户端有修改文件内容时,首先向Master发送操作信息;
2.Master申请新的块给.swp文件,
3.客户端关闭文件后,会向Master发送关闭信息;
4.Master会检测内容是否有更新,若有,则申请新的块存放更改后的文件,删除原有块和.swp文件块;
5.若无,则直接删除.swp文件块。
MFS重命名文件的过程
1.客户端重命名文件时,会向Master发送操作信息;
2.Master直接修改元数据信息中的文件名;返回重命名完成信息;
MFS遍历文件的过程
1.遍历文件不需要访问chunkserver,当有客户端遍历请求时,向Master发送操作信息;
2.Master返回相应元数据信息;
3.客户端接收到信息后显示
注:
∙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-FF256个目录循环,step为2)、chunk文件递增生成、大文件切分目录连续。
∙Chunkserver上的剩余存储空间要大于1GB(ReferenceGuide有提到),新的数据才会被允许写入,否则,你会看到Nospaceleftondevice的提示,实际中,测试发现当磁盘使用率达到95%左右的时候,就已经不行写入了,当时可用空间为1.9GB。
∙文件可以有多份copy,当goal为1时,文件会被随机存到一台chunkserver上,当goal的数大于1时,copy会由master调度保存到不同的chunkserver上,goal的大小不要超过chunkserver的数量,否则多出的copy,不会有chunkserver去存。
三、MFS的安装、部署、配置
测试环境:
IP
作用
192.168.0.1
masterserver
192.168.0.2
metaloggerserver
192.168.0.3
chunkserver
192.168.0.4
chunkserver
192.168.0.5
chunkserver
192.168.0.6
mfsclient
3.1 MasterServer
在192.168.0.1进行如下操作:
3.1.1安装:
$useraddmfs-s/sbin/nologin
$wgethttp:
//www.moosefs.org/tl_files/mfscode/mfs-1.6.20-2.tar.gz$tarzxvfmfs-1.6.20-2.tar.gz
$cdmfs-1.6.20-2/
$./configure--prefix=/usr/local/mfs--with-default-user=mfs--with-default-group=mfs--disable-mfschunkserver--disable-mfsmount
$make
$makeinstall
$cd/usr/local/mfs/etc
$cpmfsmaster.cfg.distmfsmaster.cfg#主配置文件
$cpmfsexports.cfg.distmfsexports.cfg#被挂接目录及权限配置
3.1.2配置:
$vi/usr/local/mfs/etc/mfsmaster.cfg
#WORKING_USER=mfs#运行masterserver的用户
#WORKING_GROUP=mfs#运行masterserver的组
#SYSLOG_IDENT=mfsmaster#masterserver在syslog中的标识,说明是由masterserve产生的
#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
#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)
注意:
∙凡是用#注释掉的变量均使用其默认值
∙修改DATA_PATH指定的目录要权限为mfs,chown-Rmfs:
mfs/usr/local/mfs/var/mfs
∙mfsexports访问控制对于那些老客户是没用的
∙注意开通监听的端口
$vi/usr/local/mfs/etc/mfsexports.cfg
#客户端IP允许挂载的目录客户端拥有的权限
192.168.0.0/24/rw,alldirs,maproot=0#/标识MFS的根
192.168.0.0/24.rw#.标识MFSMETA文件系统
地址可以指定的格式:
IP格式
说明
*
所有的ip地址
n.n.n.n
单个ip地址
n.n.n.n/b
IP网络地址/位数掩码
n.n.n.n/m.m.m.m
IP网络地址/子网掩码
f.f.f.f-t.t.t.t
IP段
权限说明:
权限
说明
ro
只读模式
rw
读写模式
alldirs
许挂载任何指定的子目录
maproot
映射为root,还是指定的用户
password
指定客户端密码
3.1.3 操作:
$/usr/local/mfs/sbin/mfsmaster[-vdu][-tlocktimeout][-ccfgfile][start|stop|restart|reload]#master服务操作
$/usr/local/mfs/sbin/mfscgiserv#启动WEBUI监控服务,访问http:
//192.168.0.1:
9425/
注意:
最好不要killmaster,安全停止执行mfsmasterstop,否则下次启动因metadata.mfs.back而出现问题,还需要使用备份来恢复。
文件说明:
$ls-l/usr/local/mfs/var/mfs#此目录见mfsmaster.cfg中DATA_PATH配置
metadata.mfs.back#MFS元数据信息,延迟将内存数据写入文件,默认频率1h,默认1d同步一次此文件到metaloggerserver
changelog.*.mfs#文件操作日志记录,实时记录、同步到metaloggerserver
sessions.mfs#客户操作状态记录
stats.mfs#?
3.1.4备注:
∙用户操作日志见:
changelog.*.mfs
∙进程产生的日志放到系统日志中:
/var/log/messages
∙Master可以单独启动,注意开通监听的端口
3.2 ChunkServer
在192.168.0.3-在192.168.0.5 进行如下操作
3.2.1安装:
$useraddmfs-s/sbin/nologin
$wgethttp:
//www.moosefs.org/tl_files/mfscode/mfs-1.6.20-2.tar.gz
$tarzxvfmfs-1.6.20-2.tar.gz
$cdmfs-1.6.20-2/
$./configure--prefix=/usr/local/mfs--with-default-user=mfs--with-default-group=mfs--disable-mfsmaster--disable-mfsmount
$make
$makeinstall
$cd/usr/local/mfs/etc
$cpmfschunkserver.cfg.distmfschunkserver.cfg#chunk配置文件
$cpmfshdd.cfg.distmfshdd.cfg#MFS使用空间配置
3.2.2配置:
$vi/usr/local/mfs/etc/mfschunkserver.cfg
#WORKING_USER=mfs
#WORKING_GROUP=mfs
#DATA_PATH=/usr/local/mfs/var/mfs
#LOCK_FILE=/var/run/mfs/mfschunkserver.pid
#SYSLOG_IDENT=mfschunkserver
#BACK_LOGS=50
#MASTER_RECONNECTION_DELAY=30
MASTER_HOST=192.168.0.1#元数据服务器的名称或地址,可以是主机名,也可以是ip地址
#MASTER_PORT=9420#为Matser中MATOCS_LISTEN_PORT指定的端口
#MASTER_TIMEOUT=60
#CSSERV_LISTEN_HOST=*
#CSSERV_LISTEN_PORT=9422这个监听端口用于与其它数据存储服务器间的连接,通常是数据复制
#CSSERV_TIMEOUT=60
#CSTOCS_TIMEOUT=60
#HDD_CONF_FILENAME=/usr/local/mfs/etc/mfshdd.cfg分配给MFS使用的磁盘空间配置文件的位置
注意:
∙MASTER_HOST不能为localhost或127.0.0.1,做单机测试的童鞋们注意了,要使用对外IP。
∙MASTER_PORT必须为元数据服务器配置中MATOCS_LISTEN_PORT指定的端口,且IP必须被master允许。
∙注意开通监控的端口(这里是9422)
$chown-Rmfs:
mfs/data#没有这一操作,会出现写权限问题,因进程是用mfs运行的。
$vi/usr/local/mfs/etc/mfshdd.cfg
/data
注意:
∙在这里/data是一个给mfs的分区,但在本机上是一个独立的目录,最好是一个单独的硬盘或者一个raid卷,最低要求是一个分区。
∙不要忘了更改目录的权限,因为mfschunkserver进程是用mfs运行的。
3.2.3操作
/usr/local/mfs/sbin/mfschunkserver[-vdu][-tlocktimeout][-ccfgfile][start|stop|restart|reload]#chunkserver操作命令
3.3MetaLoggerServer
在192.168.0.2上执行如下操作:
3.3.1安装:
同Master的安装步骤。
3.3.2配置:
$vi/usr/local/mfs/etc/mfsmetalogger.cfg
#WORKING_USER=mfs
#WORKING_GROUP=mfs
#SYSLOG_IDENT=mfsmetalogger
#LOCK_MEMORY=0
#NICE_LEVEL=-19
#DATA_PATH=/usr/local/mfs/var/mfs
#BACK_LOGS=50
#META_DOWNLOAD_FREQ=24元数据备份文件下载请求频率。
默认为24小时,即每隔一天从元数据服务器(MASTER)下载一个metadata.mfs.back文件。
当元数据服务器关闭或者出故障时,matedata.mfs.back文件将消失,那么要恢复整个mfs,则需从metalogger服务器取得该文件。
请特别注意这个文件,它与日志文件一起,才能够恢复整个被损坏的分布式文件系统。
#MASTER_RECONNECTION_DELAY=5
MASTER_HOST=192.168.0.1
#MASTER_PORT=9419
#MASTER_TIMEOUT=60
#deprecated,toberemovedinMooseFS1.7
#LOCK_FILE=/var/run/mfs/mfsmetalogger.lock
注意:
∙MASTER_HOST不能为localhost或127.0.0.1,做单机测试的童鞋们注意了,要使用对外IP。
∙MASTER_PORT必须为元数据服务器配置中MATOCS_LISTEN_PORT指定的端口,且IP必须被master允许。
3.3.3操作
/usr/local/mfs/sbin/mfsmetalogger[-vdu][-tlocktimeout][-ccfgfile][start|stop|restart|reload]#chunkserver操作命令
3.4MFSClient
在192.168.0.6上执行如下操作:
3.4.1FUSE安装:
$wget
$tarzxffuse-2.8.5.tar.gz
$cdfuse-2.8.5
$./configure
$make&&makeinstall
$echo'exportPKG_CONFIG_PATH=/usr/local/lib/pkgconfig:
$PKG_CONFIG_PATH'>>/etc/profile
$source/etc/profile
$lsmod|grepfuse#检查fuse是否加载到内核,若没有,执行下面命令
$modprobefuse&&lsmod|grepfuse#若将下列mfsmount挂载操作加入开机自启动,一定将modprobefuse也加入开机自启
注意:
∙一定要将fuse环境变量配置ok,否则安装mfsmount会装不上
∙若将下列mfsmount挂载操作加入开机自启动,一定将modprobefuse也加入开机自启,且在其执行之前执行。
3.4.2MFSMount安装:
$useraddmfs-s/sbin/nologin
$wgethttp:
//www.moosefs.org/tl_files/mfscode/mfs-1.6.20-2.tar.gz
$tarzxvfmfs-1.6.20-2.tar.gz
$cdmfs-1.6.20-2/
$./configure--prefix=/usr/local/mfs--with-default-user=mfs--with-default-group=mfs--disable-mfsmaster--