hgfre 发表于 2016-11-18 11:22:30

MFS分布式文件系统

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

实验原理:MFS读取数据的处理过程:
1.client向master请求读数据
2.master把所需数据存放的位置(chunk-server的ip及chunks编号)告知client
3.client向chunk-server请求发送数据
4.chunk-server给client发送数据
MFS写入数据的处理过程:
1.client向master发送写请求
2.master与chunk-server交互,确认能提供写入数据的chunk-server及其chunks编号
3.master将确认好的chunk-server的ip及chunks编号发给client
4.client将数据写入到chunk-server的chunks编号的磁盘上
5.chunk-server与其他chunk-server进行数据同步,成功后告知client写入成功
6.client告知master写入结束
实验步骤:1.搭建元数据服务器mster server:192.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.搭建元数据日志服务器metalogger:192.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-server:192.168.100.153-155
1)chunk1:192.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)配置chunk2及chunk3:192.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


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及灾难恢复:
1)MFS集群的启动与停止:
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.cfg和mfsexports.cfg;

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

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

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

扩展: 对比文件系统的区别
自主学习:1.模拟一台数据存储服务器宕机,测试mfs文件系统;
2.实时增加一台数据存储服务器,验证mfs扩容结果;
3.模拟master发生故障,从metalogger中恢复master;


页: [1]
查看完整版本: MFS分布式文件系统