MFS分布式文件系统

一:生产环境中遇到的问题

公司之前的图片服务器采用的是 NFS, 随着业务量增加, 多台服务器通过 NFS 方式共享一个服务器的存储空间, 使得 NFS 服务器不堪重负, 经常出现超时问题。

而且 NFS 存在着单点故障问题, 尽管可以用 rsync 同步数据到另外一台服务器上做 NFS 服务的备份, 但这对提高整个系统的性能毫无帮助。

基于这样一种需求, 我们需要对 NFS 服务器进行优化或采取别的解决方案, 然而优化并不能应对日益增多的客户端的性能要求, 因此选择的解决方案是采用分布式文件系统。

采用分布式文件系统后, 服务器之间的数据访问不再是一对多的关系,而是多对多的关系, 这样可以使性能得到大幅提升。
在当前多种常用的分布式文件系统中, 我们采用了 MFS(MooseFS)。

MFS 正式推出是在2008 年 5 月, 是一个具有容错功能的、 高可用、 可扩展的海量级分布式文件系统。

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

MFS 也像其他类 UNIX 文件系统一样,包含了层级结构、 文件属性, 可以创建特殊的文件(块设备、 字符设备、 管道、 套接字)、符号链接和硬链接。

二:分布式简介

分布式文件系统(Distributed File System) 是指文件系统管理的物理存储资源不一定直接连接在本地节点上,

而是通过计算机网络与节点相连。简单来说就是把一些分散的(分布在局域网内各个计算机上) 共享文件夹,

集合到一个文件夹内(虚拟共享文件夹)。

对于用户来说, 要访问这些共享文件夹时, 只要打开这个虚拟共享文件夹, 就可以看到所有链接到虚拟共享文件夹内的共享文件夹, 用户感觉不到这些共享文件是分散于各个计算机上的。

分布式文件系统的好处是集中访问、 简化操作、 数据容灾、 提高文件存取性能

三:MFS原理

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

四:MFS文件系统的组成

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

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

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

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

五:MFS的工作流程

●MFS 读取数据的处理过程
【1】客户端向元数据服务器发出读请求。
【2】元数据服务器把所需数据存放的位置(Chunk Server 的 IP 地址和 Chunk 编号) 告知客户端。
【3】客户端向已知的 Chunk Server 请求发送数据。
【4】Chunk Server 向客户端发送数据。

●MFS 写入数据的处理过程
【1】客户端向元数据服务器发送写入请求。
【2】元数据服务器与 Chunk Server 进行交互(只有当所需的分块 Chunks 存在的时候才进行这个交互),
但元数据服务器只在某些服务器创建新的分块 Chunks,创建成功后由Servers 告知元数据服务器操作成功
【3】元数据服务器告知客户端, 可以在哪个 Chunk Server 的哪些 Chunks 写入数据。
【4】客户端向指定的 Chunk Server 写入数据
【5】该 Chunk Server 与其他 Chunk Server 进行数据同步, 同步成功后 Chunk Server 告知客户端数据写入成功。
【6】客户端告知元数据服务器本次写入完毕。

六:实操

6.1 环境

主机操作系统IP地址主要软件
mastercentos7192.168.100.40moosefs-3.0.100-1.tar.gz
metaloggercentos7192.168.100.41moosefs-3.0.100-1.tar.gz
chunk1centos7192.168.100.42moosefs-3.0.100-1.tar.gz
chunk2centos7192.168.100.43moosefs-3.0.100-1.tar.gz
chunk3centos7192.168.100.44moosefs-3.0.100-1.tar.gz
clientcentos7192.168.100.45moosefs-3.0.100-1.tar.gz,fuse-2.9.2.tar.gz

6.2 思路

1、搭建 MFSmaster。
2、搭建 MFS 日志服务器。
3、搭建 chunk 存储端。
4、使用 MFS 挂在到客户端。
5、创建 MFS 监控。
6、学习 MFS 维护及灾难恢复。

6.3 环境准备

六台服务器上关闭防火墙、关闭核心防护、配置主机名、配置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.40	mfsmaster
192.168.100.41	metalogger
192.168.100.42	chunk1
192.168.100.43	chunk2
192.168.100.44	chunk3
192.168.100.45	client

MFS节点都执行下面操作,client另外说明

●安装相关依赖包
yum -y install gcc zlib-devel
●创建mfs用户(客户端节点不用创建,其他节点都创建)
[root@mfsmaster ~]# useradd -s /sbin/nologin -M mfs
安装源码包   ##上传到/opt目录
[root@mfsmaster ~]# cd /opt
[root@mfsmaster opt]# tar xzvf moosefs-3.0.100-1.tar.gz -C /opt/
[root@mfsmaster opt]# cd /opt/moosefs-3.0.100/

6.4 配置master服务器

编译安装

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

[root@mfsmaster moosefs-3.0.100]# make && make install

复制 master 配置文件模板

/usr/local/mfs/etc/mfs/mfsmaster.cfg

/usr/local/mfs/etc/mfs/mfsexports.cfg

/usr/local/mfs/etc/mfs/mfstopology.cfg

/usr/local/mfs/var/mfs/metadata.mfs

[root@mfsmaster moosefs-3.0.100]# cd /usr/local/mfs/etc/mfs/
[root@mfsmaster mfs]# ll
总用量 24
-rw-r--r-- 1 root root 4057 4月  11 23:48 mfsexports.cfg.sample
-rw-r--r-- 1 root root 8597 4月  11 23:48 mfsmaster.cfg.sample
-rw-r--r-- 1 root root 2175 4月  11 23:48 mfsmetalogger.cfg.sample
-rw-r--r-- 1 root root 1052 4月  11 23:48 mfstopology.cfg.sample
[root@mfsmaster mfs]# cp mfsmaster.cfg.sample mfsmaster.cfg
[root@mfsmaster mfs]# cp mfsexports.cfg.sample mfsexports.cfg
[root@mfsmaster mfs]# cp mfstopology.cfg.sample mfstopology.cfg

[root@mfsmaster mfs]# cd /usr/local/mfs/var/mfs/
[root@mfsmaster mfs]# cp metadata.mfs.empty metadata.mfs

[root@mfsmaster mfs]# chown mfs:mfs /usr/local/mfs/var/mfs

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

[root@mfsmaster mfs]# netstat -anpt | grep mfs
tcp        0      0 0.0.0.0:9419            0.0.0.0:*               LISTEN      16024/mfsmaster     
tcp        0      0 0.0.0.0:9420            0.0.0.0:*               LISTEN      16024/mfsmaster     
tcp        0      0 0.0.0.0:9421            0.0.0.0:*               LISTEN 

[root@mfsmaster mfs]# /usr/local/mfs/sbin/mfsmaster stop         #####停止

6.5 搭建MetaLogger server

编译安装

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

[root@metalogger moosefs-3.0.100]# make && make install

复制 metalogger 主配置文件

/usr/local/mfs/etc/mfs/mfsmetalogger.cfg

[root@metalogger moosefs-3.0.100]# cd /usr/local/mfs/etc/mfs
[root@metalogger mfs]# ll
总用量 24
-rw-r--r-- 1 root root 4057 4月  12 07:55 mfsexports.cfg.sample
-rw-r--r-- 1 root root 8597 4月  12 07:55 mfsmaster.cfg.sample
-rw-r--r-- 1 root root 2175 4月  12 07:55 mfsmetalogger.cfg.sample
-rw-r--r-- 1 root root 1052 4月  12 07:55 mfstopology.cfg.sample
[root@metalogger mfs]# cp mfsmetalogger.cfg.sample mfsmetalogger.cfg

修改 metalogger 主配置文件, 指定 master 地址

[root@metalogger mfs]# vi /usr/local/mfs/etc/mfs/mfsmetalogger.cfg
 MASTER_HOST = 192.168.100.40

[root@metalogger mfs]# /usr/local/mfs/sbin/mfsmetalogger start
[root@metalogger mfs]# netstat -anpt | grep mfs
tcp        0      0 192.168.100.41:44248    192.168.100.40:9419     ESTABLISHED 14207/mfsmetalogger 

6.6 搭建chunkserver1

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

[root@chunk1 moosefs-3.0.100]# make && make install

●复制 mfschunk 配置文件

/usr/local/mfs/etc/mfs/mfschunkserver.cfg

/usr/local/mfs/etc/mfs/mfshdd.cfg

[root@chunk1 moosefs-3.0.100]# cd /usr/local/mfs/etc/mfs/
[root@chunk1 mfs]# ll
总用量 32
-rw-r--r-- 1 root root 3491 4月  12 08:13 mfschunkserver.cfg.sample
-rw-r--r-- 1 root root 1648 4月  12 08:13 mfshdd.cfg.sample
-rw-r--r-- 1 root root 2175 4月  12 08:13 mfsmetalogger.cfg.sample

[root@chunk1 mfs]# cp mfschunkserver.cfg.sample mfschunkserver.cfg
[root@chunk1 mfs]# cp mfshdd.cfg.sample mfshdd.cfg

●修改 mfschunk 主配置文件, 指定 master。

[root@chunk1 mfs]# vi mfschunkserver.cfg
MASTER_HOST = 192.168.100.40

[root@chunk1 mfs]# vi mfshdd.cfg
/data

[root@chunk1 mfs]# mkdir /data
[root@chunk1 mfs]# chown -R mfs:mfs /data

[root@chunk1 mfs]# /usr/local/mfs/sbin/mfschunkserver start

[root@chunk1 mfs]# netstat -anpt | grep mfs
tcp        0      0 0.0.0.0:9422            0.0.0.0:*               LISTEN      21590/mfschunkserve 
tcp        0      0 192.168.100.42:58882    192.168.100.40:9420     ESTABLISHED 21590/mfschunkserve 

6.6 搭建chunkserver2

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

[root@chunk2 moosefs-3.0.100]# make && make install

●复制 mfschunk 配置文件

/usr/local/mfs/etc/mfs/mfschunkserver.cfg

/usr/local/mfs/etc/mfs/mfshdd.cfg

[root@chunk2 moosefs-3.0.100]# cd /usr/local/mfs/etc/mfs/
[root@chunk2 mfs]# ll
总用量 12
-rw-r--r-- 1 root root 3491 4月  12 08:22 mfschunkserver.cfg.sample
-rw-r--r-- 1 root root 1648 4月  12 08:22 mfshdd.cfg.sample
-rw-r--r-- 1 root root 2175 4月  12 08:22 mfsmetalogger.cfg.sample

[root@chunk2 mfs]# cp mfschunkserver.cfg.sample mfschunkserver.cfg
[root@chunk2 mfs]# cp mfshdd.cfg.sample mfshdd.cfg

●修改 mfschunk 主配置文件, 指定 master。

[root@chunk2 mfs]# vi mfschunkserver.cfg
MASTER_HOST = 192.168.100.40

[root@chunk2 mfs]# vi mfshdd.cfg
/data

[root@chunk2 mfs]# mkdir /data
[root@chunk2 mfs]# chown -R mfs:mfs /data

[root@chunk2 mfs]# /usr/local/mfs/sbin/mfschunkserver start

[root@chunk2 mfs]# netstat -anpt | grep mfs
tcp        0      0 0.0.0.0:9422            0.0.0.0:*               LISTEN      21590/mfschunkserve 
tcp        0      0 192.168.100.43:58882    192.168.100.40:9420     ESTABLISHED 21590/mfschunkserve 

6.7 搭建chunkserver3

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

[root@chunk3 moosefs-3.0.100]# make && make install

●复制 mfschunk 配置文件

/usr/local/mfs/etc/mfs/mfschunkserver.cfg

/usr/local/mfs/etc/mfs/mfshdd.cfg

[root@chunk3 moosefs-3.0.100]# cd /usr/local/mfs/etc/mfs/
[root@chunk3 mfs]# ll
总用量 32
-rw-r--r-- 1 root root 3491 4月  12 08:13 mfschunkserver.cfg.sample
-rw-r--r-- 1 root root 1648 4月  12 08:13 mfshdd.cfg.sample
-rw-r--r-- 1 root root 2175 4月  12 08:13 mfsmetalogger.cfg.sample

[root@chunk3 mfs]# cp mfschunkserver.cfg.sample mfschunkserver.cfg
[root@chunk3 mfs]# cp mfshdd.cfg.sample mfshdd.cfg

●修改 mfschunk 主配置文件, 指定 master。

[root@chunk3 mfs]# vi mfschunkserver.cfg
MASTER_HOST = 192.168.100.40

[root@chunk3 mfs]# vi mfshdd.cfg
/data

[root@chunk3 mfs]# mkdir /data
[root@chunk3 mfs]# chown -R mfs:mfs /data

[root@chunk3 mfs]# /usr/local/mfs/sbin/mfschunkserver start

[root@chunk3 mfs]# netstat -anpt | grep mfs
tcp        0      0 0.0.0.0:9422            0.0.0.0:*               LISTEN      21590/mfschunkserve 
tcp        0      0 192.168.100.44:58882    192.168.100.40:9420     ESTABLISHED 21590/mfschunkserve 

6.8 搭建client

●安装相关依赖包

yum -y install gcc zlib-devel

●安装 FUSE 上传fuse-2.9.2.tar.gz到/opt目录

[root@client ~]# cd /opt
[root@client opt]# tar xzvf fuse-2.9.2.tar.gz -C /opt
[root@client opt]# cd fuse-2.9.2
[root@client fuse-2.9.2]# ./configure
[root@client fuse-2.9.2]# make && make install

●设置环境变量

[root@client fuse-2.9.2]# vi /etc/profile
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
[root@client fuse-2.9.2]# source /etc/profile

●安装 MFS 客户端

[root@client fuse-2.9.2]# cd /opt
[root@client opt]# useradd -s /sbin/nologin -M mfs
[root@client opt]# tar xzvf moosefs-3.0.100-1.tar.gz -C /opt/
[root@client opt]# cd /opt/moosefs-3.0.100/
[root@client moosefs-3.0.100]# 
./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfsmaster \
--disable-mfschunkserver \
--enable-mfsmount

[root@client moosefs-3.0.100]# make && make install

●挂载 MFS 文件系统

[root@client moosefs-3.0.100]# cd ~
[root@client ~]#  mkdir /opt/mfs
[root@client ~]#  modprobe fuse                                                                              ####加载 fuse 模块到内核
[root@client ~]#  /usr/local/mfs/bin/mfsmount /opt/mfs -H 192.168.100.40     ####master地址
[root@client ~]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        50G  4.1G   46G    9% /
devtmpfs                devtmpfs  1.9G     0  1.9G    0% /dev
tmpfs                   tmpfs     1.9G     0  1.9G    0% /dev/shm
tmpfs                   tmpfs     1.9G   13M  1.9G    1% /run
tmpfs                   tmpfs     1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/sr0                iso9660   4.3G  4.3G     0  100% /mnt
/dev/sda1               xfs      1014M  179M  836M   18% /boot
/dev/mapper/centos-home xfs       245G   33M  245G    1% /home
tmpfs                   tmpfs     378M   12K  378M    1% /run/user/42
tmpfs                   tmpfs     378M     0  378M    0% /run/user/0
192.168.100.40:9421     fuse.mfs  150G   13G  138G    9% /opt/mfs

###如果要卸载 MFS, 使用命令 umount /opt/mfs 即可###

  • 永久挂载
[root@client ~]# cd /etc/profile.d/
[root@client ~]# vim mt.sh
#!/bin/bash
/usr/local/mfs/bin/mfsmount /opt/mfs -H 192.168.100.41 >/dev/null 2>&1
[root@client ~]# chmod +x mt.sh

七:MFS 常用操作

MFS 在客户端安装完毕后, 会生成/usr/local/mfs/bin/目录, 在这个目录下有很多命
令是用户所需要的。 为了方便使用这些命令, 可将/usr/local/mfs/bin 加入到环境变量中

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

[root@client ~]# source /etc/profile

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

[root@client ~]# mfsgetgoal -r /opt/mfs
/opt/mfs:
 directories with goal          2 :          1

命令 mfsgetgoal 也可以用来设置文件被复制的份数, 生产环境 Chunk Server 节点数量应至少
大于 2, 文件副本数小于等于 Chunk Server 服务器的数量

[root@client ~]# mfssetgoal -r 3 /opt/mfs/
/opt/mfs/:
 inodes with goal changed:                       1
 inodes with goal not changed:                   0
 inodes with permission denied:                  0

●创建文件测试如下

[root@client ~]# cd /opt/mfs/
[root@client mfs]# touch gsy
[root@client mfs]# mfsgetgoal gsy
gsy: 3

八:其他命令

8.1 Master Server----启动监控程序

[root@mfsmaster ~]#  /usr/local/mfs/sbin/mfscgiserv

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

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

8.2 MFS 集群的启动与停止

MFS 集群启动的顺序如下
(1) 启动 mfsmaster 进程。
(2) 启动所有的 mfschunkserver 进程。
(3) 启动 mfsmetalogger 进程(如果配置了 mfsmetalogger)。
(4) 在所有的客户端挂载 MFS 文件系统。

MFS 集群停止的顺序如下。
(1) 在所有的客户端卸载 MFS 文件系统。
(2) 用 mfschunkserver stop 命令停止 chunkserver 进程。
(3) 用 mfsmetalogger stop 命令停止 metalogger 进程。
(4) 用 mfsmaster stop 命令停止 master 进程

8.3 MFS 灾难恢复

整个 MFS 体系中, 直接断电只有 Master 有可能无法启动, 可以在 master 上使用命令
/usr/local/mfs/sbin/mfsmaster -a 修复

MFS 元数据通常有两部分的数据
1、主要元数据文件 metadata.mfs, 当 mfsmaster 运行时会被命名为 metadata.mfs.back。

2、元数据改变日志 changelog.*.mfs, 存储了过去的 N 小时的文件改变(N 的数值是由
BACK_LOGS 参数设置的, 参数的设置在 mfschunkserver.cfg 配置文件中)。

3、在 Master 发生故障时, 可以从 MetaLogger 中恢复 Master

4、安装一台 mfsmaster, 利用同样的配置来配置这台 mfsmaster。

5、将 metalogger 上 /usr/local/mfs/var/mfs/目录下的文件复制到 mfsmaster 相应的目
录中

[root@mfsmaster ~]#scp root@192.168.100.41:/usr/local/mfs/var/mfs/* /usr/local/mfs/var/mfs/

●利用 mfsmetarestore 命令合并元数据 changelogs。

[root@mfsmaster ~]#/usr/local/mfs/sbin/mfsmaster -a

如果是全新安装的 Master, 恢复数据后, 要更改 metalogger 和 chunkserver 配置
MASTER_HOST 的 IP, 客户端也需要重新挂载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值