欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MFS分布式文件系统(理论+实战)

程序员文章站 2022-05-09 21:09:44
...

一、MFS简介

MFS 正式推出是在2008 年 5 月, 是一个具有容错功能的、 高可用、 可扩展的海量级分布式文件系统。 MFS 把数据分散在多台服务器上, 但用户看到的只是一个源。 MFS 也像其他类 UNIX 文件系统一样,包含了层级结构、 文件属性, 可以创建特殊的文件(块设备、 字符设备、 管道、 套接字)、符号链接和硬链接。

1.1、MFS优势

  • 集中访问
  • 简化操作
  • 数据容灾
  • 提高文件存取性能

1.2、MFS原理

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

1.3、MFS文件系统的组成

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

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

  • 数据存储服务器(Chunk Server): 真正存储数据的服务器。 存储文件时, 会把文件分块保存, 并在数据服务器之间复制, 数据服务器越多, 能使用的“容量” 就越大, 可靠性就越高, 性能越好。

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

二、MFS分布式文件系统部署

2.1、部署准备

准备六台虚拟机,都要关闭防火墙、关闭核心防护、配置主机名、配置yum,配置hosts文件。
MFS分布式文件系统(理论+实战)

●关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

●关闭核心防护
setenforce 0
vi /etc/sysconfig/selinux 
SELINUX=disabled

●配置主机名
hostnamectl set-hostname mfsmaster
hostnamectl set-hostname metalogger
hostnamectl set-hostname chunk1
hostnamectl set-hostname chunk2
hostnamectl set-hostname chunk3
hostnamectl set-hostname client

●配置hosts文件
vi /etc/hosts
192.168.100.129     mfsmaster
192.168.100.131    	metalogger
192.168.100.132      chunk1
192.168.100.133     chunk2
192.168.100.134    chunk3
192.168.100.135     client

●安装编译包
yum -y install gcc gcc-c++ make zlib-devel

2.2、搭建 Master Server

//创建用户
[aaa@qq.com ~]# useradd -s /sbin/nologin -M mfs

//安装源码包  
[aaa@qq.com opt]# tar xzvf moosefs-3.0.100-1.tar.gz -C /opt/
[aaa@qq.com opt]# cd /opt/moosefs-3.0.100/

[aaa@qq.com moosefs-3.0.100]# 
./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfschunkserver \
--disable-mfsmount

[aaa@qq.com moosefs-3.0.100]# make && make install

//复制 master 配置文件
[aaa@qq.com moosefs-3.0.100]# cd /usr/local/mfs/etc/mfs/
[aaa@qq.com mfs]# ll
总用量 24
总用量 24
-rw-r--r--. 1 root root 4057 3月  24 17:05 mfsexports.cfg.sample
-rw-r--r--. 1 root root 8597 3月  24 17:05 mfsmaster.cfg.sample
-rw-r--r--. 1 root root 2175 3月  24 17:05 mfsmetalogger.cfg.sample
-rw-r--r--. 1 root root 1052 3月  24 17:05 mfstopology.cfg.sample
[aaa@qq.com mfs]# cp mfsmaster.cfg.sample mfsmaster.cfg
[aaa@qq.com mfs]# cp mfsexports.cfg.sample mfsexports.cfg
[aaa@qq.com mfs]# cp mfstopology.cfg.sample mfstopology.cfg

[aaa@qq.com mfs]# cd /usr/local/mfs/var/mfs/
[aaa@qq.com mfs]# cp metadata.mfs.empty metadata.mfs

[aaa@qq.com mfs]# chown mfs:mfs /usr/local/mfs/var/mfs

[aaa@qq.com mfs]# /usr/local/mfs/sbin/mfsmaster start      #####启动   
####停止 Master Server 的命令是/usr/local/mfs/sbin/mfsmaster stop###

[aaa@qq.com mfs]# netstat -anpt | grep mfs
tcp        0      0 0.0.0.0:9419            0.0.0.0:*               LISTEN      100461/mfsmaster    
tcp        0      0 0.0.0.0:9420            0.0.0.0:*               LISTEN      100461/mfsmaster    
tcp        0      0 0.0.0.0:9421            0.0.0.0:*               LISTEN      100461/mfsmaster 
端口介绍:
9419----元数据日志服务器
9420----元数据存储
9421----客户端用的

2.3、搭建 MFS 日志服务器

//创建用户
[aaa@qq.com ~]# useradd -s /sbin/nologin -M mfs

//安装源码包   
[aaa@qq.com opt]# tar xzvf moosefs-3.0.100-1.tar.gz -C /opt/
[aaa@qq.com opt]# cd /opt/moosefs-3.0.100/

[aaa@qq.com moosefs-3.0.100]# 
./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfschunkserver \
--disable-mfsmount

[aaa@qq.com moosefs-3.0.100]# make && make install

//安装源码包   复制 metalogger 主配置文件
[aaa@qq.com moosefs-3.0.100]# cd /usr/local/mfs/etc/mfs
[aaa@qq.com mfs]# ll
总用量 24
-rw-r--r--. 1 root root 4057 3月  24 17:06 mfsexports.cfg.sample
-rw-r--r--. 1 root root 8597 3月  24 17:06 mfsmaster.cfg.sample
-rw-r--r--. 1 root root 2175 3月  24 17:06 mfsmetalogger.cfg.sample
-rw-r--r--. 1 root root 1052 3月  24 17:06 mfstopology.cfg.sample
[aaa@qq.com mfs]# cp mfsmetalogger.cfg.sample mfsmetalogger.cfg

 //修改metalogger主配置文件, 指定master地址
[aaa@qq.com mfs]# vi /usr/local/mfs/etc/mfs/mfsmetalogger.cfg
 MASTER_HOST = 192.168.100.129


[aaa@qq.com mfs]# /usr/local/mfs/sbin/mfsmetalogger start
[aaa@qq.com mfs]# netstat -anpt | grep mfs
tcp        0      0 192.168.100.131:45736   192.168.100.129:9419    ESTABLISHED 16271/mfsmetalogger 

2.4、搭建 chunk 存储端

三台chunk存储服务器的配置一样,所以就不一一展示了。

//创建用户
[aaa@qq.com ~]# useradd -s /sbin/nologin -M mfs

//安装源码包  
[aaa@qq.com opt]# tar xzvf moosefs-3.0.100-1.tar.gz -C /opt/
[aaa@qq.com opt]# cd /opt/moosefs-3.0.100/

[aaa@qq.com moosefs-3.0.100]# 
./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfsmaster \
--disable-mfsmount

[aaa@qq.com moosefs-3.0.100]# make && make install

//复制 mfschunk 配置文件
[aaa@qq.com moosefs-3.0.100]# cd /usr/local/mfs/etc/mfs/
[aaa@qq.com mfs]# ll
总用量 12
-rw-r--r--. 1 root root 3491 3月  24 17:21 mfschunkserver.cfg.sample
-rw-r--r--. 1 root root 1648 3月  24 17:21 mfshdd.cfg.sample
-rw-r--r--. 1 root root 2175 3月  24 17:21 mfsmetalogger.cfg.sample

[aaa@qq.com mfs]# cp mfschunkserver.cfg.sample mfschunkserver.cfg
[aaa@qq.com mfs]# cp mfshdd.cfg.sample mfshdd.cfg

//修改 mfschunk 主配置文件, 指定 master。
[aaa@qq.com mfs]# vi mfschunkserver.cfg
MASTER_HOST = 192.168.100.129

[aaa@qq.com mfs]# vi mfshdd.cfg
#在文件末尾添加以下目录
/data

[aaa@qq.com mfs]# mkdir /data
[aaa@qq.com mfs]# chown -R mfs:mfs /data

[aaa@qq.com mfs]# /usr/local/mfs/sbin/mfschunkserver start

[aaa@qq.com mfs]# netstat -anpt | grep mfs
tcp        0      0 0.0.0.0:9422            0.0.0.0:*               LISTEN      21544/mfschunkserve 
tcp        0      0 192.168.100.132:49788   192.168.100.129:9420    ESTABLISHED 21544/mfschunkserve

MFS分布式文件系统(理论+实战)
MFS分布式文件系统(理论+实战)
MFS分布式文件系统(理论+实战)

2.5、搭建客户端并挂载MFS

  • 客户端通过 mfsmount 与 MFS文件文件系统进行沟通,管理服务器(接收和修改文件元数据)、chunkservers(实际的文件交换数据)。
  • mfsmount 是基于FUSE的机制 (用户空间文件系统中)
//安装fuse-2.9.2.tar.gz包
[aaa@qq.com ~]# cd /opt
[aaa@qq.com opt]# tar xzvf fuse-2.9.2.tar.gz -C /opt
[aaa@qq.com opt]# cd fuse-2.9.2
[aaa@qq.com fuse-2.9.2]# ./configure
[aaa@qq.com fuse-2.9.2]# make && make install

//设置环境变量
[aaa@qq.com fuse-2.9.2]# vi /etc/profile
#在文件末尾添加以下代码
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
[aaa@qq.com fuse-2.9.2]# source /etc/profile   #执行使之生效

//安装 MFS 客户端
[aaa@qq.com fuse-2.9.2]# cd /opt
[aaa@qq.com opt]# useradd -s /sbin/nologin -M mfs    #创建系统用户
[aaa@qq.com opt]# tar xzvf moosefs-3.0.100-1.tar.gz -C /opt/
[aaa@qq.com opt]# cd /opt/moosefs-3.0.100/
[aaa@qq.com moosefs-3.0.100]# 
./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfsmaster \
--disable-mfschunkserver \
--enable-mfsmount

[aaa@qq.com moosefs-3.0.100]# make && make install

//挂载 MFS 文件系统
[aaa@qq.com moosefs-3.0.100]# cd ~
[aaa@qq.com ~]#  mkdir /opt/mfs
[aaa@qq.com ~]#  modprobe fuse     # 加载 fuse 模块到内核
[aaa@qq.com ~]#  /usr/local/mfs/bin/mfsmount /opt/mfs -H 192.168.100.129     ####master地址

MFS分布式文件系统(理论+实战)

//设置永久挂载
写挂载脚本,配置成开机自启。
cd /etc/profile.d/
vi mt.sh
#!/bin/bash
/usr/local/mfs/bin/mfsmount /opt/mfs -H 192.168.100.40 >/dev/null 2>&1
chmod +x mt.sh

三、MFS的使用

3.1、优化并使用命令测试

MFS 在客户端安装完毕后, 会生成/usr/local/mfs/bin/目录, 在这个目录下有很多命令是用户所需要的。
MFS分布式文件系统(理论+实战)
为了方便使用这些命令, 可将/usr/local/mfs/bin 路径加入到环境变量中

[aaa@qq.com ~]# vim /etc/profile
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
export PATH=/usr/local/mfs/bin:$PATH                 ###此处添加

[aaa@qq.com ~]# source /etc/profile
● mfsgetgoal 命令用来查询文件被复制的份数,利用 -r 命令可以对整个目录进行递归操作。
   goal 是指文件被复制的份数

[aaa@qq.com ~]# mfsgetgoal -r /opt/mfs
/opt/mfs:
 directories with goal          2 :          1
  
● mfsgetgoal 命令用来设置文件被复制的份数, 生产环境 Chunk Server节点数量应至少
大于 2, 文件副本数小于等于 Chunk Server服务器的数量

[aaa@qq.com ~]# mfssetgoal -r 3 /opt/mfs/
/opt/mfs/:
 inodes with goal changed:                       1
 inodes with goal not changed:                   0
 inodes with permission denied:                  0

##创建文件测试mfssetgoal命令的结果
[aaa@qq.com ~]# cd /opt/mfs/
[aaa@qq.com bin]# cd /opt/mfs/
[aaa@qq.com mfs]# touch abc
[aaa@qq.com mfs]# mfsgetgoal abc
abc: 3

MFS分布式文件系统(理论+实战)
MFS分布式文件系统(理论+实战)

3.2、使用 MFS 网页版监控

【Master Server----启动监控程序】
[aaa@qq.com ~]#  /usr/local/mfs/sbin/mfscgiserv

【在真机中打开浏览器访问】
http://192.168.100.129:9425/mfs.cgi?masterhost=mfsmaster  //注意主机名和IP地址

MFS分布式文件系统(理论+实战)
MFS分布式文件系统(理论+实战)

其中各部分的含义如下。
Info 部分: 显示了 MFS 的基本信息。
Servers 部分: 列出现有 Chunk Server。
Disks 部分: 列出现有 Chunk Server 硬盘信息。
Exports 部分: 列出可被挂载的目录。
Mounts 部分: 列出被挂载的目录。
Operations 部分: 显示正在执行的操作。
Resources 部分: 列出当前存储信息。
Quitas 部分: 列出当前配额信息。
Master charts 部分: 显示 Master Server 的操作情况, 读、 写、 删除等操作。
Server charts 部分: 显示 Chunk Server 的操作情况、 数据传输率及系统状态。
相关标签: 文件系统