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文件。
●关闭防火墙
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
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地址
//设置永久挂载
写挂载脚本,配置成开机自启。
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/目录, 在这个目录下有很多命令是用户所需要的。
为了方便使用这些命令, 可将/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
3.2、使用 MFS 网页版监控
【Master Server----启动监控程序】
[aaa@qq.com ~]# /usr/local/mfs/sbin/mfscgiserv
【在真机中打开浏览器访问】
http://192.168.100.129:9425/mfs.cgi?masterhost=mfsmaster //注意主机名和IP地址
其中各部分的含义如下。
Info 部分: 显示了 MFS 的基本信息。
Servers 部分: 列出现有 Chunk Server。
Disks 部分: 列出现有 Chunk Server 硬盘信息。
Exports 部分: 列出可被挂载的目录。
Mounts 部分: 列出被挂载的目录。
Operations 部分: 显示正在执行的操作。
Resources 部分: 列出当前存储信息。
Quitas 部分: 列出当前配额信息。
Master charts 部分: 显示 Master Server 的操作情况, 读、 写、 删除等操作。
Server charts 部分: 显示 Chunk Server 的操作情况、 数据传输率及系统状态。
上一篇: 管中窥文件系统