超详细MFS网络分布式文件系统

-----------------------MFS----------------------

(1)分布式原理

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


(2)MFS原理

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

1)MFS文件系统的组成。

  • 元数据服务器( Master):一台管理整个文件系统的独立主机,在整个体系中负责管理文件系统,维护元数据。(文件的大小、属性、位置信息,包括所有非常规文件的所有信息,例如目录、套接字、管道以及设备文件)
  • 元数据日志服务器( MetaLogger):备份 Master服务器的变化日志文件,文件类型为 changelog ml。*mfs当 Master服务器数据丢失或者损坏时,可以从日志服务器中取得文件,进行恢复。
  • 数据存储服务器( Chunk server):真正存储数据的服务器。存储文件时,会把文件分块保存,并在数据服务器之间进行复制。数据服务器越多,能使用的“容量”就越大,可靠性就越高,性能也就越好。
  • 客户端( Client):可以像挂载NFS一样挂载MFS文件系统,其操作是相同的。
    MFS文件系统的组成架构如图所示。
    超详细MFS网络分布式文件系统

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

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

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

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

---------------------案例实验----------------------

概述
公司之前的图片服务器采用的是NFS,随着业务量增加,多台服务器通过NFS方式共享一个服务器的存储空间,使得NFsS服务器不堪重负,经常出现超时问题。而且NFS存在着单点故障问题,尽管可以rsync同步数据到另外一台服务器上做NFS服务的备份,但这对提高整个系统的性能并无帮助。基于目前的需求,我们需要对NFS服务器进行优化或采取别的解决方案,然而优化并不能应对日益增多的客户端的性能要求,因此选择的解决方案是采用分布式文件系统。采用分布式文件系统后,服务器之间的数据访问不再是一对多的关系,而是多对多的关系,这样可以使性能得到大幅提升。
在当前多种常用的分布式文件系统中,我们采用了MFS( MooseFS)。

[需要注意:MFS的MasterServer管理节点只有一个,也有可能会出现单点故障,后续我会写出解决方案FastDFS】

MFS虽然有单点故障的可能性缺点,但也有很多比较好的特点比如:
1、高可靠(数据的多个拷贝被存储在不同的计算机上)
2、通过附加新的计算机或者硬盘可以实现容量的动态扩展
3、删除的文件可以根据一个可配置的时间周期进行保留(一个文件系统级别的回收站)
4、不受访问和写入影响的文件连贯快照


MFS正式推出是在2008年5月,它是一个具有容错功能的、高可用、可扩展的海量级分布式文件系统。MFS把数据分散在多台服务器上,但用户看到的只是一个源。MFS也像其他类UNX文件系统一样,包含了层级结构和文件属性,可以创建特殊的文件(块设备、字符设备、管道、套接字)、符号链接和硬链接。

实验环境:

主机操作系统IP地址软件安装
Master ServerCentOS 7192.168.233.128mfs-1.6.27-5.tar.gz
MetaLogger ServerCentOS 7192.168.233.6mfs-1.6.27-5.tar.gz
Chunk Server 1CentOS 7192.168.233.4mfs-1.6.27-5.tar.gz
Chunk Server 2CentOS 7192.168.233.10mfs-1.6.27-5.tar.gz
ClientCentOS 7192.168.233.11mfs-1.6.27-5.tar.gz fuse-2.9.2.tar.gz
软件包百度网盘
mfs-1.6.27-5.tar.gz链接:https://pan.baidu.com/s/1-l0ZEisWmlGT2aNqR2nGaw 密码:e98v
fuse-2.9.2.tar.gz链接:https://pan.baidu.com/s/1rZPOnsVISzu0Z0aucr7J7g 密码:71si

一、Master Server和MetaLogger Server共同步骤:

1.关闭防火墙

#关闭防火墙
systemctl stop firewalld.service 
setenforce 0

2.安装环境

yum install gcc gcc-c++ zlib-devel -y

3.创建MFS程序用户

useradd -s /sbin/nologin mfs

4.解压缩MFS文件

tar zxvf mfs-1.6.27-5.tar.gz -C /opt

5.安装设置

cd /opt/mfs-1.6.27/
./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfschunkserver \
--disable-mfsmount

6.编译安装

make && make install

7.复制元数据文件

cd /usr/local/mfs/var/mfs/
cp metadata.mfs.empty metadata.mfs

接下来是Master Server和MetaLogger Server的单独操作

二、Master Server操作

1.复制配置模板,从而开启功能

cd /usr/local/mfs/etc/mfs/
[root@localhost mfs]# cp mfsexports.cfg.dist mfsexports.cfg       #权限配置文件
[root@localhost mfs]# cp mfsmaster.cfg.dist mfsmaster.cfg            #master配置文件
[root@localhost mfs]# cp mfstopology.cfg.dist mfstopology.cfg           #本服务器的日志文件

2.启动主服务器服务:

/usr/local/mfs/sbin/mfsmaster start

3.查看下mfsmaster服务是否开启

ps -ef | grep mfs

超详细MFS网络分布式文件系统

三、MetaLogger Server操作

1.复制配置模板,从而开启功能

cd /usr/local/mfs/etc/mfs/
cp mfsmetalogger.cfg.dist mfsmetalogger.cfg

2.修改mfs日志服务配置文件

[root@localhost mfs]# vim mfsmetalogger.cfg
....以上内容忽略
MASTER_HOST = 192.168.233.128         #修改并指向Master Server的地址
#MASTER_PORT = 9419
....以下内容忽略修改完成后保存退出

3.启动MetaLogger Server服务器服务

/usr/local/mfs/sbin/mfsmetalogger start

4.查看下服务是否开启

[root@localhost mfs]# ps -ef | grep mfs

超详细MFS网络分布式文件系统

日志服务器服务开启

需要注意:
默认为24小时,即每隔一天从元数据服务器Master下载一个metadata.mfs.back 文件。
当元数据服务器关闭或者出故障时,matedata.mfs.back 文件将消失,
那么要恢复整个mfs, 则需从 metalogger服务器取得该文件。
请特别注意这个文件,它与日志文件一起,才能够恢复整个被损坏的分布式文件系统。

四、Chunk Server 1和2共同操作

1.安装环境

yum install gcc gcc-c++ zlib-devel -y

2.创建MFS程序用户

useradd -s /sbin/nologin mfs

3.解压缩文件

tar zxvf mfs-1.6.27-5.tar.gz -C /opt

4.安装设置

cd /opt/mfs-1.6.27/
./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfsmaster \
--disable-mfsmount

5.编译安装

make && make install

6.复制配置模板,从而开启功能

cd /usr/local/mfs/etc/mfs/
cp mfschunkserver.cfg.dist mfschunkserver.cfg
cp mfshdd.cfg.dist mfshdd.cfg

7.修改mfschunk配置文件

vim mfschunkserver.cfg
....以上内容忽略
#BIND_HOST = *
MASTER_HOST = 192.168.233.128                        #修改并指向Master Server的地址
#MASTER_PORT = 9420
....以下内容忽略修改完成后保存退出

8.修改配置文件

vim mfshdd.cfg
....以上内容忽略
#/mnt/hd1
#/mnt/hd2
#etc.
/data                             #添加文件目录
~            
修改完成后保存退出

9.创建文件目录,并且更改属主属组

mkdir /data
chown -R mfs.mfs /data

10.开启服务

/usr/local/mfs/sbin/mfschunkserver start

11.查看服务开启

ps -ef | grep mfs

超详细MFS网络分布式文件系统

五、Client 操作

1.关闭防火墙

systemctl stop firewalld.service 
setenforce 0

2.安装环境

yum install gcc gcc-c++ zlib-devel -y

3.解压缩fuse

tar zxvf fuse-2.9.2.tar.gz -C /opt/

4.编译安装

cd /opt/fuse-2.9.2/
./configure
make && make install

5.编辑环境变量

vim  /etc/profile
#在末尾插入一行:
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH添加完成后保存退出
source /etc/profile

6.安装mfs

cd ~ 
useradd -s /sbin/nologin mfs              #创建mfs程序用户
tar zxvf mfs-1.6.27-5.tar.gz -C /opt              #解压缩文件

7.编译安装mfs

cd /opt/mfs-1.6.27/
./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfsmaster \
--disable-mfschunkserver \
--enable-mfsmount
make && make install

8.加载Fuse内核

mkdir /opt/mfs         #创建挂载目录
modprobe fuse           #加载fuse内核
/usr/local/mfs/bin/mfsmount /opt/mfs -H 192.168.233.128               #Master Server挂载到客户端

超详细MFS网络分布式文件系统

PS:优化客户端操作

Client操作:
1.为了可以直接使用mfsmount这条命令,进行环境变量的修改。
编辑环境变量:

vim /etc/profile
#末尾插入一行:
export PATH=/usr/local/mfs/bin:$PATH添加完成后保存退出

超详细MFS网络分布式文件系统

-----------在Master Server上启动监控程序-----------

启动监控:

/usr/local/mfs/sbin/mfscgiserv

超详细MFS网络分布式文件系统

输入Master Server地址进入监控
http://192.168.233.128:9425
超详细MFS网络分布式文件系统
超详细MFS网络分布式文件系统

转载于:https://blog.51cto.com/13767783/2287720

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/537769.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

markdown文件转word文件

工具: https://github.com/jgm/pandoc/releases/tag/2.2.3.2 下载pandoc安装包之后,像安装普通软件一样点开安装就可以了。安装完成之后,打开cmd命令行,输入pandoc -v,如果正常显示出类似下面的信息就表明安装成功&a…

android全面屏系统哪个版本开始,Android全面屏

所谓全面屏手机,就是屏幕纵横比大于1.86的设备。例如:举个例子.png官方文档:If your app targets Android 8.0 (API level 26) or higher, it fills the entire screen, according to its layout.If your app targets Android 7.1 (API level…

AliOS Things声源定位应用演示

摘要: 1. 概述 利用麦克风阵列进行声源定位在智能降噪、语音增强、语音识别等领域有广泛应用和研究前景。本文介绍基于AliOS Things STM32F413H Discovery开发板实现声源定位算法集成和功能演示。 概述利用麦克风阵列进行声源定位在智能降噪、语音增强、语音识别等…

Mysql 使用正则表达式

需求:匹配出姓名字段里非中文的 SELECT * FROM 表 WHERE REAL_NAME REGEXP ([\\u4e00-\\u9fa5]{1,20}|[a-zA-Z\\.\\s]{1,20}) ; 查询结果如下

Android点击返回键销毁自己,Activity界面销毁 软键盘未收回

在项目开发过程中,界面包含EditText输入框时,输入内容时软键盘弹起。但是此时我们调用界面中自定义的返回按钮执行.finish()方法销毁Activity后发现软键盘并没有跟随关闭收回,参考了网上各种方法后,试验总结出自己项目中可用的方案…

2、Collections操作(自定义类)的各种实现

2019独角兽企业重金招聘Python工程师标准>>> 1、排序(sort) 要想实现排序,必须实现compare方法,这样Collection才知道是怎样的排序规则。普通的数据类型,比如:int 、String、long等都已经实现了Comparable接口&#xf…

Mysql sql语句积累

分组排序 #alter table zxfw_offline_qa add zx_number varchar(50) COMMENT 咨询编号,提问日期提问顺序 AFTER id;/* select (i : case when pre_consult_timeconsult_time then i 1 else 1 end ) rownum, qa.*,(pre_consult_time:consult_time) from zxfw_…

中缀表达式转换成后缀表达式(只适用于加减乘除运算)

1 #include <iostream>2 #include <stack>3 #include <cctype>4 5 using namespace std;6 7 //获取符号的优先级8 int getPriority(char c)9 { 10 int priority -1; 11 switch (c) { 12 case : 13 priority 1; 14 break; 15 …

android多接口请求参数,okhttp3 使用json参数post方式请求接口数据(android)

1. 谷歌自带的json不支持像map一样直接put字符串进去&#xff0c;所以先导入阿里的json包2. 创建json对象&#xff0c;并且放入所要请求的参数 //登录 private void loginRequest() { String url Contents.url"login"; JSONObject json new JSONObject(); json.put…

由浅入深,一文掌握NGINX知识文集

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

MySQL not in查询不出数据(MySQL not in 无效)

今天使用 MySQL 的 not in 进行查询的时候&#xff0c;发现结果里面并没有返回任何数据。SQL 语句没有任何问题&#xff0c;但是结果集却是空&#xff0c;实在无法理解。纠结了半天&#xff0c;最后使用 left join&#xff0c;两表关联&#xff0c;找到了目标数据。但是这样的话…

Python语法特点如注释规则、代码缩进、编码规范等

在Python中&#xff0c;通常包括3种类型的注释&#xff0c;分别是单行注释、多行注释和中文编码声明注释。单行注释在Python中&#xff0c;使用“#”作为单行注释的符号。从符号“#”开始直到换行为止&#xff0c;“#”后面所有的内容都作为注释的内容&#xff0c;并被Python编…

修改android.jar教程,Android修改jar包文件

1、Android studio中新建java文件&#xff0c;取和将要修改的文件相同的文件名&#xff0c;把class文件中代码复制过去&#xff0c;修改需要改动的代码2、新建txt文件&#xff0c;将新建的Java文件按照依赖关系将路经添加到新建的txt文件中&#xff0c;被依赖的放在最前面(ps:此…

安卓市场上架总结

安卓上架截图&#xff08;不要带手机外观&#xff09; 注意&#xff1a;截图不能有二维码小米 至少3张&#xff0c;480*854像素&#xff0c;JPG、PNG格式。腾讯应用宝 请上传2-5张截图&#xff08;尺寸保持一致&#xff09;&#xff0c;单张图片不超过1M。截图不能小于320*480像…

android 左右分栏联动布局,Layout 布局(24 分栏)

基础布局使用单一分栏创建基础的栅格布局(:span“0~24”).el-row {margin-bottom: 20px;&:last-child {margin-bottom: 0;}}.el-col {border-radius: 4px;}.bg-purple-dark {background: #99a9bf;}.bg-purple {background: #d3dce6;}.bg-purple-light {background: #e5e9f2…

洛谷P4238 【模板】多项式求逆(NTT)

传送门 学习了一下大佬的->这里 已知多项式$A(x)$&#xff0c;若存在$A(x)B(x)\equiv 1\pmod{x^n}$ 则称$B(x)$为$A(x)$在模$x^n$下的逆元&#xff0c;记做$A^{-1}(x)$ 具体的来说的话&#xff0c;就是两个多项式$A,B$相乘模$x^n$之后&#xff0c;所有次数大于等于$n$的项都…

win10安装TortoiseGit

TortoiseGit 是Git的可视化工具。所以前提是已经安装了Git&#xff0c;安装很简单一路next。 下载地址&#xff0c;百度搜“TortoiseGit”&#xff0c;一般是第一个。 目前地址是&#xff1a;https://tortoisegit.org/download/ 如果打不开&#xff0c;可以进入腾讯软件中心…

CF1045G AI robots(动态开点线段树)

题意 火星上有$N$个机器人排成一行&#xff0c;第$i$个机器人的位置为$x_{i}$&#xff0c;视野为$r_{i}$&#xff0c;智商为$q_{i}$。我们认为第$i$个机器人可以看到的位置是$[x_{i}-r_{i},x_{i}r_{i}]$。如果一对机器人相互可以看到&#xff0c;且它们的智商$q_{i}$的差距不大…

android qq登录 获取用户信息吗,免登录 只需要一个QQ号就能获取QQ头像和QQ昵称 获取QQ用户信息API...

[PHP] 纯文本查看 复制代码<?php // headerheader("Content-Type:application/json");error_reporting(E_ALL^E_NOTICE^E_WARNING);// 获取QQ号$qq $_GET["qq"];// 过滤if (trim(empty($qq))) {echo json_encode(array(status > error,msg > 未…

Python3.8安装 jupyter报错 NotImplementedError

报错如下&#xff1a; 原因&#xff1a; 是由于 python3.8 asyncio 在 windows 上默认使用 ProactorEventLoop 造成的&#xff0c;而不是之前的 SelectorEventLoop。jupyter 依赖 tornado&#xff0c;而 tornado 在 window 上需要使用 SelectorEventLoop&#xff0c;所以产生这…