MFS——分布式文件系统的安装与部署

news/2024/6/29 12:02:04

一.什么是MFS

MFS简介

分布式文件系统是指文件系统管理的物理存储资源通过计算机网络与各节点相连。简单讲,就是把一些分散的共享文件夹,集合到一个文件夹内。对于用户来说,只需要打开该虚拟文件夹,就可以使用这些分散的文件夹进行数据读写。分布式文件系统的好处在于集中访问、简化操作、冗余防灾、读写迅速。

MFS是一个具有容错性的网络分布式文件系统,它把数据分散存放在多个物理服务器上,而呈现给用户的则是一个统一的资源。由元数据服务器master、元数据日志服务器metalogger、数据存储服务器chunk server和客户端client四个组件组成。如图,chunk seerver可以存在多个,可以及时添加,为MFS扩展容量。

MFS文件系统的特性:

(1)通用文件系统,不需要修改上层应用就可以使用(那些需要专门api的dfs很麻烦!)。
(2)可以在线扩容,体系架构可伸缩性极强。(官方的case可以扩到70台了!) 
(3)部署简单。
(4)高可用,可设置任意的文件冗余程度(提供比raid1+0更高的冗余级别,而绝对不会影响读或者写的性能,只会加速!)  
(5)可回收在指定时间内删除的文件(“回收站”提供的是系统级别的服务,不怕误操作了,提供类似oralce 的闪回等高级dbms的即时回滚特性!)  
(6)提供netapp,emc,ibm等商业存储的snapshot特性。(可以对整个文件甚至在正在写入的文件创建文件的快照)
(7)google filesystem的一个实现。 
(8)提供web gui监控接口。

MFS文件系统的组成

  • 元数据服务器(master):负责各个数据存储服务的管理文件读写调度,文件空间回收以及恢复,多节点拷贝。

  • 元数据日志服务器(MetaLogger):负责备份master服务器的变化日志文件,文件类型为changelog_ml.*.mfs,以便于在master
    server出现问题的时候解体器 进行工作。

  • 数据存储服务器(Chunk Server):真正存储用户数据的服务器存储文件时,首先把文件分成块,然后这些块在数据服务器chunkserver之间赋值(复制份数可以手工指定,建议设置副本数为数据服务器可以为多个,并且数据越多,可使用的“磁盘空间越大,”可靠性也越高。

  • 客户端(client):使用MFS文件系统来存储和访问的主机名称为MFS的客户端,成功挂载MFS系统以后,就可以像以前NFS一样共享这个虚拟性的存储了。

MFS读取数据的处理过程

MFS读取数据的过程:

1.首先客户端向master发送请求
2.master把所需的数据存放位置告诉给客户端(chunk server的ip地址和chunk编号)
3.客户端向chunk server发送请求数据
4.chunk server给客户端发送所需的数据

MFS写入数据的处理过程

MFS写数据的过程:

1.客户端向master发送请求
2. master与chunk server进行交互,但是master只对某些chunk server创建新的分块chunks,创建成功后chunk server会给master反馈
3.master告诉客户端,在上一过程指定的chunk server写入数据
4.客户端开始写入数据
5.写入数据的chunk server将这些数据与其他的chunk server进行同步,同步完成反馈结果给客户端。客户端再反馈给master,这时,整个过程结束。

二.MFS分布式文件系统的安装与部署

前提:

主机服务
server1mfsmaster
server2mfschunkserever1
server3mfschunkserever1
物理机client

我们将每个虚拟机的内存都给到了2048,当然给的多点也不介意~(我server1给了4096)

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

实验过程如下所示:

第一步:配置server1

在网上下载mfsmaster的rpm包以及所需的依赖安装包并 安装

  • moosefs-cgi-3.0.103-1.rhsystemd.x86_64.rpm #可以图形化,在浏览器监控的包
  • moosefs-cgiserv-3.0.103-1.rhsystemd.x86_64.rpm
  • moosefs-cli-3.0.103-1.rhsystemd.x86_64.rpm
  • moosefs-master3.0.103-1.rhsystemd.x86_64.rpm -y

安装这些包:

[root@server1 ~]# yum install moosefs-cgi-3.0.103-1.rhsystemd.x86_64.rpm moosefs-cgiserv-3.0.103-1.rhsystemd.x86_64.rpm moosefs-cli-3.0.103-1.rhsystemd.x86_64.rpm moosefs-master-3.0.103-1.rhsystemd.x86_64.rpm -y

在这里插入图片描述

  • 每个节点(server1/2/3和物理机)配置解析

如下:

[root@server1 ~]# vim /etc/hosts
172.25.24.1    server1 mfsmaster

在这里插入图片描述

为了方便,我选择将本地解析文件发送给server2/3和物理机。

在这里插入图片描述
其中域名解析必须写为mfsmaster的原因是由配置文件(/etc/mfs/mfschunkserver.cfg里面搜寻MASTER_HOST可以看到)决定的。

继续配置server1:

[root@server1 ~]# systemctl start moosefs-master          #也可以利用mfsmaster命令开启服务,只是使用命令"systemctl status moosefs-master"查看到的状态是该服务并未开启,但是端口是开着的
[root@server1 ~]# systemctl start moosefs-cgiserv          #也可以利用mfscgiserv命令开启服务,"systemctl status moosefs-cgiserv"查看到的状态是该服务并未开启,但是端口是开着的
[root@server1 ~]# netstat -antulp

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

  • 用于 chunkserver 连接的端口地址(默认是 9420)
  • metalogger 监听的端口地址(默认是 9419)
  • 用于客户端挂接连接的端口地址(默认是 9421)
  • MFS master web 界面监听端口,查看整体运行状态(默认是 9425)

此时可以在客户端的浏览器中访问:172.25.27.1:9425

在这里插入图片描述

第二步:配置mfschunkserever——server2和server3

配置server2

[root@server2 ~]# ls
moosefs-chunkserver-3.0.103-1.rhsystemd.x86_64.rpm
[root@server2 ~]# yum  install-y   moosefs-chunkserver-3.0.103-1.rhsystemd.x86_64.rpm 

在这里插入图片描述
因为我们没有建立磁盘,所以这里使用的是根空间,实际生产环境下应该创建磁盘后,将磁盘挂载在chunkserver的目录下

[root@server2 ~]# mkdir /mnt/chunk1   #
[root@server2 ~]# chown mfs.mfs /mnt/chunk1/ -R   #其中mfs用户和组是安装完软件之后,自动创建的,不需要我们手动建立。

在这里插入图片描述

注意:这里的mfs用户应该和server3的mfs用户uid和gid相同

在这里插入图片描述
在配置文件中注明/mnt/chunk1作为chunkserver的目录

[root@server2 ~]# vim /etc/mfs/mfshdd.cfg   #在文件的最后一行,添加如下的内容
 36 /mnt/chunk1

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

开启moosefs-chunkserver服务之后,查看端口,server2端会在/mnt/chunk1下生成256个目录,用来存放客户端的数据(server3端同理)

在这里插入图片描述

在这里插入图片描述

此时去浏览器查看:

在这里插入图片描述

  • 配置server3(因为server3的步骤与server2的步骤一样,这里就只贴图)

在这里插入图片描述

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

在这里插入图片描述

我们在server1里面使用lsof工具查看:

在这里插入图片描述

第三步:配置物理机(client)

安装moosefs-client对应的rpm

在这里插入图片描述

做域名解析,并在配置文件中指明挂载点

[root@foundation27 ~]# cd /etc/mfs/
[root@foundation27 mfs]# vim mfsmount.cfg   
 17 /mnt/mfs

在这里插入图片描述
在这里插入图片描述
建立挂载目录,并进行挂载

root@foundation27 ~]# mkdir /mnt/mfs   #建立挂载目录
[root@foundation27 ~]# mfsmount   #执行mfsmount命令,可以直接挂载

在这里插入图片描述

在 MFS 挂载点下创建两个目录,并设置其文件存储份数

[root@foundation27 ~]# cd /mnt/mfs/
[root@foundation27 mfs]# ls
[root@foundation27 mfs]# mkdir dir1   #必须在挂载目录中(这里是/mnt/mfs)建立
[root@foundation27 mfs]# mkdir dir2   #必须在挂载目录中(这里是/mnt/mfs)建立
[root@foundation27 mfs]# mfs   #利用两次tab键补全查看mfs的命令

[root@foundation27 mfs]# mfsgetgoal dir1   #获取dir1目录中文件存储份数
[root@foundation27 mfs]# mfsgetgoal dir2   #获取dir2目录中文件存储份数

[root@foundation27 mfs]# mfssetgoal -r 1 dir1   #设置在dir1目录中文件存储份数为一个(以示区分)

错误示范:

在这里插入图片描述

正确的做法:

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

注意:对一个目录设定 “goal”,此目录下的新创建文件和子目录均会继承此目录的设定,但不会改变已经存在的文件及目录的 copy 份数。但使用-r 选项可以更改已经存在的 copy 份数。(这就是mfsgetgobal dir1与mfsgetgobal -r dir1的区别)

[root@foundation83 mfs]# cp /etc/passwd dir1/
[root@foundation83 mfs]# cp /etc/passwd dir2/
[root@foundation83 mfs]# mfsfileinfo dir1/passwd
[root@foundation83 mfs]# mfsfileinfo dir2/passwd

在这里插入图片描述

从图上我们可以看出来,dir1里的文件只有在server3上面有存储,而dir2里的文件在server2/3都有。

第四步测试:验证mfs分布式文件系统中一个block的大小为64M

[root@foundation83 mfs]# dd if=/dev/zero of=dir1/bigfile bs=1M count=65
[root@foundation83 mfs]# mfsfileinfo dir1/bigfile

[root@foundation83 mfs]# dd if=/dev/zero of=dir1/bigfile2 bs=1M count=64
[root@foundation83 mfs]# mfsfileinfo dir1/bigfile2

在这里插入图片描述

第五步测试:演示一个chunkserver挂掉的情况

我们从前面的实验知道,dir1的存储份数只有一份,并且存储在server3上面,dir2有两份server2和server3都有

[root@server3 ~]# mfschunkserver stop            #停掉server3端的mfschunkserver服务。此时在server2端查看端口,已经看不到9422端口。
[root@foundation83 mfs]# mfsfileinfo dir1/passwd        #我们可以看到dir1/passwd文件的存储收到了影响,而dir2/passwd文件的存储并没有收到任何影响

[root@server2 ~]# mfschunkserver         #恢复mfschunkserver服务,在去查看

在这里插入图片描述
在这里插入图片描述
启动mfschunkserver服务

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

第六步演示:恢复垃圾箱的文件

[root@foundation83 mfs]# rm -rf dir1/passwd
[root@foundation83 mfs]# mfsgettrashtime dir1   #文件删除后存放在"垃圾箱"中的时间称为隔离时间,这个时间可以用"mfsgettrashtime"命令来查看,用"mfssettrashtime"命令来设置,单位为秒,默认为 86400秒。

在这里插入图片描述
#86400s这个时间是由mfsmaster的配置文件决定的在这里插入图片描述

在这里插入图片描述

[root@foundation83 mfs]# mkdir /mnt/mfsmeta   
[root@foundation83 mfs]# mfsmount -m /mnt/mfsmeta   #挂载MFSMETA文件系统,它包含目录trash (包含仍然可以被还原的删除文件的信息)和trash/undel(用于获取文件)。把删除的文件,移到trash/undel 下,就可以恢复此文件。
[root@foundation83 mfs]# mount   #该挂载信息,通过df命令是看不到的,只能通过mount命令查看

在这里插入图片描述
mount信息如下:
在这里插入图片描述

![\[root@foundation83 mfs\]# cd /mnt/mfsmeta/
\[root@foundation83 mfsmeta\]# ls
\[root@foundation83 mfsmeta\]# cd trash/   #进入trash目录,该目录下有很多文件
\[root@foundation83 trash\]# find -name *passwd*   #查看要查找的文件passwd所在的位置
\[root@foundation83 trash\]# cd 004
\[root@foundation83 006\]# ls
\[root@foundation83 006\]# mv 00000004\|dir1\|passwd undel/   #将需要恢复的文件移动到undel目录下,注意书写格式

在这里插入图片描述

在这里插入图片描述

此时在去查看,文件已经成功恢复:

在这里插入图片描述
至此MFS分布式文件系统的安装与部署也就完成了。


http://www.niftyadmin.cn/n/2864057.html

相关文章

hibernate学习之第十二篇

《三》混合使用“一个类继承体系一张表”和“每个子类一张表” 比如上面的例子,worker类可能属性很少,而farmer属性却很多,把两者都与person放在同一张表中,则显得表的 结构不是很合理,会有很多字段是null。所以我们可…

MFS——如何恢复挂掉的mfsmaster服务

需要了解的知识: 在正常关闭的时候,/var/lib/mfs目录中会产生metadata.mfs这个文件,这个文件是开启mfsmaster服务时必备的文件。如果没有该文件,那么mfsmaster服务也就起不来。在正常开启的时候,/var/lib/mfs目录中就会产生metad…

hibernate学习之第十二篇(续)

《四》每个具体类映射一张独立的表&#xff08;union-subclass&#xff09;&#xff0c;即表与子类之间的独立一对一关系 所有的子类的表中的信息都是完整的&#xff0c;不需要对表进行关联了。 person.hbm.xml的配置如下&#xff1a; <?xml version"1.0" enco…

MFS ——利用pacemaker+corosync+pcs实现mfsmaster的高可用

一.什么是mfsmaster的高可用 我们知道mfsmaster是调度器&#xff0c;是mfs最核心的地方&#xff0c;如果mfsmaster挂了&#xff0c;整个mfs架构会挂掉&#xff0c;对此我们要对mfsmaster进行高可用冗余操作。 MFS文件系统中&#xff0c;master负责各个数据存储服务器的管理&am…

hibernate学习之第十三篇

load方法的懒加载及原理分析 懒加载的目的&#xff0c;减少不必要的数据库查询&#xff0c;提升性能。 借用前面组件映射中的user类&#xff0c;对测试代码做写改变&#xff1a; public class Main {public static void main(String[] args) {User user new User();user.set…

hibernate学习之第十四篇

hibernate的内部缓存 hibernate的缓存分为两级&#xff1a;一级缓存&#xff08;session级)和二级缓存(sessionFactory级) 缓存的作用主要用来提高性能&#xff0c;可以简单的理解成一个Map&#xff1b;使用缓存涉及到三个操作&#xff1a;把数据放入缓存&#xff0c;从缓存中…

MFS——fence解决mfsmaster高可用中的脑裂问题

一、fence的工作原理 fence的工作原理&#xff1a; 当意外原因导致主机异常或者宕机时&#xff0c;备机会首先调用FENCE设备&#xff0c;然后通过FENCE设备将异常主机重启或者从网络隔离&#xff0c;当FENCE操作成功执行后&#xff0c;返回信息给备机&#xff0c;备机在接到FE…

Hibernate二级缓存攻略(转)

Hibernate二级缓存攻略(转)  很多人对二级缓存都不太了解&#xff0c;或者是有错误的认识&#xff0c;我一直想写一篇文章介绍一下hibernate的二级缓存的&#xff0c;今天终于忍不住了。   我的经验主要来自hibernate2.1版本&#xff0c;基本原理和3.0、3.1是一样的&#xf…