MFS 分布式文件系统的部署

MFS 分布式文件系统的部署

1. MFS 介绍

MooseFS 是一种分布式文件系统,它把数据分散存放在多个物理服务器上,前面只放置一台负责”调度"元数据服务器,最终呈现给用户的则是一个统一的资源。相对于集中式文件系统来说,分布式系统拥有更好的扩展性、稳定性、数据的安全性。

  1. MFS 分布式工作原理
    (1) 分布式
    mfs 的分布式文件系统就是把一些分散在多台计算机上的共享文件夹,集合到一个共享文件夹内;用户要访问这些文件夹的时候,只要打开一个文件夹,就可以的看到所有链接到此文件夹内的共享文件夹。
    (2) MFS原理
    MFS是一个具有容错性的网络分布式文件系统,它把数据分散存放在多个物理服务器上,而呈现给用户的则是一个统一的资源。

  2. MFS的组成
    (1) 元数据服务器(Master):在整个体系中负责管理文件系统,维护元数据,目前不支持高可用。
    (2) 元数据日志服务器(MetaLogger):备份Master服务器的变化日志文件,当master服务器损坏,可以从日志服务器中取得文件恢复。
    (3) 数据存储服务器(Chunk Server):真正存储数据的服务器,服务器越多,容量就越大,可靠性越高,性能越好。
    (4) 客户端(Client): 可以像挂载NFS一样 挂载MFS文件系统。

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

  4. 写入的过程
    客户端向元数据服务器发送写入请求,元数据服务器与Chunk Server进行交互,但元数据服务器只在某些服务器创建新的分块Chunks,创建成功后由chunk Servers告知元数据服务器操作成功;元数据服务器告知客户端,可以在哪个Chunk Server的哪些Chunks写入数据;客户端向指定的Chunk Server写入数据,该Chunk Server与其他Chunk Server进行数据同步,同步成功后Chunk Server告知客户端数据写入成功;客户端告知元数据服务器本次写入完毕 。

2. MFS 分布式文件系统的部署

实验环境介绍:4 台主机

IP主机名
client172.25.254.250foundation39
master172.25.25.5server5
chunk1172.25.25.6server6
chunk2172.25.25.7server7
  1. master 端配置
  • 下载
    直接在官网 moosefs.com 下载当前适合我们系统的 RH7 的版本;此次下载的是最新版 3.0.115 ;

在这里插入图片描述

  • 配置:
    安装 cgi 和 cli ;其中 cgi 是命令行接口,管理 mfs,cli 也是命令行接口,用来操作 mfs。
    master 只负责存储元数据,文件大小,名称,如何存储;
    块服务器:文件多大,存储为多少个块(cuhnkserver)
[root@server1 3.0.115]# yum install moosefs-cgi-3.0.115-1.rhsystemd.x86_64.rpm \
moosefs-cli-3.0.115-1.rhsystemd.x86_64.rpm \
moosefs-cgiserv-3.0.115-1.rhsystemd.x86_64.rpm \
moosefs-master-3.0.115-1.rhsystemd.x86_64.rpm -y	安装所需要的包
[root@server1 ~]# cd /etc/mfs/		##配置目录
[root@server1 mfs]# ls
mfsexports.cfg         mfsmaster.cfg         mfstopology.cfg
mfsexports.cfg.sample  mfsmaster.cfg.sample ##模板 mfstopology.cfg.sample
[root@server1 mfs]# systemctl start moosefs-master.service 	##开启服务
[root@server1 mfs]# systemctl start moosefs-cgiserv.service 
[root@server1 mfs]# netstat -antlp  		##端口查看

如图所示,当在 master 安装完成之后,如果只开启 moosefs-master.service服务时,会开启三个端口号;

在这里插入图片描述
如图所示,当再开启 moosefs-cgiserv.service服务时,会再开启一个端口号;其中 9425 是用来管理 mfs 的端口;

在这里插入图片描述
此时在访问网页 172.25.25.5:9425时,虽然可以访问到 mfs 的信息,但是速度非常慢,而且部分数据不会显示;
需要在编辑本地解析文件,写入解析:

[root@server5 mfs]# vim /etc/hosts
[root@server5 mfs]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.25.250	 foundation39.ilt.example.com
172.25.25.1	server1
172.25.25.2	server2
172.25.25.3	server3
172.25.25.4	server4
172.25.25.5	server5 mfsmaster		##master 的解析
172.25.25.6	server6
172.25.25.7	server7
172.25.25.8	server8
[root@server5 mfs]# 

写入解析之后,此时 master 段基本信息已经配置完成;在网页便可以访问。

在这里插入图片描述

显示的信息中:disk为后端 chunkserver 的磁盘,exports 为输出;mount 为后端的挂载。

  1. chunkserve 端的配置

(1)在 chunkserver 端需要安装对应的 chunk 软件包;

[root@server6 3.0.115]# yum install moosefs-chunkserver-3.0.115-1.rhsystemd.x86_64.rpm -y	##安装 chunk 端软件
[root@server6 3.0.115]# vim /etc/hosts		##mfsmaster写入本地解析

在这里插入图片描述

(2)生产环境下,一般会数据会放在独立的硬盘上;添加一块新的硬盘,将其作为 chunkserver 的存储硬盘;相当于做了垂直扩容。
在此添加一块大小为 10G 的硬盘来观察效果;
(服务器支持热插拔,服务器用的是sas硬盘,和普通的sata硬盘不太一样)

在这里插入图片描述

(3)在添加完硬盘之后需要创建分区,格式化,然后再挂载;

[root@server6 mfs]# fdisk -l				##查看新添加的硬盘名
[root@server6 mfs]# fdisk /dev/vdb			##创建分区,将内存全部给新建的分区,保存退出。
[root@server6 3.0.115]# mkfs.xfs /dev/vdb1	##格式化设备
[root@server6 3.0.115]# mkdir /mnt/chunk1	##新建一个数据目录
[root@server6 3.0.115]# vim /etc/fstab 		##设定开机自动挂载,用 id 来挂载,防止设备名会更改

UUID="6d5e40af-85bd-4fd6-b7d2-282614bad331"	/mnt/chunk1 xfs	defaults	0 0
[root@server6 3.0.115]# mount -a			##刷新一下挂载,会重新识别 /etc/fstab 文件内容

查看新添加的硬盘名:

在这里插入图片描述
创建磁盘分区:

在这里插入图片描述
格式化分区信息:

在这里插入图片描述
挂载:

在这里插入图片描述

(4)修改数据目录的权限,并将数据目录写入配置文件中,
: 先挂载设备,再修改权限;否则启动会报错。

[root@server6 3.0.115]# chown mfs.mfs  /mnt/chunk1/		##修改权限
[root@server6 3.0.115]# cd /etc/mfs/
[root@server6 mfs]# ls
mfschunkserver.cfg  mfschunkserver.cfg.sample  mfshdd.cfg  mfshdd.cfg.sample
[root@server6 mfs]# vim mfshdd.cfg		##修改配置文件
[root@server6 mfs]# tail -n 3 mfshdd.cfg
#~/mnt/hd7

/mnt/chunk1				##加入这行新建的目录
[root@server6 mfs]# systemctl start moosefs-chunkserver.service 	##开启服务

在服务开启之后,此时可以看到 chunserver 端开启服务的端口号是 9422 ;

在这里插入图片描述
而此时在 master 端,会显示已经和 chunkserver 建立了连接;

在这里插入图片描述

此时在访问 master 时,会看到服务信息,如图中的新加的硬盘。

在这里插入图片描述
对于 chunkserver2,相当于是水平扩容;创建办法如同以上chunkserver 的配置;下载软件包;写入本地解析文件;创建目录;加一块硬盘,创建分区,格式化,挂载;修改权限,修改配置文件,开启服务即可。
在完成之后,在访问 master 时会有如图所示的信息。

在这里插入图片描述

  1. client 端的配置

(1)下载软件包
安装客户端软件包

[root@foundation39 3.0.115]# yum install moosefs-client-3.0.115-1.rhsystemd.x86_64.rpm -y

(2)写入本地解析文件

[root@foundation39 3.0.115]# cd /etc/mfs/
[root@foundation39 mfs]# ls
mfsmount.cfg  mfsmount.cfg.sample
[root@foundation39 mfs]# vim /etc/host
host.conf    hostname     hosts        hosts.allow  hosts.deny   
[root@foundation39 mfs]# vim /etc/hosts		##编辑本地解析文件,写入解析

在这里插入图片描述
(3)新建数据目录,在配置文件中写入设备存储点

[root@foundation39 mfs]# mkdir /mnt/mfs
[root@foundation39 mfs]# ls
mfsmount.cfg  mfsmount.cfg.sample
[root@foundation39 mfs]# vim mfsmount.cfg
[root@foundation39 mfs]# tail -n 3 mfsmount.cfg

#
/mnt/mfs		##该目录为配置文件中本来就有的,将其注释打开,新建出该目录即可

(4)挂载

[root@foundation39 mfs]# cd /mnt/mfs/
[root@foundation39 mfs]# ls			##确保这个里面没有文件才可以挂载
[root@foundation15 mfs]# cd
[root@foundation15 ~]# mfsmount
mfsmaster accepted connection with parameters: read-write,restricted_ip,admin ; root mapped to root:root

挂载成功之后,可以看到端口信息, 9421 是连接的 master 端。
在这里插入图片描述
挂载信息:

在这里插入图片描述

  1. MFS 的高级特性
    (1) 在数据目录下创建两个目录来观察实验效果
[root@foundation39 ~]# cd /mnt/mfs/
[root@foundation39 mfs]# mkdir dir1
[root@foundation39 mfs]# mkdir dir2

(2)目录中默认是保存两份,可以人为的设定:
使用 mfsgetgoal 命令查看该目录副本数量,目标(goal)是指文件被复制的份数;因为当前只有2个chunkserver (后端存储)
可诶用 mfssetgoal 设定的副本数量为;

[root@foundation39 mfs]# mfsgetgoal dir1
dir1: 2
[root@foundation39 mfs]# mfsgetgoal dir2
dir2: 2
[root@foundation39 mfs]# mfssetgoal -r 1 dir1		##设定 dir1 为默认存一份
dir1:
 inodes with goal changed:                       1
 inodes with goal not changed:                   0
 inodes with permission denied:                  0
[root@foundation39 mfs]# mfsgetgoal dir1
dir1: 1
[root@foundation39 mfs]# mfsgetgoal dir2
dir2: 2

此时 dir1 修改为存1份,dir2 还是默认的两份,存入数据,观察效果:

[root@foundation39 mfs]# cp /etc/passwd dir1/
[root@foundation39 mfs]# cp /etc/fstab dir2/
[root@foundation39 mfs]# cd dir1/
[root@foundation39 dir1]# mfsfileinfo passwd 		## 1中只存入一份,在7号机子
passwd:
	chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
		copy 1: 172.25.25.7:9422 (status:VALID)
[root@foundation39 dir1]# cd ..
[root@foundation39 mfs]# cd dir2/
[root@foundation39 dir2]# mfsfileinfo fstab 		## 2中存入了两份,一份在 6号机子一份在 7号机子
fstab:
	chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
		copy 1: 172.25.25.6:9422 (status:VALID)
		copy 2: 172.25.25.7:9422 (status:VALID)

客户端从 master 查询 chunksever(文件)存储在哪个数据块服务器上,mfsfileinfo 的信息是 master 返回给客户端的;客户端可以直接从相应的 chunkserver上取数据。

由于 dir1 的数据只存入了一份在 7号主机中,如果此时因为一些原因, 7号主机宕机之后,此时数据的查看效果如下所示;
[root@server7 ~]# systemctl stop moosefs-chunkserver

[root@foundation39 dir2]# mfsfileinfo fstab 		##储存了两份数据的目录此时还可以访问数据
fstab:
	chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
		copy 1: 172.25.25.6:9422 (status:VALID)
[root@foundation39 dir2]# cd ..
[root@foundation39 mfs]# cd dir1/
[root@foundation39 dir1]# mfsfileinfo passwd		##储存量一份数据的目录,此时便不能访问
passwd:
	chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
		no valid copies !!!

当再次启动 server7 上的 chunkserver 时,此时之前的数据会再次恢复。
[root@server7 ~]# systemctl start moosefs-chunkserver

[root@foundation39 dir1]# mfsfileinfo passwd 		##dir 1 上的数据恢复
passwd:
	chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
		copy 1: 172.25.25.7:9422 (status:VALID)
[root@foundation39 dir1]# cd ..
[root@foundation39 mfs]# cd dir2/
[root@foundation39 dir2]# mfsfileinfo fstab 		##dir 2上的另外一份数据恢复
fstab:
	chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
		copy 1: 172.25.25.6:9422 (status:VALID)
		copy 2: 172.25.25.7:9422 (status:VALID)
  1. 大文件被切片

在建立的 dir 2 目录中存入一个100M 的数据,如下图所示,用命令 dd if=/dev/zero of=/mnt/mfs/dir2/bigfile bs=1M count=100来生一个100M 的文件,此时可以看到当比较大的数据存入时,会被分割存入两个 chunk 中;
因为在 chunkserver 中的一个块的只能容纳 64M 的数据存储,当大于 64 时便会被分割存储;如100M 就需要两个块来存储,由于我们对于目录 dir2 的设置是存储两份,所以可以看到其生成了两份。

在这里插入图片描述
可以看到,dir2 中的文件一份存入 6号主机一份存入7号主机;此时此时当其中一台挂掉之后,大文件依旧完整;模拟当 6号主机挂掉时:
[root@server6 mfs]# systemctl stop moosefs-chunkserverbigfile 文件依旧完整的存储于7号主机两个块中;

在这里插入图片描述

  1. 垃圾回收站
    在日常生活中,不论是我们的系统回收站还是一些商业用的网盘回收站,当删除文件之后,会有默认保留时间供恢复;当然我们的 mfs 分布式文件系统,也有能满足这样的需求。

如删除 dir 1 中的文件 passwd 文件;

[root@foundation39 mfs]# cd dir1/
[root@foundation39 dir1]# ls
passwd
[root@foundation39 dir1]# rm -fr passwd 		##删除 passwd
[root@foundation39 dir1]# ls
[root@foundation39 dir1]# mkdir /mnt/mfsmeta	##创建数据目录

挂载,将mfs挂载到新建的数据目录中;

[root@foundation39 dir1]# mfsmount -m /mnt/mfsmeta/	##挂载
mfsmaster accepted connection with parameters: read-write,restricted_ip
[root@foundation39 dir1]# mount | grep mfs			##挂载信息过滤
mfsmaster:9421 on /mnt/mfs type fuse.mfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)
mfsmaster:9421 on /mnt/mfsmeta type fuse.mfsmeta (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)
[root@foundation39 dir1]# cd /mnt/mfsmeta/			##挂载之后,新建的目录中会有两个文件
[root@foundation39 mfsmeta]# ls
sustained  trash

可以看到2个目录sustainedtrash,进入 trash 目录中可以看到里面有很多的回收站信息;

在这里插入图片描述

在 trash 目录中查找 passwd 的文件所在的位置,进入到对应的目录移动该文件至 undel 目录中,此时被删除的文件已经被恢复;如图所示:

在这里插入图片描述

  1. 存储类
    通过对于存储信息的管理,来优化存储,达到高速便捷的目的。如:我们日常所有的微信中,朋友圈信息设置为 3 天可见,那么3天的数据就属于是一种冷数据;最热的数据,将其放在 IO 最高的地方(高IO,固态硬盘,存2份),3天之后,热数据转化为冷数据,可以放在机械盘上(sata硬盘,存1份);从而来减少内核的负重,优化存储。

存储类的编写类型:

格式说明
A,B一份在A,一份在B
A,*一份在A,另一份随意
* ,*随机存储两份
AB,C+D一份必须在具有A和B的节点上,一份必须在有C或者D的节点上
A,B[X+Y]一份在A机房,一份在BX或者BY机房
A,A2份都在A
AS,2B[H+S]一份在AS上,另外2份在B的固态盘或者机械盘上(3份)

数据的分布

修改标签

在 server6 上修改 chunkserver1 的配置;

[root@server6 mfs]# pwd
/etc/mfs
[root@server6 mfs]# ls
mfschunkserver.cfg  mfschunkserver.cfg.sample  mfshdd.cfg  mfshdd.cfg.sample
[root@server6 mfs]# vim mfshdd.cfg
[root@server6 mfs]# systemctl reload moosefs-chunkserver

修改文件的内容如下图所示:

在这里插入图片描述

访问master 的效果如下图:

在这里插入图片描述

在 server7 上修改 chunkserver2 的配置;

在这里插入图片描述

访问master 的效果如下图:

在这里插入图片描述

为了后面实验效果,此处在 server8 上再添加一台 chunkserver;配置如下:

[root@server8 3.0.115]# yum install moosefs-chunkserver-3.0.115-1.rhsystemd.x86_64.rpm -y		##安装软件
[root@server8 3.0.115]# vim /etc/hosts			##写入解析
[root@server8 3.0.115]# mkdir /mnt/chunk3		##创建目录
[root@server8 3.0.115]# vim /etc/mfs/mfshdd.cfg	##写入目录
[root@server8 3.0.115]# tail -n2 /etc/mfs/mfshdd.cfg

/mnt/chunk3
[root@server8 3.0.115]# chown mfs.mfs /mnt/chunk3/	##修改权限
[root@server8 3.0.115]# vim /etc/mfs/mfschunkserver.cfg	##修改标签
[root@server8 3.0.115]#  systemctl start moosefs-chunkserver

启动服务之后,访问 master 的效果如下图所示:

在这里插入图片描述
存储类

使用存储类,可以更好的控制文件存储的位置。

存储类:
拥有A标签的都在同一个机房;
一个文件在A机房,也要在B机房就叫双机房,双冗余,class_AB。

创建2个副本都有A的标签,2个副本存储在A机房;和创建2个副本,一个副本存储在A机房,一个副本存储在B机房。

[root@foundation39 mfs]# mfsscadmin create 2A class_2A		##设定存储类
storage class make class_2A: ok
[root@foundation39 mfs]# mfsscadmin create AB class_AB		##设定存储类
storage class make class_AB: ok

在这里插入图片描述

[root@foundation39 mfs]# cd dir2/
[root@foundation39 dir2]# ls
bigfile  fstab
[root@foundation39 dir2]# mfsfileinfo fstab 		##此时两个在 AB
fstab:
	chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
		copy 1: 172.25.25.6:9422 (status:VALID)
		copy 2: 172.25.25.7:9422 (status:VALID)
[root@foundation39 dir2]# mfssetsclass class_2A fstab 		##修改为2A
fstab: storage class: 'class_2A'
[root@foundation39 dir2]# mfsfileinfo fstab 		###修改成功
fstab:
	chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
		copy 1: 172.25.25.6:9422 (status:VALID)
		copy 2: 172.25.25.8:9422 (status:VALID)

在这里插入图片描述
删除存储类
注意:删除之前,要将该类中的数据进行迁移,否则会出现报错

如图当删除一个存储类时,提示该存储类正在用,可以将其他的存储类加载该文件上,让要删除的存储类空余,然后将其删除。

在这里插入图片描述
固态盘S和机械盘H
chunk server1 设置为固态盘

[root@server6 mfs]# vim /etc/mfs/mfschunkserver.cfg
[root@server6 mfs]# systemctl reload moosefs-chunkserver

在这里插入图片描述
chunk server2设置为固态盘

[root@server7 mfs]# vim /etc/mfs/mfschunkserver.cfg
[root@server7 mfs]# systemctl reload moosefs-chunkserver

在这里插入图片描述

chunk server3设置为机械盘

[root@server8 3.0.115]# vim /etc/mfs/mfschunkserver.cfg
[root@server8 3.0.115]#  systemctl reload moosefs-chunkserver

在这里插入图片描述

此时范文 master 时的效果如下图所示:

在这里插入图片描述

此在客户端创建存储类,mfsscadmin create AS,BS class_ASBS,从上图可知 ASBS 是在 6 和7 号主机,设定结果之后如图所示;

在这里插入图片描述

如设定存储类mfsscadmin create BS,2A[S+H] class_H,表示一份在 BS上,另外两份在 AS 或者 AH 上;结果如图所示:

在这里插入图片描述
在这里插入图片描述

数据迁移

为了更好的观察数据迁移的实验效果设定 chunk server2 的磁盘类别如下图所示:

[root@server7 mfs]# vim /etc/mfs/mfschunkserver.cfg
[root@server7 mfs]# systemctl reload moosefs-chunkserver

在这里插入图片描述
在这里插入图片描述
数据迁移命令mfsscadmin create -C 2AS -K AS,BS -A AH,BH -d 30 classZ,其中 -K表示保留在AS和BS上,-A表示打包数据到AH和BH上,-d 表示天数;

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值