博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mfs分布式文件系统
阅读量:2348 次
发布时间:2019-05-10

本文共 11521 字,大约阅读时间需要 38 分钟。

一、MFS具有容错功能,高可用,可扩展的功能。MFS把数据分散在多台服务器上,但用户看到的只是一个源。

  • 工作原理

1、分布式原理

分布式文件系统就是把一些分散在多台计算机上的共享文件夹,集合到一个共享文件夹内,用户要访问这些文件夹的时候,只要打开一个文件夹,就可以的看到所有链接到此文件夹内的共享文件夹。

2、MFS原理

MFS是一个具有容错性的网络分布式文件系统,它把数据分散存放在多个物理服务器上,而呈现给用户的则是一个统一的资源。

3、MFS的组成

  • 元数据服务器(Master):在整个体系中负责管理文件系统,维护元数据,目前不支持高可用。
  • 元数据日志服务器(MetaLogger):备份Master服务器的变化日志文件,当master服务器损坏,可以从日志服务器中取得文件恢复。
  • 数据存储服务器(Chunk Server):真正存储数据的服务器,服务器越多,容量就越大,可靠性越高,性能越好。
  • 客户端(Client): 可以像挂载NFS一样 挂载MFS文件系统(通过 fuse 内核接口挂载进程管理服务器上所管理的数据存储服务器共享出的硬盘。)

4、mfs的读写处理过程

  • MFS读数据的处理过程
  1. 客户端向元数据服务器发出读请求
  2. 元数据服务器把所需数据存放的位置(Chunk Server的IP地址和Chunk编号)告知客户端
  3. 客户端向已知的Chunk Server请求发送数据
  4. Chunk Server向客户端发送数据
  • 写入的过程
  1. 客户端向元数据服务器发送写入请求
  2. 元数据服务器与Chunk Server进行交互,但元数据服务器只在某些服务器创建新的分块Chunks,创建成功后由Chunk Servers告知元数据服务器操作成功
  3. 元数据服务器告知客户端,可以在哪个Chunk Server的哪些Chunks写入数据
  4. 客户端向指定的Chunk Server写入数据
  5. 该Chunk Server与其他Chunk Server进行数据同步,同步成功后Chunk Server告知客户端数据写入成功
  6. 客户端告知元数据服务器本次写入完毕

二、环境

主机 os IP地址 主要软件
master centos6.5 192.168.1.10

mfs-1.6.27-5.tar.gz

 

Metalogger centos6.5 192.168.1.11

mfs-1.6.27-5.tar.gz

 

chunks server centos6.5 192.168.1.12

mfs-1.6.27-5.tar.gz

chunk2 server centos6.5 192.168.1.13

mfs-1.6.27-5.tar.gz

client centos6.5 192.168.1.14

fuse-2.9.2.tar.gz

三、搭建master server

yum -y install zlib-develuseradd mfs -s /sbin/nologintar zxf mfs-1.6.27-5.tar.gzcd mfs-1.6.27./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount && make && make install注:prefix=/usr/local/mfs 			//指定安装目录--with-default-user=mfs 			//指定程序运行用户--with-default-group=mfs 			//指定程序运行组--disable-mfschunkserver  		//禁用Chunk功能--disable-mfsmount    		//禁用mfsmount功能ls -lh /usr/local/    #安装完成生成的目录drwxr-xr-x 2 root root 4096 Dec  3 11:24 bin       #客户端工具drwxr-xr-x 3 root root 4096 Dec  3 11:24 etc       #服务器的配置文件都放在该目录中 drwxr-xr-x 2 root root 4096 Dec  3 11:24 sbin      #服务端启动程序。如:元数据服务器端程序 mfsmaster、数据存储服务器端服务程序mfschunkserver drwxr-xr-x 4 root root 4096 Dec  3 11:24 share     #文档 drwxr-xr-x 3 root root 4096 Dec  3 11:24 var       #元数据目录(可在配置文件中自定义到其他目录)cd /usr/local/mfs/etc/mfs/   #复制mfs生成的配置文件cp mfsexports.cfg.dist mfsexports.cfg   #配挂载目录及访问权限cp mfsmaster.cfg.dist mfsmaster.cfg     #主配置文件cp mfstopology.cfg.dist mfstopology.cfg #元数据logcd /usr/local/mfs/var/mfs/cp metadata.mfs.empty metadata.mfs    #首次安装 master 时,会自动生成一个名为 metadata.mfs.empty 的元数据文件 metadata,该文件是空的。MooseFS master 运必须有文件 metadata.mfs/usr/local/mfs/sbin/mfsmaster -s   #-s 表示停止服务/usr/local/mfs/sbin/mfsmaster start 3启动服务netstat -anpt | grep mfstcp        0      0 0.0.0.0:9419         0.0.0.0:*                   LISTEN      49618/mfsmaster     tcp        0      0 0.0.0.0:9420         0.0.0.0:*                   LISTEN      49618/mfsmaster     tcp        0      0 0.0.0.0:9421         0.0.0.0:*                   LISTEN      49618/mfsmaster  注:master 会打开 9420 端口等待 mfschunkserver 数据存储服务器连接echo "/usr/local/mfs/sbin/mfsmaster start" >> /etc/rc.local chmod +x /etc/rc.localll /usr/local/mfs/var/mfs/         //查看生成的日志文件-rw-r----- 1 mfs mfs     95 Dec 24 14:30 metadata.mfs-rw-r----- 1 mfs mfs     95 Dec 24 14:28 metadata.mfs.back.1-rw-r--r-- 1 mfs mfs      8 Dec 24 14:13 metadata.mfs.empty-rw-r----- 1 mfs mfs     10 Dec 24 14:28 sessions.mfs-rw-r----- 1 mfs mfs 762516 Dec 24 14:30 stats.mfsiptables -I INPUT -p tcp --dport 9419 -j ACCEPTiptables -I INPUT -p tcp --dport 9420 -j ACCEPTiptables -I INPUT -p tcp --dport 9421 -j ACCEPTservice iptables save
mfsmaster.cfg常用的参数如下,默认全部都是不需要修改的,全文都是以#开头,也就是说都是默认配置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 lockfilevim  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文件的解释,默认就是最好的,不需要做任任何修改。

搭建Metalogger

yum -y install zlib-develuseradd mfs -s /sbin/nologintar zxf mfs-1.6.27-5.tar.gzcd mfs-1.6.27./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount && make && make installcd /usr/local/mfs/etc/mfs/cp mfsmetalogger.cfg.dist mfsmetalogger.cfgvim mfsmetalogger.cfg   #修改 		MASTER_HOST = 192.168.1.1#MASTER_HOST,这个文件中需要修改的是 MASTER_HOST 变量,这个变量的值是 MASTER SERVER 的 IP 地址 chown -R mfs:mfs /usr/local/mfs/echo "/usr/local/mfs/sbin/mfsmetalogger start" >> /etc/rc.local/usr/local/mfs/sbin/mfsmetalogger start   #启动元数据日志服务器 netstat -antp | grep 9419lsof -i :9419COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAMEmfsmaster 49647  mfs    8u  IPv4  58608      0t0  TCP *:9419 (LISTEN)mfsmaster 49647  mfs   11u  IPv4  63142      0t0  TCP xuegod63.cn:9419->xuegod63.cn:47563 (ESTABLISHED)mfsmetalo 54672  mfs    8u  IPv4  63141      0t0  TCP xuegod63.cn:47563->xuegod63.cn:9419 (ESTABLISHED)iptables -I INPUT -p tcp --dport 9419 -j ACCEPT #配置防护墙策略service iptables save

搭建chunk server(注chunk配置都一样)

#在chunkserver1yum -y install zlib-develuseradd mfs -s /sbin/nologincd mfs-1.6.27./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs  --disable-mfsmount --disable-mfsmaster && make && make installcd /usr/local/mfs/etc/mfs/cp mfschunkserver.cfg.dist mfschunkserver.cfg  #主配置文件cp mfshdd.cfg.dist mfshdd.cfg    #使用的磁盘空间配置文件vim mfschunkserver.cfg		MASTER_HOST = 192.168.1.1  #元数据服务器的名称或地址,可以是主机名,也可以是 ip 地址        MASTER_PORT = 9420          #可以启用它,也可以不启用,不启用,默认就是9420vim mfshdd.cfg  /data    #在这里/data 是一个给 mfs 的分区,但在生产环境是一个独立的磁盘的挂载目录 mkdir /datachown -R mfs:mfs /dataps -ef | grep mfs/usr/local/mfs/sbin/mfschunkserver startecho "/usr/local/mfs/sbin/mfschunkserver start" >> /etc/rc.local chmod +x /etc/rc.localiptables -I INPUT -p tcp --dport 9422 -j ACCEPTservice iptables save在chunk2yum -y install zlib-develuseradd mfs -s /sbin/nologincd mfs-1.6.27./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs  --disable-mfsmount --disable-mfsmaster && make && make installcd /usr/local/mfs/etc/mfs/ cp mfschunkserver.cfg.dist mfschunkserver.cfg cp mfshdd.cfg.dist mfshdd.cfgvim mfschunkserver.cfg		MASTER_HOST = 192.168.1.1vim mfshdd.cfg  /datamkdir /datachown -R mfs:mfs /data/usr/local/mfs/sbin/mfschunkserver startps -ef | grep mfsiptables -I INPUT -p tcp --dport 9422 -j ACCEPTservice iptables save查看/data下的数据  #分块存储,人工无法认识滴

搭建client

yum -y install zlib-develuseradd mfs -s /sbin/nologintar zxf fuse-2.9.2.tar.gz tar zxf mfs-1.6.27-5.tar.gz cd fuse-2.9.2 ./configure && make && make installvim /etc/profileexport PATH=/usr/local/mfs/bin:$PATHexport PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATHsource /etc/profilecd ../mfs-1.6.27./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs  --enable-mfsmount --disable-mfschunkserver && make && make installmkdir /mnt/mfsmodprobe fuseecho "modprobe fuse" >> /etc/rc.local echo "/usr/local/mfs/bin/mfsmount /mnt/mfs -H 192.168.1.1" >> /etc/rc.local chmod +x /etc/rc.local/usr/local/mfs/bin/mfsmount /mnt/mfs/ -H 192.168.1.1  #将mfs共享出来的存储空间挂载到192.168.1.1的/ /mfs目录下 加-p数密码df -hT192.168.1.1:9421               fuse.mfs   77G     0   77G   0% /mnt/mfs/usr/local/mfs/bin/mfsgetgoal -r /mnt/mfs/mfssetgoal -r 1 /mnt/mfs/  #mfssetgoal用来设置文件被复制的分数,生产环境下Chunk server节点数量应大于cd /mnt/mfs/touch testmfsgetgoal test 分别打开两台chunk查看/data下,都产生了加密的数据,说明成功了

回收站

mfsrsettrashtime 600 /mnt/mfs/          //回收站清空时间,s计算,设置文件或目录的删除时间。一个删除的文件能够存放在“ 垃圾箱”中的时间称为隔离时间, 这个时间可以用mfsgettrashtime 命令来查看,用mfssettrashtime 命令来设置。单位为秒。单独安装或挂载MFSMETA 文件系统,它包含目录/ trash (包含仍然可以被还原的删除文件的信息)和/ trash/undel (用于获取文件)。把删除的文件,移到/ trash/undel下,就可以恢复此文件。在MFSMETA 的目录里,除了trash 和trash/undel 两个目录,还有第三个目录reserved,该目录内有已经删除的文件,但却被其他用户一直打开着。在用户关闭了这些被打开的文件后,reserved 目录中的文件将被删除,文件的数据也将被立即删除。此目录不能进行操作。mfsmaster配置文件#WORKING_USER = mfs               #运行master server 用户# WORKING_GROUP = mfs             #运行master server 组# SYSLOG_IDENT = mfsmaster        #master server 在syslog中的标识,说明是由master产生的# 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)# MATOCS_LISTEN_HOST = *                #metalogger 监听的ip地址(默认是*,代表任何ip)# MATOCS_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                #chunksde 回环频率(默认是:300秒)# CHUNKS_WRITE_REP_LIMIT = 1            #在一个循环里复制到一个chunkserver的最大chunk数目# CHUNKS_READ_REP_LIMIT = 5             #在一个循环里从一个chunkserver复制的最大chunk数目#CHUNKS_READ_REP_LIMIT = 0      弹出低于1.6.0的客户端挂接(0或1,默认是0mfs回收站部署及测试/在客户端创建目录并且赋权#mkdir /mfs/mfsmeta#cd /mfs#chown -R mfs:mfs mfsmeta   //挂载目录#/usr/bin/mfsmount -m /mfs/mfsmeta/ -H 192.168.0.11  //mfsmaster可以使用Master机IP#/usr/bin/mfsmount /mfs -H 192.168.0.11///查看挂载后的目录结构#cd /mfs/mfsmeta/#ll#cd trash#ll#cd undel开始删除并还原测试#cd /mfs/mfsmeta/#ll#rm -rf web#cd /mfs/mfsmeta/#cd trash#ls#mv 0000000F\|gagag undel#ls#cd /mfs

MFS监控

mfscgiserv是用python编写的一个web服务器,其监听端口是9425,可以再masster server 上通过 /usr/local/mfs/sbin/mfscgiserv来启动,用户利用览器就可以完全监控所有客户挂接、Chunk server、Master server等在一台客户端上通过览器访问http://192.168.1.1:9425

在master开启mfs监控/usr/local/mfs/sbin/mfscgiserv iptables -I INPUT -p tcp --dport 9425 -j ACCEPT在一台客户端上通过浏览器访问http://192.168.1.1:9425

灾难恢复

           MFS维护及灾难恢复

1)MFS集群的启动与停止

  •        MFS集群的启动顺序如下

(1)启动mfsmaster进程

(2)启动所有的mfsChunkserver进程

(3)启动mfsmetalogger进程

(4)在所有客户端上挂载NFS文件系统

  •    MFS集群的停止顺序如下

(1)在所有客户端卸载MFS挂载

(2)停止Chunkserver进程

(3)停止mfsmetalogger进程

(4)停止mfsmaster进程

转载地址:http://wzxvb.baihongyu.com/

你可能感兴趣的文章
Android Studio配置Debug和Release
查看>>
Android Studio 加载JNI与so文件
查看>>
Android Handler内存泄漏和解决方法
查看>>
Handler、Looper、MessageQueue、HandlerThread、ActivityThread、Message源码分析
查看>>
Android HandlerThread使用
查看>>
SQLite多线程操作数据库
查看>>
Android的category.LAUNCHER与installLocation设置失效问题
查看>>
2019/7/19每日新闻
查看>>
2019/7/22每日新闻
查看>>
2019/7/23每日新闻
查看>>
2019/7/24每日新闻
查看>>
2019/7/25每日新闻
查看>>
2019/7/26每日新闻
查看>>
2019/7/29每日新闻
查看>>
Android 7.0 APK升级
查看>>
2019/7/30每日新闻
查看>>
2019/8/1每日新闻
查看>>
2019/8/2每日新闻
查看>>
springboot新手脱坑
查看>>
Word在试图打开文件时遇到错误。 请尝试下列方法: 检查文档或驱动器的文件权限。 确保有足够的内存和磁盘空间。 用文本恢复转换器打开文件。
查看>>