MFS(一)---mfs详解与部署

一、MFS详解

分布式原理:

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

MFS原理:

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

MFS文件系统的组成

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

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

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

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

MFS读取数据的处理过程:

在这里插入图片描述

  • 客户端向元数据服务器发出读请求
  • 元数据服务器把所需数据存放的位置(Chunk Server的IP地址和Chunk编号)告知客户端
  • 客户端向已知的Chunk Server请求发送数据
  • Chunk Server向客户端发送数据

MFS写入数据的处理过程:

在这里插入图片描述

  • 客户端向元数据服务器发送写入请求
  • 元数据服务器与Chunk Server进行交互(只有当所需的分块Chunks存在的时候才进行交互),但元数据服务器只在某些服务器创建新的分块Chunks,创建成功后由元数据服务器告知客户端,可以在哪个Chunk Server的哪些Chunks写入数据。
  • 客户端向指定的Chunk Server写入数据
  • 该Chunk Server与其他Chunk Server进行数据同步,同步成功后Chunk Server告知客户端数据写入成功
  • 客户端告知元数据服务器本次写入完毕

MFS的删除文件过程

  • 客户端有删除操作时,首先向Master发送删除信息;
  • Master定位到相应元数据信息进行删除,并将chunk server上块的删除操作加入队列异步清理;
  • 响应客户端删除成功的信号

MFS修改文件内容的过程

  • 客户端有修改文件内容时,首先向Master发送操作信息;
  • Master申请新的块给.swp文件,
  • 客户端关闭文件后,会向Master发送关闭信息;
  • Master会检测内容是否有更新,若有,则申请新的块存放更改后的文件,删除原有块和.swp文件块;
  • 若无,则直接删除.swp文件块。

MFS重命名文件的过程

  • 客户端重命名文件时,会向Master发送操作信息;
  • Master直接修改元数据信息中的文件名;返回重命名完成信息;

MFS遍历文件的过程

  • 遍历文件不需要访问chunk server,当有客户端遍历请求时,向Master发送操作信息;
  • Master返回相应元数据信息;
  • 客户端接收到信息后显示

二、MFS的部署

部署可以参考官网:https://moosefs.com/download/#current

主机准备

主机ip作用
server1172.25.1.1master
server2172.25.1.2chunk server
server3172.25.1.3chunk server
foundation1172.25.1.250master

主机版本:rhel7.6
所有主机的selinux和防火墙均属于关闭状态。

yum源

对所有节点,yum源是相同的

可以通过以下命令获取:

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

如果时el6或者el8直接将el7更改即可。

下载完repo文件后将gpgcheck关闭

[root@server1 ~]# cd /etc/yum.repos.d/
[root@server1 yum.repos.d]# ls
MooseFS.repo  redhat.repo  rhel.repo
[root@server1 yum.repos.d]# vim MooseFS.repo 
[root@server1 yum.repos.d]# cat MooseFS.repo 
[MooseFS]
name=MooseFS $releasever - $basearch
baseurl=http://ppa.moosefs.com/moosefs-3/yum/el7
gpgcheck=0					#改为0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS
enabled=1

同时在所有节点作master的解析:

# vim /etc/hosts
# cat /etc/hosts
172.25.1.1 server1 mfsmaster

master配置

安装:

[root@server1 ~]#  yum install moosefs-master moosefs-cgi moosefs-cgiserv moosefs-cli -y

其主配置文件是/etc/mfs/mfsmaster.cfg

启动服务和cgi-server:

[root@server1 ~]# systemctl enable --now moosefs-master
[root@server1 ~]# systemctl enable --now moosefs-cgiserv.service 

启动后查看端口:

[root@server1 ~]# 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      3821/mfsmaster      
tcp        0      0 0.0.0.0:9420            0.0.0.0:*               LISTEN      3821/mfsmaster      
tcp        0      0 0.0.0.0:9421            0.0.0.0:*               LISTEN      3821/mfsmaster      
tcp        0      0 0.0.0.0:9425            0.0.0.0:*               LISTEN      3852/python2        
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      3097/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      3300/master         
tcp        0      0 172.25.1.1:22           172.25.1.250:53068      ESTABLISHED 3315/sshd: root@pts 
tcp6       0      0 :::22                   :::*                    LISTEN      3097/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      3300/master  

可以看到开启服务后打开了9419,9420,9421,9425几个端口,其中,9421为监听客户端连接的端口,9419为用于监听metalogger(冷备)、masters和supervisors连接的端口,9420为chunkserver连接的侦听端口,9425为cgi-server的端口,可以在浏览器访问172.25.1.1:9425

在这里插入图片描述
可以看出的当前就只有一个master。

chunk server配置

以下以server2为例,server3的操作和server2类似,首先安装:

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

在chunk server中,/etc/mfs/mfshdd.cfg用来指定其存储路径

创建存储路径:

[root@server2 mfs]# mkdir /mnt/chunk1
[root@server2 mfs]# chown mfs.mfs /mnt/chunk1/			#更改所有者和所有组

制定存储路径:

[root@server2 mfs]# vim mfshdd.cfg
[root@server2 mfs]# tail -1 mfshdd.cfg
/mnt/chunk1

配置后启动服务:

[root@server2 mfs]# systemctl enable --now moosefs-chunkserver

服务启动后查看开启的端口:

[root@server2 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      3874/mfschunkserver 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      3087/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      3309/master         
tcp        0      0 172.25.1.2:45240        172.25.1.1:9420         ESTABLISHED 3874/mfschunkserver 
tcp        0      0 172.25.1.2:22           172.25.1.250:49848      ESTABLISHED 3632/sshd: root@pts 
tcp6       0      0 :::22                   :::*                    LISTEN      3087/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      3309/master         

可以看出开启了一个9422端口,并且打开了一个随即端口45240和master的9420端口进行通信。启动后查看网页端:
在这里插入图片描述可以看到server2已经加入了集群。

在server3中将chunk1改为chunk2即可。启动后查看网页端:
在这里插入图片描述
可以看出看出两个chunk server已经加入集群。

client客户端配置

安装客户端:

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

三、初步使用mfs

新建mfs目录:

[root@foundation1 ~]# cd /mnt/
[root@foundation1 mnt]# mkdir mfs

挂载该目录:

[root@foundation1 mfs]# mfsmount /mnt/mfs/

查看挂载情况:

[root@foundation1 mfs]# mount
mfsmaster:9421 on /mnt/mfs type fuse.mfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)

可以看到挂载的是mfsmaster(server1)的9421端口。

创建测试文件目录:

[root@foundation1 mfs]# mkdir data1
[root@foundation1 mfs]# mkdir data2
[root@foundation1 mfs]# mfsgetgoal data1/			#若报错可以退出这个目录重新进,然后再新建
data1/: 2
[root@foundation1 mfs]# mfsgetgoal data2/
data2/: 2

以上结果表示两个目录都保存了2份。

可以使用以下命令将备份数改为1份:

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

可以看到data1已经保存为1份.拷贝测试文件:

[root@foundation1 mfs]# cp /etc/passwd data1/
[root@foundation1 mfs]# cp /etc/fstab data2/

查看拷贝文件的信息:

[root@foundation1 mfs]# mfsfileinfo data1/passwd 
data1/passwd:
	chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
		copy 1: 172.25.1.3:9422 (status:VALID)
[root@foundation1 mfs]# 
[root@foundation1 mfs]# mfsfileinfo data2/fstab 
data2/fstab:
	chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
		copy 1: 172.25.1.2:9422 (status:VALID)
		copy 2: 172.25.1.3:9422 (status:VALID)

可以看到再data1中的文件只有一个备份保存在server3,而在data2中的文件有两个备份,保存在server2和server3各一份。

当我们把server3的mfs服务关闭后:

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

在这里插入图片描述查看data2中的文件:

[root@foundation1 mfs]# cat data2/fstab 

#
# /etc/fstab
# Created by anaconda on Thu May  2 18:01:16 2019
#
。。。。。。

可以正常查看,查看data1中的文件:

[root@foundation1 mfs]# mfsfileinfo data1/passwd 
data1/passwd:
	chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
		no valid copies !!!

可以看出没有可用拷贝,访问文件会卡住。

现在恢复server3:

[root@server3 ~]# systemctl start moosefs-chunkserver

在这里插入图片描述恢复后查看data1中的文件就可以正常查看:

[root@foundation1 mfs]# cat data1/passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
......

接下来进行切分的实验,默认chunk的大小为64M,当文件大于64M时会进行切分:

在data1中新建一个100M的文件:

[root@foundation1 data1]# dd if=/dev/zero of=bigfile bs=1M count=100

查看这个文件的信息:

[root@foundation1 data1]# mfsfileinfo bigfile 
bigfile:
	chunk 0: 0000000000000003_00000001 / (id:3 ver:1)
		copy 1: 172.25.1.3:9422 (status:VALID)
	chunk 1: 0000000000000004_00000001 / (id:4 ver:1)
		copy 1: 172.25.1.2:9422 (status:VALID)

可以看出被切分成两个chunk,这样就可以保证写入和读取的速度,这也就是分布式文件系统的意义。

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值