MFS分布式存储

MFS分布式存储

一 、前言

(1)MFS原理

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

(2)分布式原理

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

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

二 、MFS介绍

(1)MFS文件系统的组成

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

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

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

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

MFS分布式存储_第1张图片

MFS工作示意图

(2)MFS读取数据的处理过程

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

元数据服务器把所需数据存放的位置(Chunk Server的IP地址和Chunk编号)告知客户端

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

Chunk Server向客户端发送数据

(3)MFS写入数据的处理过程

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

元数据服务器与Chunk Server进行交互(只有当所需的分块Chunks存在的时候才进行交互),但元数据服务器只在某些服务器创建新的分块Chunks,创建成功后由元数据服务器告知客户端,可以在哪个Chunk Server的哪些Chunks写入数据。

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

该Chunk Server与其他Chunk Server进行数据同步,同步成功后Chunk Server告知客户端数据写入成功

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

(4)MFS的删除文件过程

客户端有删除操作时,首先向Master发送删除信息;

Master定位到相应元数据信息进行删除,并将chunk server上块的删除操作加入队列异步清理;

响应客户端删除成功的信号

MFS修改文件内容的过程

客户端有修改文件内容时,首先向Master发送操作信息;

Master申请新的块给.swp文件,

客户端关闭文件后,会向Master发送关闭信息;

Master会检测内容是否有更新,若有,则申请新的块存放更改后的文件,删除原有块和.swp文件块;

若无,则直接删除.swp文件块。

(5)MFS重命名文件的过程

客户端重命名文件时,会向Master发送操作信息;

Master直接修改元数据信息中的文件名;返回重命名完成信息;

(6)MFS遍历文件的过程

遍历文件不需要访问chunk server,当有客户端遍历请求时,向Master发送操作信息;

Master返回相应元数据信息;

客户端接收到信息后显示

三 、MFS部署

(1)规划节点

主机

IP地址

作用

server1

192.168.32.133

master

server2

192.168.32.152

chunk server

server3

192.168.32.153

chunk server

foundation1

192.168.32.154

master

(2)Yum源配置

每个节点的Yum源都是相同的。

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

下载完repo文件后,将repo文件内的gpgcheck关闭。

[root@server1 ~]# cd /etc/yum.repos.d/

[root@server1 yum.repos.d]# ls

CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo

CentOS-CR.repo    CentOS-fasttrack.repo  CentOS-Sources.repo  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

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS

enabled=1

将每个节点的selinux和防火墙都关闭。

(3)master配置

在所有节点进行master的解析

[root@server1 ~]# cat /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.32.133 server1 mfsmaster

安装moosefs。(主配置文件在/etc/mfs/mfsmaster.cfg)

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

启动服务和cgi-server

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

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

启动成功后查看端口

[root@server1 ~]#netstat -antpl

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      1792/mfsmaster     

tcp        0      0 0.0.0.0:9420           0.0.0.0:*               LISTEN      1792/mfsmaster     

tcp        0      0 0.0.0.0:9421           0.0.0.0:*               LISTEN      1792/mfsmaster     

tcp        0      0 0.0.0.0:9425           0.0.0.0:*               LISTEN      1815/python2       

tcp        0      0 0.0.0.0:22             0.0.0.0:*               LISTEN      1110/sshd         

tcp        0      0 127.0.0.1:25           0.0.0.0:*               LISTEN      1391/master        

tcp        0     36 192.168.32.133:22       192.168.32.1:29751      ESTABLISHED 1579/sshd: root@pts

tcp        0      0 192.168.32.133:9421     192.168.32.154:58412    ESTABLISHED 1792/mfsmaster     

tcp        0      0 192.168.32.133:9420     192.168.32.152:49116    ESTABLISHED 1792/mfsmaster     

tcp        0      0 192.168.32.133:9420     192.168.32.153:59464    ESTABLISHED 1792/mfsmaster     

tcp6       0      0 :::22              :::*      LISTEN      1110/sshd          

tcp6       0      0 ::1:25             :::*      LISTEN      1391/master        

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

MFS分布式存储_第2张图片

四 、chunk server配置

(1)server2配置

安装moosefs-chunkserver

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

       创建存储路径。

[root@server2 mfs]# mkdir /mnt/chunk1

[root@server2 mfs]# chown mfs.mfs /mnt/chunk1/                 //设置权限

       制定存储路径。

[root@server2 mfs]# vi /etc/mfs/mfshdd.cfg

[root@server2 mfs]# tail -1 mfshdd.cfg

/mnt/chunk1

       启动moosefs-chunkserver服务。

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

[root@server2 mfs]# netstat -antpl                 //查看启动的端口

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      1880/mfschunkserver

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1111/sshd          

tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1409/master        

tcp        0      0 192.168.32.152:9422     192.168.32.154:33868    ESTABLISHED 1880/mfschunkserver

tcp        0    196 192.168.32.152:22       192.168.32.1:29790      ESTABLISHED 1603/sshd: root@pts

tcp        0      0 192.168.32.152:49116    192.168.32.133:9420     ESTABLISHED 1880/mfschunkserver

tcp6       0      0 :::22                   :::*                    LISTEN      1111/sshd          

tcp6       0      0 ::1:25                  :::*                    LISTEN      1409/master        

(2)server3配置

安装moosefs-chunkserver。

[root@server3 mfs]# yum install moosefs-chunkserver -y

       创建存储路径。

[root@server3 mfs]# mkdir /mnt/chunk2

[root@server3 mfs]# chown mfs.mfs /mnt/chunk2/                 //设置权限

       制定存储路径。

[root@server3 mfs]# vi /etc/mfs/mfshdd.cfg

[root@server3 mfs]# tail -1 mfshdd.cfg

/mnt/chunk1

       启动moosefs-chunkserver服务。

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

[root@server3 mfs]# netstat -antpl                 //查看启动的端口

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      11669/mfschunkserve

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1111/sshd          

tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1390/master        

tcp        0      0 192.168.32.153:46720    192.168.100.50:80       TIME_WAIT   -                  

tcp        0      0 192.168.32.153:44106    39.155.141.16:80        TIME_WAIT   -                  

tcp        0      0 192.168.32.153:59464    192.168.32.133:9420     ESTABLISHED 11669/mfschunkserve

tcp        0      0 192.168.32.153:45396    46.17.113.51:80         TIME_WAIT   -                  

tcp        0      0 192.168.32.153:57304    211.68.71.120:80        TIME_WAIT   -                  

tcp        0     36 192.168.32.153:22       192.168.32.1:29842      ESTABLISHED 1604/sshd: root@pts

tcp        0      0 192.168.32.153:9422     192.168.32.154:43252    ESTABLISHED 11669/mfschunkserve

tcp6       0      0 :::22                   :::*                    LISTEN      1111/sshd          

tcp6       0      0 ::1:25                  :::*                    LISTEN      1390/master        

可以看出开启了一个9422端口,并且打开了一个随即端口45240master9420端口进行通信。

启动后查看网页端,可以发现server2server3已经加入集群了。

MFS分布式存储_第3张图片

、初步使用Mfs

1client客户端配置

安装moosefs-client

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

[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)

[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份。

​
[root@foundation1 mfs]# mfssetgoal -r 1 data1/      \\将备份数改为了1份。

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中的文件有两个备份,保持在server2server3中。

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

[root@foundation1 mfs]# cat data2/fstab

# /etc/fstab

# Created by anaconda on Thu May  2 18:01:16 2019

[root@foundation1 mfs]# mfsfileinfo data1/passwd

data1/passwd:

       chunk 0: 0000000000000001_00000001 / (id:1 ver:1)

              no valid copies !!!

所以当我们将server3mfs服务关闭后,查看data2的文件会正常访问,当查看data1时访问文件会卡住。

       现在恢复server3

恢复后查看data1中的文件就可以正常查看

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

[root@foundation1 mfs]# cat data2/fstab

# /etc/fstab

# Created by anaconda on Thu May  2 18:01:16 2019

[root@foundation1 mfs]# mfsfileinfo data1/passwd

data1/passwd:

       chunk 0: 0000000000000001_00000001 / (id:1 ver:1)

              no valid copies !!!

接下来进行切分的,默认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,这样就可以保证写入和读取的速度,这也就是分布式文件系统的意义。

你可能感兴趣的:(Linux运维,网络,华为,wifi)