MFS分布式文件系统(一) (MFS简介+环境部署+测试使用)

分布式文件系统简介

分布式文件系统(Distributed File Systemm)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。

简单来说,就是把一些分散的(分布在局域网内各个计算机上)共享文件夹,集合到一个文件夹内(虚拟共享文件夹)。

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

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

MFS简介

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

MFS的组成

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

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

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

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

MFS的工作过程

MFS读取数据的处理过程

在这里插入图片描述

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

#元数据服务器把(元数据)所需数据存放的位置
(Chunk Server的IP地址和Chunk编号)告知客户端
(一份大的数据会被分块,存储在不同的数据服务器上)

#客户端向已知的Chunk Server请求发送数据

#Chunk Server向客户端发送数据

MFS写入数据的处理过程

在这里插入图片描述

分为create创建的形式和update 修改文件的形式:

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

#元数据服务器与Chunk Server进行交互(只有当所需的分块Chunks存在的时候才进行交互),

但元数据服务器只在某些服务器创建新的分块Chunks,创建成功后由Chunk Server告知元数据服务器操作成功。

#元数据服务器告知客户端,可以在哪个Chunk Server的哪些Chunks写入数据
(副本数是由master来维护的)


#客户端向指定的Chunk Server写入数据

#该Chunk Server与按照要求和其他Chunk Server进行数据同步,同步成功后Chunk Server告知客户端数据写入成功


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

环境部署

参考官网:

https://moosefs.com/download/#current

实验环境:

172.25.2.7 ser7 master 结点
172.25.2.8 ser8  数据结点1 (Chunk结点)
172.25.2.9 ser9  数据结点2
172.25.2.250 真机 客户端

在ser7master结点上:

curl "http://ppa.moosefs.com/MooseFS-3-el7.repo" > /etc/yum.repos.d/MooseFS.repo

yum install moosefs-master moosefs-cgi moosefs-cgiserv moosefs-cli -y 



[root@ser7 ~]# scp /etc/yum.repos.d/MooseFS.repo ser9:/etc/yum.repos.d/ 
root@ser9's password: 
MooseFS.repo                         100%  168    56.7KB/s   00:00 scp /etc/yum.repos.d/MooseFS.repo ser8:/etc/yum.repos.d/ 
root@ser8's password: 
MooseFS.repo                         100%  168    59.9KB/s   00:00    
[root@ser7 ~]# scp /etc/yum.repos.d/MooseFS.repo ser9:/etc/yum.repos.d/ 
root@ser9's password: 
MooseFS.repo                         100%  168    56.7KB/s   00:00

进行配置

[root@ser7 ~]# cd /etc/mfs/
[root@ser7 mfs]# ls
mfsexports.cfg         mfsmaster.cfg         mfstopology.cfg
mfsexports.cfg.sample  mfsmaster.cfg.sample  mfstopology.cfg.sample
[root@ser7 mfs]# vim mfsmaster.cfg # 主配置文件不需要改动

所有结点做解析
[root@ser7 mfs]# vim /etc/hosts
172.25.2.7 ser7 mfsmaster

设置服务开机自启
[root@ser7 mfs]# systemctl enable --now

开启监控
[root@ser7 mfs]# systemctl enable --now moosefs-cgiserv.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/moosefs-cgiserv.service to /usr/lib/systemd/system/moosefs-cgiserv.service.
  moosefs-master

查看端口
[root@ser7 mfs]# netstat -antlp 
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:9419            0.0.0.0:*               LISTEN      18027/mfsmaster     
tcp        0      0 0.0.0.0:9420            0.0.0.0:*               LISTEN      18027/mfsmaster     
tcp        0      0 0.0.0.0:9100            0.0.0.0:*               LISTEN      15561/grunt         
tcp        0      0 0.0.0.0:9421            0.0.0.0:*               LISTEN      18027/mfsmaster     
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 0.0.0.0:6000            0.0.0.0:*               LISTEN      3695/X              
tcp        0      0 0.0.0.0:9425            0.0.0.0:*               LISTEN      18084/python2       

9425端口是cgi

在浏览器中访问
在这里插入图片描述

此时还没有chunk server数据结点,所以server这里是空的
在这里插入图片描述

chunk数据结点:,er8和ser9的操作基本一致,这里以ser8为例:

[root@ser8 ~]# yum install moosefs-chunkserver -y

[root@ser8 mfs]# vim /etc/hosts
172.25.2.7 ser7 mfsmaster

[root@ser8 ~]# cd /etc/mfs/
[root@ser8 mfs]# vim mfshdd.cfg #指定存储路径

创建存储目录
[root@ser8 mfs]# mkdir /mnt/chunk1
[root@ser8 mfs]# chown mfs.mfs /mnt/chunk1/
[root@ser8 mfs]# id mfs
uid=987(mfs) gid=981(mfs) groups=981(mfs)

[root@ser8 mfs]# vim mfshdd.cfg
在文件的最后添加 /mnt/chunk1
后续扩展硬盘时,可以把硬盘挂载在 /mnt/chunk1目录

设置开机自启

[root@ser8 mfs]# systemctl enable --now moosefs-chunkserver
Created symlink from /etc/systemd/system/multi-user.target.wants/moosefs-chunkserver.service to /usr/lib/systemd/system/moosefs-chunkserver.service.


chunkserver监听9422端口,并且随机打开一个端口和master的9420端口连接

[root@ser8 mfs]# netstat -antlp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:9422            0.0.0.0:*               LISTEN      17758/mfschunkserve 
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LIS

tcp        0      0 172.25.2.8:22           172.25.2.250:51314      ESTABLISHED 13718/sshd: root@pt 
tcp        0      0 172.25.2.8:53568        172.25.2.7:9420         ESTABLISHED 17758/mfschunkserve 
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd           
tcp6       0      0 :::6000                 :::*                    LISTEN

在这里插入图片描述
在ser9上创建/mnt/chunk2作为数据共享目录,其他操作一样

在这里插入图片描述

客户端结点:

[root@foundation2 ~]# curl "http://ppa.moosefs.com/MooseFS-3-el7.repo" > /etc/yum.repos.d/MooseFS.repo

[root@foundation2 ~]# yum install moosefs-client -y

[root@foundation2 ~]# vim /etc/hosts
172.25.2.7 ser7 mfsmaster

测试使用

在客户端:


在客户端创建空目录:

[root@foundation2 ~]# mkdir /mnt/mfs
[root@foundation2 ~]# cd /mnt/mfs
[root@foundation2 mfs]# ls

挂载
[root@foundation2 mfs]# mfsmount /mnt/mfs/
mfsmaster accepted connection with parameters: read-write,restricted_ip,admin ; root mapped to root:root

客户端和master通信使用的是master的9421端口
[root@foundation2 mfs]# mount
mfsmaster:9421 on /mnt/mfs type fuse.mfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)

master的9419是和元数据服务器通信的,
当master宕机,可以通过它的日志,
接管master的服务
第一次创建时失败;[root@foundation2 mfs]# mkdir data1
[root@foundation2 mfs]# mkdir data2
[root@foundation2 mfs]# mfsgetgoal data1
data1: realpath error on (/mnt/mfs/data1): ENOENT (No such file or directory)
[root@foundation2 mfs]# 
[root@foundation2 ~]# cd /mnt/mfs/
[root@foundation2 mfs]# ls # 发现什么都没有



再创建一次就好了
[root@foundation2 mfs]# mkdir data1
[root@foundation2 mfs]# mkdir data2
[root@foundation2 mfs]# mfsgetgoal data1
data1: 2
[root@foundation2 mfs]# mfsgetgoal data2
data2: 2
[root@foundation2 mfs]# 

设置data1只拷贝一份

[root@foundation2 mfs]# mfssetgoal -r 1 data1/
data1/:
 inodes with goal changed:                       1
 inodes with goal not changed:                   0
 inodes with permission denied:                  0

拷贝文件
[root@foundation2 mfs]# cd data1
[root@foundation2 data1]# cp /etc/passwd .

data2设置拷贝2份,并拷贝文件

[root@foundation2 mfs]# mfsgetgoal  data2
data2: 2
[root@foundation2 mfs]# cd data2
[root@foundation2 data2]# cp /etc/fstab .
[root@foundation2 data2]# 

查看各自的信息

[root@foundation2 mfs]# mfsfileinfo data1/passwd 
data1/passwd:
	chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
		copy 1: 172.25.2.9:9422 (status:VALID)

[root@foundation2 mfs]# mfsfileinfo data2/fstab 
data2/fstab:
	chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
		copy 1: 172.25.2.8:9422 (status:VALID)
		copy 2: 172.25.2.9:9422 (status:VALID)
[root@foundation2 mfs]# 

测试挂掉ser9

[root@ser9 ~]#  systemctl stop moosefs-chunkserver

data1不能再访问,因为没有数据副本,访问时会卡住
[root@foundation2 mfs]# mfsfileinfo data1/passwd 
data1/passwd:
	chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
		no valid copies !!!

[root@foundation2 mfs]# cat  data1/passwd 
^C
[root@foundation2 mfs]# 



不影响data2的访问,因为它还有一个副本
[root@foundation2 mfs]# mfsfileinfo data2/fstab 
data2/fstab:
	chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
		copy 1: 172.25.2.8:9422 (status:VALID)
[root@foundation2 mfs]# 

[root@foundation2 mfs]# cat  data2/fstab

#
# /etc/fstab
# Created by anaconda on Wed Sep 18 11:55:54 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=53330ac3-2cac-48c4-9c46-64024d00f9db /                       xfs     defaults        1 1
UUID=8c24d78d-aee2-442f-8a00-096702190618 /boot                   xfs     defaults        1 2
UUID=B4A6-8FCA          /boot/efi               vfat    umask=0077,shortname=winnt 0 0
UUID=b44de218-851b-41d7-9180-1aabc6322866 swap                    swap    defaults        0 0


测试大文件会在数据结点上分开存储

[root@foundation2 mfs]# cd data1
[root@foundation2 data1]# dd if=/dev/zero of=bigfile bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 2.42444 s, 43.3 MB/s

发现文件被分到两个结点存储
[root@foundation2 data1]# mfsfileinfo bigfile 
bigfile:
	chunk 0: 0000000000000005_00000001 / (id:5 ver:1)
		copy 1: 172.25.2.9:9422 (status:VALID)
	chunk 1: 0000000000000006_00000001 / (id:6 ver:1)
		copy 1: 172.25.2.8:9422 (status:VALID)


在ser8和ser9下,文件是这样存储的

[root@ser8 mfs]# cd /mnt/chunk1/
[root@ser8 chunk1]# ls
00  10  20  30  40  50  60  70  80  90  A0  B0  C0  D0  E0  F0
01  11  21  31  41  51  61  71  81  91  A1  B1  C1  D1  E1  F1
02  12  22  32  42  52  62  72  82  92  A2  B2  C2  D2  E2  F2
03  13  23  33  43  53  63  73  83  93  A3  B3  C3  D3  E3  F3
04  14  24  34  44  54  64  74  84  94  A4  B4  C4  D4  E4  F4
05  15  25  35  45  55  65  75  85  95  A5  B5  C5  D5  E5  F5
06  16  26  36  46  56  66  76  86  96  A6  B6  C6  D6  E6  F6
07  17  27  37  47  57  67  77  87  97  A7  B7  C7  D7  E7  F7
08  18  28  38  48  58  68  78  88  98  A8  B8  C8  D8  E8  F8
09  19  29  39  49  59  69  79  89  99  A9  B9  C9  D9  E9  F9
0A  1A  2A  3A  4A  5A  6A  7A  8A  9A  AA  BA  CA  DA  EA  FA
0B  1B  2B  3B  4B  5B  6B  7B  8B  9B  AB  BB  CB  DB  EB  FB
0C  1C  2C  3C  4C  5C  6C  7C  8C  9C  AC  BC  CC  DC  EC  FC
0D  1D  2D  3D  4D  5D  6D  7D  8D  9D  AD  BD  CD  DD  ED  FD
0E  1E  2E  3E  4E  5E  6E  7E  8E  9E  AE  BE  CE  DE  EE  FE
0F  1F  2F  3F  4F  5F  6F  7F  8F  9F  AF  BF  CF  DF  EF  FF
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值