传统NFS存储缺点分析:

  • 几台web服务器通过NFS共享一个存储,在业务功能上可以满足需求,但在性能与容量上,NFS无法胜任更高的要求,随着业务量的增加,经常出现超时的问题,而且NFS存在着单点故障的问题,尽管可以用rsync同步数据到另外一台服务器上做备份但对提高整个系统的性能并无帮助。

MFS:分布式文件系统介绍:


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


MFS是一个具有容错功能的,高可用,可扩展的海量级分布式文件系统;

MFS把数据分散在多台服务器上,单用户看到的只是一个源;

数据访问不再是一对多的关系,而是多对多,相较NFS性能大幅度提升;

包含了层级结构和文件属性,可以创建特殊的文件(块设备,字符设备,管道,套接字),符号链接和硬链接。

分布式原理:


  • 分布式文件系统(distributed file system)是指文件系统管理的物质存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。简单说就是把一些分布在局域网内各个计算机上的共享文件夹,集合到一个虚拟共享文件夹内,客户端访问只需要打开这个虚拟共享文件夹,就可以看到所有链接到虚拟共享文件夹内的共享文件,用户感觉不到这些共享文件是分散于各个计算机上的。 分布式文件系统的优点:集中访问、简化操作、数据容灾、提高了文件的存储性能。


MFS文件系统的组成:


  • 元数据服务器(Master):在整个体系中负责管理文件系统,维护元数据。


  • 元数据日志服务器(MetaLogger):备份Master服务器的变化日志文件,文件类型为changelog_ml.*.mfs 当Master服务器数据丢失或者损坏时,可以从日志服务器中取得进行恢复。

  • 数据存储服务器(Chunk server):真正存储数据的服务器。将文件分块保存,并相互进行复制。

  • 客户端(Client):可以像挂载NFS一样挂载MFS文件系统,其操作是相同的。

MFS文件系统的组成架构如下图所示:

14.jpg

MFS读取数据的处理过程:

  • 客户端向元数据服务器发出读请求;

  • 元数据服务器把所需数据存放的位置(Chunk server的IP地址和Chunk编号)告知客户端.

  • 客户端向已知的Chunk server请求发送数据。

  • Chunk server向客户端发送数据。

MFS写入数据的处理过程:


  • 客户端向元数据服务器发送写入请求。

  • 元数据服务器与Chunk server进行交互,但元数据服务器只在某些服务器创建新的分块Chunks,创建成功后由Chunk server告知元数据服务器操作成功。

  • 元数据服务器告知客户端,可以在哪个Chunk server的哪些Chunks写入数据。

  • 客户端向指定的Chunk server写入数据。

  • 该Chunk server与其他Chunk server进行数据同步,同步成功后Chunk server告知客户端数据写入成功。

  • 客户端告知元数据服务器本次写入完毕。

实验环境介绍

主机

IP地址

安装软件包

操作系统

Master Server

192.168.30.55

mfs-1.6.27-5.tar.gz

CentOS7

MetaLogger Server

192.168.30.10

mfs-1.6.27-5.tar.gz

CentOS7

Chunk Server1

192.168.30.4

mfs-1.6.27-5.tar.gz

CentOS7

Chunk Server2

192.168.30.5

mfs-1.6.27-5.tar.gz

CentOS7

Client

192.168.30.6

mfs-1.6.27-5.tar.gz,fuse-2.9.2.tar.gz

CentOS7

实验部署

首先分别在这几个实验主机上关闭防火墙,selinux

systemctl stop firewalld.service

setenforce 0

一,搭建Master Server

  • yum安装编译环境包

yum install -y zlib-devel gcc gcc-c++

  • 创建运行用户mfs

useradd mfs -s /sbin/nologin

  • 安装源码包

tar zxvf mfs-1.6.27-5.tar.gz     #解压源码包

cd mfs-1.6。27/

./configure \

--prefix=/usr/local/mfs \           #指定安装路径

--with-default-user=mfs \            #指定运行用户,组为mfs

--with-default-group=mfs \

--disable-mfschunkserver \           #关闭节点功能

--disable-mfsmount                         #关闭挂载

make && make install

  • 复制配置文件

在Master上需要用到的配置文件有两个:mfsmaster.cfg(主配置文件)和mfsexports.cfg(被挂载目录及权限配置文件)

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

cp mfsexports.cfg.dist mfsexports.cfg

cp mfsmaster.cfg.dist mfsmaster.cfg

cp mfsmetalogger.cfg.dist mfsmetalogger.cfg

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

cp metadata.mfs.empty metadata.mfs

1.jpg

不需要对配置文件做任何修改就可以开始工作

  • 启动Master Server

/usr/local/mfs/sbin/mfsmaster start 
ps aux | grep mfs


2.jpg

3.jpg

停止Master Server的命令

/usr/local/mfs/sbin/mfsmaster -s

二,搭建MetaLogger Server

  • yum安装编译环境包

yum install -y zlib-devel gcc gcc-c++

  • 创建运行用户mfs

useradd mfs -s /sbin/nologin

  • 安装源码包

tar zxvf mfs-1.6.27-5.tar.gz     #解压源码包

cd mfs-1.6。27/

./configure \

--prefix=/usr/local/mfs \           #指定安装路径

--with-default-user=mfs \            #指定运行用户,组为mfs

--with-default-group=mfs \

--disable-mfschunkserver \           #关闭节点功能

--disable-mfsmount                         #关闭挂载

make && make install

  • 复制配置文件

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

cp mfsmetalogger.cfg.dist mfsmetalogger.cfg

  • 修改配置文件

vi mfsmetalogger.cfg

..............

MASTER_HOST = 192.168.30.55

..................

4.jpg

  • 启动服务

/usr/local/mfs/sbin/mfsmetalogger start

5.jpg

三,搭建chunk Server(两台节点服务配置一样)

  • yum安装编译环境包

yum install -y zlib-devel gcc gcc-c++

  • 创建运行用户mfs

useradd mfs -s /sbin/nologin

  • 安装源码包

tar zxvf mfs-1.6.27-5.tar.gz     #解压源码包

cd mfs-1.6。27/

./configure \

--prefix=/usr/local/mfs \           #指定安装路径

--with-default-user=mfs \            #指定运行用户,组为mfs

--with-default-group=mfs \

--disable-mfsmaster \           #关闭master功能

--disable-mfsmount                         #关闭挂载

make && make install

  • 复制配置文件

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

cp mfschunkserver.cfg.dist mfschunkserver.cfg

cp mfshdd.cfg.dist mfshdd.cfg

6.jpg

  • 修改配置文件

vi mfschunkserver.cfg

MASTER_HOST = 192.168.30.55

7.jpg

  • 指定 MFS共享文件存储目录,

实际生产环境需要单独提供磁盘阵列作为专门的MFS存储目录,这里只是进行实验,所以使用一个单独的目录代替

vi mfshdd.cfg

/data

8.jpg

mkdir / data

chown -R mfs:mfs /data

  • 启动服务

/usr/local/mfs/sbin/mfschunkserver start

ps aux | grep mfs

9.jpg

四,客户端client配置

  • yum安装编译环境包

yum install -y zlib-devel gcc gcc-c++

  • 创建运行用户mfs

useradd mfs -s /sbin/nologin

  • 安装mfs源码包之前安装fuse插件,MFS客户端依赖于fuse

tar xzvf fuse-2.9.2.tar.gz

cd fuse-2.9.2

./configure

make && make install

  • 设置环境变量

echo "export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH" >>/etc/profile

source /etc/profile

  • 安装mfs源码包客户端

tar zxvf mfs-1.6.27-5.tar.gz     #解压源码包

cd mfs-1.6。27/

./configure \

--prefix=/usr/local/mfs \           #指定安装路径

--with-default-user=mfs \            #指定运行用户,组为mfs

--with-default-group=mfs \

--disable-mfsmaster \           #关闭master功能

--disable-mfschunkserver \       #关闭节点功能

--enable-mfsmount                         #关闭挂载

make && make install

  • 挂载MFS文件系统

mkdir /opt/mfs               //创建挂载点

modprobe fuse          //加载fuse模块到内核//

/usr/local/mfs/bin/mfsmount /opt/mfs -H 192.168.30.55    挂载MFS

df -hT      查看挂载情况

10.jpg

如果要卸载,使用umount /opt/mfs即可。

  • 优化客户端

echo "export PATH=/usr/local/mfs/bin:$PATH" >>/etc/profile

source /etc/profile

  • MFS常用操作

MFS在客户端安装完毕后,会生成/usr/local/mfs/bin目录,在这个目录下有很多命令,

  • mfsgetgoal:用来查询文件被复制的份数,利用-r选项可以对整个目录进行递归,goal是指文件被复制的份数

  • mfssetgoal:设置文件被恢复的份数,生产环境中chunk server节点数量应至少大于2,文件副本数小于等于chunk server服务器的数量

mfsgetgoal -r /opt/mfs

mfssetgoal -r 2 /opt/mfs/

echo abc123 >/opt/mfs/test1

11.jpg


  • 在chunk server上可以查看存储的文件单元

13.jpg


所有配置工作做好了

五,在Master Server上启动监控

  • Mfscgiserv是用python编写的一个web服务器,其监听端口是9425,可以在master server上通过命令/usr/local/mfs/sbin/mfscgiserv来启动,用户利用浏览器就可以全面监控所有客户挂载,chunk server,master server,以及客户端的各种操作等

/usr/local/mfs/sbin/mfscgiserv

 

12.jpg通过浏览器访问 http://192.168.30.55:9425


10.png

11.png