MFS分布式文件系统
第十一章MFS分布式文件系统前言:几台Web服务器通过NFS共享一个存储,在业务功能上满足需求,但在性能与容量上NFS无法胜任更高的要求。MFS即moosefs,可以提供容量FB级别的共享存储,无需昂贵的专业硬件服务器,自身拥有冗余功能及动态扩容功能,保证数据的安全性。本章将介绍MFS分布式文件系统的原理及环境搭建。
一、 工作原理1、分布式原理分布式文件系统就是把一些分散在多台计算机上的共享文件夹,集合到一个共享文件夹内,用户要访问这些文件夹的时候,只要打开一个文件夹,就可以的看到所有链接到此文件夹内的共享文件夹。2、MFS原理MFS是一个具有容错性的网络分布式文件系统,它把数据分散存放在多个物理服务器上,而呈现给用户的则是一个统一的资源。1) MFS的组成元数据服务器(Master):在整个体系中负责管理文件系统,维护元数据,目前不支持高可用。元数据日志服务器(MetaLogger):备份Master服务器的变化日志文件,当master服务器损坏,可以从日志服务器中取得文件恢复。数据存储服务器(Chunk Server):真正存储数据的服务器,服务器越多,容量就越大,可靠性越高,性能越好。客户端(Client): 可以像挂载NFS一样 挂载MFS文件系统2)MFS读数据的处理过程客户端向元数据服务器发出读请求元数据服务器把所需数据存放的位置(Chunk Server的IP地址和Chunk编号)告知客户端客户端向已知的Chunk Server请求发送数据Chunk Server向客户端发送数据3)写入的过程客户端向元数据服务器发送写入请求元数据服务器与Chunk Server进行交互,但元数据服务器只在某些服务器创建新的分块Chunks,创建成功后由ChunkServers告知元数据服务器操作成功元数据服务器告知客户端,可以在哪个Chunk Server的哪些Chunks写入数据客户端向指定的Chunk Server写入数据该Chunk Server与其他Chunk Server进行数据同步,同步成功后Chunk Server告知客户端数据写入成功客户端告知元数据服务器本次写入完毕二、 实验环境三、 实验步骤1、 搭建master server源码包的位置:http://sourceforge.net/projects/moosefs/files/moosefs/1.6.27/mfs-1.6.271)安装支持包2) 创建用户
3) 安装源码包--prefix=/usr/local/mfs //指定安装目录
--with-default-user=mfs //指定程序运行用户--with-default-group=mfs //指定程序运行组--disable-mfschunkserver //禁用Chunk功能--disable-mfsmount //禁用mfsmount功能4)复制文件(设置配置文件)# cp metadata.mfs.emptymetadata.mfs此文件存放master的变化信息5) 配置文件(下面的只是介绍一下,不用修改,默认就好)
需要用到两个配置文件:mfsmaster.cfg(主配置文件)和mfsexport.cfg(被挂载目录及访问权限)mfsmaster.cfg常用的参数如下,默认全部都是不需要修改的,全文都是以#开头,也就是说都是默认配置# cd /usr/local/mfs/etc/mfs/# vim mfsmaster.cfgWORKING_USER = mfs //运行masterserver的用户# WORKING_GROUP = mfs //运行masterserver的组# SYSLOG_IDENT = mfsmaster //masterserver在syslog的标示,说明是由masterserver产生的# LOCK_MEMORY = 0 //是否执行mlokall(),以避免mfsmaster进程溢出默认为0# NICE_LEVEL = -19 //运行的优先级,进程必须由root启动# EXPORTS_FILENAME = /usr/local/mfs/etc/mfs/mfsexports.cfg//被挂载目录及其权限控制文件的存放位置# TOPOLOGY_FILENAME = /usr/local/mfs/etc/mfs/mfstopology.cfg# DATA_PATH = /usr/local/mfs/var/mfs //数据存放路径# BACK_LOGS = 50 //metadata改变的log文件数目(默认是50)# BACK_META_KEEP_PREVIOUS = 1 # REPLICATIONS_DELAY_INIT = 300//延迟复制的时间(默认300)# REPLICATIONS_DELAY_DISCONNECT = 3600//Chunkserver断开复制延迟(默认是3600秒)# MATOML_LISTEN_HOST = * //metalogger监听的IP地址默认是所有地址# MATOML_LISTEN_PORT = 9419 //metalogger监听的端口地址(默认为9419)# MATOML_LOG_PRESERVE_SECONDS = 600# MATOCL_LISTEN_HOST = * //用于chunkserver连接的IP地址(默认为*代表所有IP)# MATOCL_LISTEN_PORT = 9421 //用户客户端挂在的监听端口9421# CHUNKS_LOOP_MAX_CPS = 100000# CHUNKS_LOOP_MIN_TIME = 300 //chunks的回环频率(默认300)# CHUNKS_SOFT_DEL_LIMIT = 10 # CHUNKS_HARD_DEL_LIMIT = 25# CHUNKS_WRITE_REP_LIMIT = 2 //在一个循环里复制到另外一个Chunkserver的最大Chunk数# CHUNKS_READ_REP_LIMIT = 10 //在一个循环里从一个Chunkserver复制的的最大Chunk数# ACCEPTABLE_DIFFERENCE = 0.1 # SESSION_SUSTAIN_TIME = 86400# REJECT_OLD_CLIENTS = 0 //弹出低于1.6.0的客户端挂接(0或1,默认是0)# deprecated:# CHUNKS_DEL_LIMIT - use CHUNKS_SOFT_DEL_LIMIT instead# LOCK_FILE - lock system has been changed, and this option is used only to search for old lockfile
mfsexport.cfg文件参数格式如下# Allow everything but "meta".* / rw,alldirs,maproot=0# Allow "meta".* . rw 该文件,每一个条目分为三个部分 第一部分:客户端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段目录部分的标示如下 /标示MFS根 .表示MFSMETA文件系统权限部分如下所示 ro——只读模式共享 rw——读写模式共享 alldirs——允许挂载任何指定的子目录 maproot——映射为root,还是普通用户 password——指定客户端的密码 以上就是对mfsmaster.cfg和mfsexport文件的解释,默认就是最好的,不需要做任任何修改。6) 启动master server7) 查看是否启动8)建立防火墙规则# iptables -I INPUT -p tcp --dport 9419 -j ACCEPT# iptables -I INPUT -p tcp --dport 9420 -j ACCEPT# iptables -I INPUT -p tcp --dport 9421 -j ACCEPT# service iptables save2、 搭建metalogger server
1)安装mfs(同上)2) 复制文件
3)修改配置文件,添加master服务器的ip地址(注意去掉注释和空格)4) 开启服务5)查看端口
# netstat -anpt | grep 9419tcp 0 0 192.168.1.2:50929 192.168.1.1:9419 ESTABLISHED 53533/mfsmetalogger# iptables -I INPUT -p tcp --dport 9419 -j ACCEPT# service iptables save
3、 搭建chunk server(二台chunk的搭建步骤相同)1) 安装mfs(同上)2) 复制文件3) 修改配置文件(一共2个)vim mfschunkserver.cfgvim mfshdd.cfg(添加/data)4) 建立文件夹并开启服务5) 开启例外端口# ps -ef | grep mfs //检查是否启动mfs 56269 10 20:54 ? 00:00:00 /usr/local/mfs/sbin/mfschunkserver startroot 56297487400 20:54 pts/0 00:00:00 grep mfs# iptables -I INPUT -p tcp --dport 9422 -j ACCEPT# service iptables save注意:第二台chunk的配置和上面的配置完全一样,这里就不在赘述了4、 客户端配置1) 安装fuseMFS(客户端依赖于FUSE)2) 设置环境变量添加下面这行exportPKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH3) 安装MFS客户端
4) 挂载文件系统创建挂载点并加载到内核5)设置文件被复制的份数并测试MFS客户端安装完毕后,会生成/usr/local/mfs/bin/目录,在这个目录下有很多命令是用户所需的。mfsgetgoal命令用来查看文件被复制的分数,利用-r命令可以对整个目录进行递归,goal是指文件比复制的分数。命令mfssetgoal用来设置文件被复制的分数,生产环境下Chunk server节点数量应大于2,文件副本数小于Chunkserver服务器的数量。由于我有二台Chunk server 我将副本数量设置为1在vim/etc/profile文件中增加一行(为了方便执行命令)然后source /etc/profile
设置查询文件被复制的份数:在/mnt/mfs中建立文件分别打开两台chunk查看/data下,都产生了加密的数据,说明成功了5、Mfscgiserv是用Python编写的一个web服务器,其监听端口为9425,可以在master上通过命令/usr/local/mfs/sbin/mfscgiserv来启动用户利用浏览器就可以全面掌握所有客户连接,Chunk server、master以及客户端操作。
6、 灾难恢复MFS维护及灾难恢复1)MFS集群的启动与停止MFS集群的启动顺序如下(1)启动mfsmaster进程(2)启动所有的mfsChunkserver进程(3)启动mfsmetalogger进程(4)在所有客户端上挂载NFS文件系统MFS集群的停止顺序如下(1)在所有客户端卸载MFS挂载(2)停止Chunkserver进程(3)停止mfsmetalogger进程(4)停止mfsmaster进程2)MFS灾难恢复整个MFS体系中,直接断电只有master server进程有可能无法启动,可以在master上使用命令/usr/local/mfs/sbin/mfsmetarestore-a修复启动失败:# /usr/local/mfs/sbin/mfsmaster startinit: file system manager failed !!!error occured during initialization - exiting修复:# /usr/local/mfs/sbin/mfsmetarestore -aloading objects (files,directories,etc.) ... okloading names ... okloading deletion timestamps ... okloading chunks data ... okchecking filesystem consistency ... okconnecting files and chunks ... okprogress: current change: 0 (first:0 - last:0 - 100% - ETA:finished)store metadata into file: /usr/local/mfs/var/mfs/metadata.mfs启动成功# /usr/local/mfs/sbin/mfsmasterstart3) 从MetaLogger中恢复我们将master server 直接断电(必须运行的时间够20分钟才可以断电,否则数据很有可能直接丢失) 补充说明:MFS元数据通常有两部分的数据,分别如下(1)主要元数据文件metadata.mfs,当mfsmaster运行时会被命名为metadata.back.mfs。(2)元数据改变日志 changelog.*.mfs,存储了过去N小时的文件变更。在Master 发生故障时,可以从MetaLogger中恢复,步骤如下(1)安装一台mfsmaster,利用同样的配置来配置这台mfsmaster,mfsmaster进程先不要启动(2)将metalogger上/usr/local/mfs/var/mfs/目录下所有文件复制到mfsmaster相应的目录中。# scp root@192.168.1.1:/usr/local/mfs/var/mfs/* /usr/local/mfs/var/mfs/利用mfsmetarestore命令合并元数据changelogs# /usr/local/mfs/sbin/mfsmetarestore-m metadata_ml.mfs.back -o metadata.mfs changelog_ml.*.mfsloading objects (files,directories,etc.) ... okloading names ... okloading deletion timestamps ... okloading chunks data ... okchecking filesystem consistency ... okconnecting files and chunks ... okchangelog_ml.0.mfs:1: version mismatch# /usr/local/mfs/sbin/mfsmasterstart# lsCeshi注意:如果是全新安装的master,恢复数据后,需要更改metalogger和chunkserver,配置MASTER_HOST的ip地址,客户端也需要重新挂载mfs目录。谢谢观看,真心的希望能帮到您!
页:
[1]