MFS分布式文件系统

实验环境:

  在公司内部通过nfs方式共享一个服务器的存储空间,使得nfs服务器不堪重负,经常出现超时问题,为了提高整个系统的性能,所以采用mfs分布式文件系统,mfs分布式文件系统是一个具有容错功能、高可用、可扩展的海量级分布式文件系统,mfs把数据分散在多台服务器中,但用户看到的只有一个源。

wKiom1gtde2jygBYAAFYHRkkKOY634.jpg-wh_50

实验原理:

MFS读取数据的处理过程:

1.clientmaster请求读数据

2.master把所需数据存放的位置(chunk-serveripchunks编号)告知client

3.clientchunk-server请求发送数据

4.chunk-serverclient发送数据

MFS写入数据的处理过程:

1.clientmaster发送写请求

2.masterchunk-server交互,确认能提供写入数据的chunk-server及其chunks编号

3.master将确认好的chunk-serveripchunks编号发给client

4.client将数据写入到chunk-serverchunks编号的磁盘上

5.chunk-server与其他chunk-server进行数据同步,成功后告知client写入成功

6.client告知master写入结束

实验步骤:

1.搭建元数据服务器mster server192.168.100.157

yum -y install zlib-devel                   安装依赖包

useradd -s /sbin/nologin mfs                   创建用户

wget ftp://ftp.linuxfan.cn/tools/mfs-1.6.27-5.tar.gz           下载源码包

tar zxf mfs-1.6.27-5.tar.gz                      解压

cd mfs-1.6.27           

./configure --prefix=/usr/local/mfs--with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver--disable-mfsmount                编译安装

make &&make install

cd /usr/local/mfs/etc/mfs/                                   cd到配置文件目录

cp mfsmaster.cfg.dist mfsmaster.cfg                  复制主配置文件,无需更改

cp mfsexports.cfg.dist mfsexports.cfg                复制被挂载目录及权限配置文件

cp mfstopology.cfg.dist mfstopology.cfg                复制配置文件

cd /usr/local/mfs/var/mfs/

cp metadata.mfs.empty metadata.mfs               复制配置文件

ls

/usr/local/mfs/sbin/mfsmaster start                      启动masterserver

netstat -utpln |grep mfs                        查看其端口

##关闭mfsmaster使用/usr/local/mfs/sbin/mfsmaster -s       关闭masterserver

 

 

2.搭建元数据日志服务器metalogger192.168.100.156

yum -y install zlib-devel                               

useradd -s /sbin/nologin mfs

wgetftp://ftp.linuxfan.cn/tools/mfs-1.6.27-5.tar.gz

tar zxf mfs-1.6.27-5.tar.gz

cd mfs-1.6.27

./configure --prefix=/usr/local/mfs--with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver--disable-mfsmount

make &&make install

cd /usr/local/mfs/etc/mfs/

cp mfsmetalogger.cfg.dist mfsmetalogger.cfg           复制配置文件

sed -i '/mfsmaster/a MASTER_HOST =192.168.100.157' mfsmetalogger.cfg   修改masterserver服务器的地址

vim mfsmetalogger.cfg          ##验证修改

/usr/local/mfs/sbin/mfsmetalogger start           启动服务,关闭服务将start换成-s

ps aux |grep mfs                 查看进程

 

3.搭建数据存储服务器chunk-server192.168.100.153-155

1chunk1192.168.100.155

yum -y install zlib-devel

useradd -s /sbin/nologin mfs

wgetftp://ftp.linuxfan.cn/tools/mfs-1.6.27-5.tar.gz

tar zxf mfs-1.6.27-5.tar.gz

cd mfs-1.6.27

./configure --prefix=/usr/local/mfs--with-default-user=mfs --with-default-group=mfs --disable-mfsmaster--disable-mfsmount

make &&make install

cd /usr/local/mfs/etc/mfs/

cp mfschunkserver.cfg.distmfschunkserver.cfg           复制主配置文件

cp mfshdd.cfg.dist mfshdd.cfg                复制挂载信息的配置文件

sed -i '/BIND_HOST/a MASTER_HOST =192.168.100.157' mfschunkserver.cfg        修改主配置文件中的masterserver

vim mfschunkserver.cfg                   验证

echo "/data" >>mfshdd.cfg                在挂载信息的配置文件中添加需要共享的目录,最好此目录是独立的磁盘或者分区

mkdir /data

chown -R mfs:mfs /data/         授权

/usr/local/mfs/sbin/mfschunkserverstart      启动服务,停止服务将start换成-s

ps aux |grep mfs                      查看进程

cd

编写脚本:方便别的数据存储服务器的配置

exit  ##重新登录

cat .bash_history>config_chunk_mfs.sh   ##将历史命令重定向到脚本中

vi config_chunk_mfs.sh   ##修改内容如下,注意删除两vim命令

#!/bin/bash

#by linuxfan.cn 2016.3.21

yum -y install zlib-devel

useradd -s /sbin/nologin mfs

wgetftp://ftp.linuxfan.cn/tools/mfs-1.6.27-5.tar.gz

tar zxf mfs-1.6.27-5.tar.gz

cd mfs-1.6.27

./configure --prefix=/usr/local/mfs--with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfsmount

make &&make install

cd /usr/local/mfs/etc/mfs/

cp mfschunkserver.cfg.distmfschunkserver.cfg

cp mfshdd.cfg.dist mfshdd.cfg

sed -i '/BIND_HOST/a MASTER_HOST =192.168.100.157' mfschunkserver.cfg

echo "/data" >>mfshdd.cfg

mkdir /data

chown -R mfs:mfs /data/

/usr/local/mfs/sbin/mfschunkserver start

ps aux |grep mfs

cd

:wq

2)配置chunk2chunk3192.168.100.154-153

scp root@192.168.100.155:/root/config_chunk_mfs.sh  ./     下载chunk1的脚本到本地

sh -x config_chunk_mfs.sh          执行脚本

 

4.配置client端口:192.168.100.152

yum -y install zlib-devel            

wgetftp://ftp.linuxfan.cn/tools/fuse-2.9.2.tar.gz                     mfs客户端依赖于FUSE

wgetftp://ftp.linuxfan.cn/tools/mfs-1.6.27-5.tar.gz

tar zxf fuse-2.9.2.tar.gz                   编译安装fuse

cd fuse-2.9.2

./configure &&make &&makeinstall

cd

echo "export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH">>/etc/profile 设置环境变量

source /etc/profile        加载环境变量

echo $PKG_CONFIG_PATH              查看环境变量

useradd -s /sbin/nologin mfs       创建用户

tar xf mfs-1.6.27-5.tar.gz      编译安装mfs

cd mfs-1.6.27

./configure --prefix=/usr/local/mfs--with-default-user=mfs --with-default-group=mfs --disable-mfsmaster--disable-mfschunkserver --enable-mfsmount

make &&make install

cd

mkdir /mnt/mfs      创建挂载点

modprobe fuse       加载fuse模块到内核

lsmod |grep fuse      查看模块

/usr/local/mfs/bin/mfsmount /mnt/mfs -H192.168.100.157     挂载mfs

df -h       查看挂载情况

echo "exportPATH=/usr/local/mfs/bin:$PATH" >>/etc/profile                  客户端安装完毕后,会生成/usr/local/mfs/bin/目录,为了方便使用mfs的命令,需要将其加入到环境变量中

source /etc/profile      加载环境变量

echo $PATH         查看环境变量

 

5.启用MFS监控:192.168.100.157

mfscgiserv是用python编写的web服务,监听端口9425

/usr/local/mfs/sbin/mfscgiserv         启动

netstat -utpln |grep 9425       查看端口

使用浏览器访问:http://192.168.100.157:9425

wKioL1gtdySgrSMnAAHKmhO-dfg224.png-wh_50

 

6.MFS-client客户端的使用:

sed -i '47aMANPATH  /usr/local/mfs/share/man'/etc/man.config   ##mfs的命令添加man帮助

man mfsmount   ##查看帮助

mfsgetgoal -r /mnt/mfs/        查看文件在存储服务器复制的份数, -r 表示递归

mfssetgoal -r 2 /mnt/mfs/   ##设置文件复制的份数,份数必须小于等于存储服务器的数量

cd /mnt/mfs/                   cd到挂载点

touch test                创建测试文件

mfsgetgoal test               查看测试文件复制几份

 

7.维护MFS及灾难恢复:

1MFS集群的启动与停止:

MFS的启动顺序:master元数据服务器-->chunkserver存储服务器-->metalogger元数据日志服务器-->client客户端

MFS停止的顺序:client(umount)客户端-->chunkserver(-s)存储服务器-->metalogger(-s)元数据日志服务器-->master(-s)元数据服务器

2)恢复master:新安装mfsmaster同样配置-->复制metalogger的配置文件-->合并元数据changelogs

scproot@192.168.100.156:/usr/local/mfs/var/mfs/* /usr/local/mfs/var/mfs/

/usr/local/mfs/sbin/mfsmetarestore -mmetadata_ml.mfs.back -o metadata.mfs chagelog_ml.*.mfs

注:若更换master元数据服务器,存储服务器和客户端需要重新更改master服务器的ip地址

3)若直接断电可能导致master有可能无法启动,可以在master上执行/usr/local/mfs/sbin/mfsmetarestore-a进行修复

 

重点:

  • mfs是一个具有容错性的网络分布式文件系统,他把数据分布在多台物理服务器中,而呈现给用户的则是一个源;

  • mfs文件系统的组成包括元数据服务器master、元数据日志服务器metalogger、数据存储服务器chunk server、客户端client

  • 元数据服务器master需要用到的配置文件有两个,分别是mfsmaster.cfgmfsexports.cfg

  • 在元数据服务器master发生故障时,可以从metalogger日志服务器中恢复master

  • 可以使用keepalived双机热备实现master服务器的高可用;

  • 注意在客户端在挂载点创建文件时,可以设置此文件在存储服务器的复制份数,若有两台存储服务器(每台的共享目录容量为10G),客户端数据复制两份,那么这两个存储服务器都会存在客户端创建的文件,此时两台存储服务器的容量就是10G;三台10G存储服务器时,客户端文件复制两份,那么存储的总容量就是20G

扩展:

http://www.open-open.com/lib/view/open1375192526108.html   对比文件系统的区别

自主学习:

1.模拟一台数据存储服务器宕机,测试mfs文件系统;

2.实时增加一台数据存储服务器,验证mfs扩容结果;

3.模拟master发生故障,从metalogger中恢复master