MFS

分布式存储之 MFS

介绍

什么是MFS

MFS: MooseFS 是一个具备冗余容错功能的分布式网络文件系统,它将数据分别存放在多个物理服务器或单独磁盘或分区上,

确保一份数据有多个备份副本,然而对于访问MFS 的客户端或者用户来说,整个分布式网络文件系统集群看起来就像一个资源一样,

从其对文件系统的情况看MooseFS 就相当于UNIX 的文件系统

单个文件是文件存储的最小单位

MFS特性

优点

#高可靠性:每一份数据可以设置多个备份(多分数据),并可以存储在不同的主机上

#高可扩展性:可以很轻松的通过增加主机的磁盘容量或增加主机数量来动态扩展整个文件系统的存储量

#高可容错性:我们可以通过对mfs进行系统设置,实现当数据文件被删除后的一段时间内,依旧存放于主机的回收站中,以备误删除恢复数据

#高数据一致性:即使文件被写入、访问时,我们依然可以轻松完成对文件的一致性快照

缺点

Master 目前是单点,虽然会把数据信息同步到备份服务器,但是恢复需要时间(可以使用企业版或者keepalived+drdb)

Master服务器对主机的内存要求略高(master 会把元数据存储到磁盘中 这样读写效率更高)

默认Metalogger 复制元数据时间较长(可调整)

内存使用问题:

`处理一:百万个文件chunkserver,大概需要300M的内存空间。据此,推算如果未来要出来1个亿的文件chunkserver,大概需要30G内存空间`

应用场景

大规模并发的线上数据存储以及访问(大小文件都适合)

大规模数据处理 如日志分析

MFS组件说明

UTOOLS1574683622813.png

管理服务器 managing server 简称 MASTER :

这个组件的角色是管理整个mfs文件系统的主服务器,除了分发用户请求外,`还用来存储整个文件系统中每个数据文件的 metadata 信息,metadate(元数据)信息包括文件(也可以是目录,socket,管道,块设备等)的大小,属性,文件的位置路径`等

元数据备份服务器 Metadata backup servers 简称 metalogger :

这个组件的作用是备份管理服务器 master 的变化的 metadata 信息日志文件,文件类型为 changelog_ml.*.mfs 。`etalogger主要的功能就是 managing server保持连接,备份他的元数据信息,以便于在管理服务器出问题时,可以经过简单的操作即可让新的主服务器进行工作`

数据存储服务器 data servers(chunk servers) 简称data:

这个组件就是真正存放数据文件实体的服务器了,这个角色可以有多台不同的物理服务器或不同的磁盘以及分区来充当,`当配置数据的副本多于1份时,数据写入到另一个数据服务器后,会根据算法在其他的数据服务器上进行备份.`

客户端服务器组(client servers) 简称client:

这个组件就是挂载并使用mfs文件系统的客户端,`当读写文件时,客户端首先会连接master服务器获取元数据信息,然后根据得到的元数据信息,访问数据服务器并读取或写入实体`,"mfs 客户端通过fuse mechanism实现挂载mfs文件系统的,因此 只有系统支持fuse 就可以作为客户端访问mfs整个文件系统"

增 删 改 读 遍历

遍历

UTOOLS1574767732968.png

读一个文件

UTOOLS1574767808326.png

删除文件

1.用户发起删除请求

2.MFS-Master 把元数据信息删除 并把此操作加到异步队列中(等待n秒后再删除)

修改

1. 用户修改1.txt

2. MFS-Master 到MFS-ChunkServer上拷贝一个文件,返回新文件元数据信息

3. 用户拿着元数据打开文件,并修改

4. 修改完毕后,MFS-Master检测是否修改,否则不保存,是则删除新文件和源文件 保留修改后的文件

5. MFS-Master 更新元数据信息

增加

1. 用户添加了一个文件

2. MFS-Master获取新文件的元数据

3. MFS-Master到 MFS-ChunkServer上面创建了一个块

4. MFS-ChunkServer返回MFS-Master块的位置(id号等)

5. MFS-Master 发送空文件的元数据到用户

6. 用户去访问元数据对应的文件,修改

7. 写入完成 用户告诉MFS-Master 写入完毕

8. MFS-Master去MFS-ChunkServer查询最新的文件大小等元数据

MFS补充描述

Master记录着管理信息,比如:文件路径|大小|存储的位置(ip, port, chunkid) |份数|时间等,

元数据信息存在于内存中,会定期写入metadata.mfs.back中,定期同步到metalogger,

操作实时写入changelog.*.mfs,实时同步到metalogger中。Master启动将metadata.mfs载入内存,重命名为metadata. mfs. back文件

文件以chunk 大小存储,每chunk 最大为64M, 小于64M的,该chunk 的大小即为该文件大小(验证实际chunk 文件略大于实际文件),

超过64M的文件将被切分,以每一份(chunk) 的大小不超过64M为原则;块的生成遵循规则:目录循环写入( 00-FF 256个目录循环,:step为2)、chunk 文件递增生成、大文件切分目录连续

Chunkserver.上的剩余存储空间要大于1GB (Reference Guide有提到),新的数据才会被允许写入,否则,你会看到No space left ondevice的提示,

实际中,测试发现当磁盘使用率达到95%左右的时候,就已经不行写入了,当时可用空间为1.9GB

文件可以有多份copy,当goal 为1时,文件会被随机存到一台chunkserver上,

当goal 的数大于1时,copy会由master调度保存到不同的chunkserver 上,

goal的大小不要超过chunkserver 的数量,否则多出的copy, 不会有chunkserver 去存

构建MFS集群

安装环境

操作系统 CentOS 7.6

服务器配置

MFS-Master 10.0.0.51

MFS-MetaData 10.0.0.52

MFS-ChunkServer1 10.0.0.53 #需要20G空白空间

MFS-ChunkServer2 10.0.0.54 #需要20G空白空间

Client 10.0.0.55

软件配置

zlib zlib-devel MooseFS

搭建MFS-Master

安装MooseFS

#提前安装依赖包

yum install zlib zlib-devel -y

#添加用户

useradd -s /sbin/nologin -M mfs

#解压

unzip mirrors-moosefs-master.zip

#配置脚本

cd moosefs

./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs

# 编译安装

make && make install

#授权

chown -R mfs.mfs /usr/local/mfs

#创建软连接

ln -s /usr/local/mfs/bin/* /usr/local/bin/

ln -s /usr/local/mfs/sbin/* /usr/local/sbin/

#对可执行文件赋予权限

chmod a+x bin/*

chmod a+x sbin/*

配置MooseFS

#查看目录内容

[root@oldboy ~]# cd /usr/local/mfs/

[root@oldboy mfs]# ls

bin etc include lib sbin share var

#开启一个样板文件 则是启动了对应的功能,可以不配置这个文件

cd /etc/mfs/

cp -a mfsmaster.cfg.sample mfsmaster.cfg

#修改描述信息

cp mfsexports.cfg.sample mfsexports.cfg

echo "10.0.0.0/24 . rw,alldirs,maproot=0" >> mfsexports.cfg

#修改持久化文件

cd /usr/local/mfs/var/mfs

cp -a metadata.mfs.empty metadata.mfs.

启动

mfsmaster start

UTOOLS1574770648451.png

UTOOLS1574774791060.png

UTOOLS1574770885790.png

搭建log服务器

log服务器就是在master 宕机后数据不会丢失

安装

和Master没有区别

配置

#开启样板文件

cd /usr/local/mfs/etc/mfs

cp -a mfsmetalogger.cfg.sample mfsmetalogger.cfg

#修改文件

META_DOWNLOAD_FREQ=2 #每次完整备份间隔2小时

MASTER_HOST = 10.0.0.5 #修改主服务器的IP地址

启动

mfsmetalogger start

UTOOLS1574771385291.png

搭建ChunkServer1

安装ChunkServer

#略过把/dev/sdb磁盘 格式化为ext4格式

#

useradd -s /sbin/nologin -M mfs

mkdir /mnt/mfs

mount -t ext4 /dev/sdb1 /mnt/mfs

chown -R mfs.mfs /mnt/mfs

##参考Master 安装步骤

配置

cd /usr/local/mfs/etc/mfs/

cp -a mfschunkserver.cfg.sample mfschunkserver.cfg

cp -a mfshdd.cfg.sample mfshdd.cfg

#修改配置文件 mfschunkserver.cfg

MASTER_HOST = 10.0.0.51

MASTER_PORT = 9420

HDD_CONF_FILENAME = /usr/local/mfs/etc/mfs/mfshdd.cfg

#修改配置文件 mfshdd.cfg

#追加内容

/mnt/mfs

启动

mfschunkserver start

UTOOLS1574771385291.png

构建client

配置

#提前安装依赖包

yum install zlib zlib-devel -y

#添加用户

useradd -s /sbin/nologin -M mfs

#解压

unzip mirrors-moosefs-master.zip

#配置脚本

cd moosefs

./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver

# 编译安装

make && make install

#授权

chown -R mfs.mfs /usr/local/mfs

#创建软连接

ln -s /usr/local/mfs/bin/* /usr/local/bin/

ln -s /usr/local/mfs/sbin/* /usr/local/sbin/

#对可执行文件赋予权限

chmod a+x bin/*

chmod a+x sbin/*

启动

#创建挂载点

mkdir /mfsclient

#挂载文件系统

mfsmount /mfsclient/ -H 10.0.0.51

#修改权限

chown -R mfs.mfs /mfsclient

#创建测试文件

echo "write from 10.0.0.55!" >> /mfsclient/1.txt

#查看文件信息

mfsfileinfo 1.txt

UTOOLS1574772949662.png

添加第二台ChunkServer服务器

安装ChunkServer2

同ChunkServer

配置ChunkServer2

同ChunkServer

启动ChunkServer2

同ChunkServer

回到Client测试自动备份

#添加测试文件2

echo "file2!" >> /mnt/mfs/2.txt

UTOOLS1574773625752.png

MFS维护操作

误删除文件演示

#模拟手贱删除文件

rm -rf 2.txt

#创建恢复目录

mkdir /mfsback

#将mfs的log服务器挂载到/mfsback上

mfsmount -m /mfsback/ -H 10.0.0.51

#进入到垃圾桶

cd /mfsback/trash/

#找到误删除的文件

find `pwd` -name "*2.txt*"

UTOOLS1574773998884.png

#还原文件

mv "/mfsback/trash/009/00000009|2.txt" ./undel/

cd /mfsClient/

ls

1.txt 2.txt

文件服务器mfs,MFS 分布式文件存储系统相关推荐

  1. 盘点分布式文件存储系统____分布式文件存储系统简介

    盘点分布式文件存储系统 在项目的数据存储中,结构化数据通常采用关系型数据库,非结构化数据(文件)的存储就有很多种方式,服务器本地存储.Nas挂载.ftp等等,今天就来盘点一下,分布式文件存储系统. 一 ...

  2. 大数据开发:分布式文件存储系统简介

    在分布式存储技术体系当中,分布式文件存储是其中的分类之一,也是大数据架构当中常常用到的.得益于Hadoop的高人气,Hadoop原生的HDFS分布式文件系统,也广泛为人所知.但是分布式文件存储系统,并 ...

  3. fastdfs安装_用asp.net core结合fastdfs打造分布式文件存储系统

    今天主要是对开发过程,以及对FastDFS这个通用的分布式文件存储服务的单机及集群安装部署过程做个总结.希望对想要自建分布式文件系统的朋友有所帮助. 什么是FastDFS 这里先简单介绍下分布式文件存 ...

  4. 用asp.net core结合fastdfs打造分布式文件存储系统

    最近被安排开发文件存储微服务,要求是能够通过配置来无缝切换我们公司内部研发的文件存储系统,FastDFS,MongDb GridFS,阿里云OSS,腾讯云OSS等.根据任务紧急度暂时先完成了通过配置来 ...

  5. client mac addr不能开机进不去系统_用asp.net core结合fastdfs打造分布式文件存储系统

    今天主要是对开发过程,以及对FastDFS这个通用的分布式文件存储服务的单机及集群安装部署过程做个总结.希望对想要自建分布式文件系统的朋友有所帮助. 什么是FastDFS 这里先简单介绍下分布式文件存 ...

  6. FastDfs分布式文件存储系统

    FastDfs分布式文件存储系统 FastDfs 是一个开源的高性能分布式文件系统(DFS). 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡.主要解决了海量数据存储问题,特别适 ...

  7. Day134-136.尚品汇:平台属性接口、SPU、跨域问题、配置持久化、MinIO 分布式文件存储系统

    目录 Day 02 商品后台管理系统 1. 商品基本知识 2. 回顾Mybatis 3. 添加平台属性接口 (多表查询) Day 03 完成后台平台属性管理.SPU 1. 修改平台属性 2. gate ...

  8. 分布式文件存储系统MinIO笔记

    文章目录 一.MinIO介绍 1.文件系统应用场景 2.MinIO介绍 3.MinIO优点 4.MinIO的基础概念 5.纠删码EC(Erasure Code) 6.存储形式 7.存储方案 二.Min ...

  9. Fast DFS分布式文件存储系统

    Fast DFS分布式文件存储系统 概念: FastDFS 是用 c 语言编写的一款开源的分布式文件系统.FastDFS 为互联网量身定制, 充分考虑了冗余备份.负载均衡.线性扩容等机制,并注重高可用 ...

  10. java gridfs_GridFS 基于MongoDB的分布式文件存储系统

    GridFS 基于MongoDB的分布式文件存储系统 什么是GridFS GridFS是一种将大型文件存储在MongoDB的文件规范.所有官方支持的驱动均实现了GridFS规范.GridFS是Mong ...

最新文章

  1. Brat序列标注工具小结
  2. linux管道的执行顺序
  3. [diary]一下子更新了这么多
  4. 【javascript】—— JS判断浏览器类型、操作系统
  5. 用python编写杨辉三角金字塔_用python实现三道简单算法题:杨辉三角,蛇形矩阵,金字塔...
  6. 1044 火星数字 PAT乙级 (C++)
  7. 160. Intersection of Two Linked Lists(剑指Offer-两个链表的第一个公共结点)
  8. 函数拾取-python
  9. WPS快速截图的方法
  10. ubuntu如何查看java版本_Ubuntu 如何查看安装的 JDK
  11. 科普 | 实景三维模型和地形三维模型 时空克隆 三维视频融合 投影融合 点卯-魔镜系列
  12. Win 开机自动启动 WSL 服务
  13. 福大研究生计算机学硕似录取,2017年福州大学数学与计算机学院专业型硕士研究生拟录取名单...
  14. PHP简单实现个人网站
  15. 数据错误循环冗余检查是什么意思_德尔西曼.交换机是一种什么设备?通过什么方式进行交换?...
  16. about ContentProvider
  17. 浅谈DevSecOps工具链中的源代码安全保障
  18. 啊哈C——学习2.4一起来找茬
  19. Ubuntu发布移动版操作系统
  20. 使用whistle抓包实战

热门文章

  1. 零代码上线小布对话技能:技能平台的实践与思考
  2. 史上最全的自动驾驶研究报告(下)
  3. Float类型出现舍入误差的原因
  4. php euc-cn,php配置中文解说
  5. 举头望明月打计算机术语,与月亮有关的谜语
  6. U盘插上,系统有反应,但是却不识别,电脑能识别其他的U盘,U盘在其他电脑也是好用的经验分享(驱动问题)
  7. 分治法解决赛程安排问题
  8. das for gyb2.0新增特性说明
  9. 数据分析--Python连接阿里云数据库
  10. java 合并图片:将多个图片竖向合并在一起