分布式文件系统简介

分布式文件系统是指文件系统管理的物理存储资源,不一定在本地节点上,而是通过网络与节点相连。

就是把一些分散的(分布在局域网内各个计算机上)共享文件夹,集合到一个文件夹内(虚拟共享文件夹)。

对于用户来说,要访问这些共享文件夹时,只要打开这个虚拟共享文件夹,就可以看到所有链接到虚拟共享文件夹内的共享文件夹,用户感觉不到这些共享文件是分散在各个计算机上的。

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

MFS简介

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

MFS的组成

元数据服务器Master 在整个体系中负责管理文件系统,维护元数据。
元数据日志服务器MetaLogger 备份Master服务器的变化日志文件,文件类型为changelog_ml.*.mfs。当Master服务器数据丢失或者损坏时,可以从日志服务器中取得文件,进行修复。
数据存储服务器Chunk Server 真正存储数据的服务器。存储文件时,会把文件分块保存,在数据服务器之间进行复制。数据服务器越多,能使用的“容量”就越大,可靠性就越高,性能也就越好。
客户端Client 可以像挂载NFS一样挂载MFS文件系统,其操作是相同的。

MFS的工作过程

MFS读取数据的处理过程

#客户端向元数据服务器发出读请求#元数据服务器把数据存放的位置
(Chunk Server的IP地址和Chunk编号)告知客户端
(一份大的数据会被分块,存储在不同的数据服务器上)#客户端向已知的Chunk Server请求发送数据#Chunk Server向客户端发送数据


分为create创建和update 修改文件:

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

实验环境:

192.168.122.101 master 结点
192.168.122.1012数据结点1 (Chunk结点)
192.168.122.103 数据结点2
192.168.122.201真机 客户端

在每个节点上

1、添加键值

curl "https://ppa.moosefs.com/RPM-GPG-KEY-MooseFS" > /etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS

2、添加YUM源

curl "http://ppa.moosefs.com/MooseFS-3-el7.repo" > /etc/yum.repos.d/MooseFS.repo
[root@mfs1 mfs]# curl "https://ppa.moosefs.com/RPM-GPG-KEY-MooseFS" > /etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS% Total    % Received % Xferd  Average Speed   Time    Time     Time  CurrentDload  Upload   Total   Spent    Left  Speed
100  1796  100  1796    0     0    392      0  0:00:04  0:00:04 --:--:--   531
[root@mfs1 mfs]# curl "http://ppa.moosefs.com/MooseFS-3-el7.repo" > /etc/yum.repos.d/MooseFS.repo% Total    % Received % Xferd  Average Speed   Time    Time     Time  CurrentDload  Upload   Total   Spent    Left  Speed
100   168  100   168    0     0    121      0  0:00:01  0:00:01 --:--:--   121

master上

3、安装MooseFS组件。

yum install moosefs-master moosefs-cgi moosefs-cgiserv moosefs-cli -y

4、编辑解析文件 /etc/hosts,并发送给其他节点。

5、安装完,可以看到MFS的配置文件 mfsmaster.cfg 和 mfsexports.cfg

mfsexports.cfg:被挂接目录及权限设置mfsmaster.cfg:主配置文件,凡是用#注释掉的变量均使用其默认值。

6、此时,启动moosefs-master和moosefs-cgiserv,查看端口发现开启了9419,9420,9421,9425端口。

systemctl start moosefs-master  #启动MASTERsystemctl start moosefs-cgiserv  #启动WEBUI监控服务
[root@mfs1 mfs]# netstat -antuple
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode      PID/Program name
tcp        0      0 0.0.0.0:9419            0.0.0.0:*               LISTEN      997        26226      2425/mfsmaster
tcp        0      0 0.0.0.0:9420            0.0.0.0:*               LISTEN      997        26227      2425/mfsmaster
tcp        0      0 0.0.0.0:9421            0.0.0.0:*               LISTEN      997        26228      2425/mfsmaster
tcp        0      0 0.0.0.0:9425            0.0.0.0:*               LISTEN      0          26317      2435/python2
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      0          17434      1326/sshd
tcp        0      0 192.168.122.101:22      192.168.122.1:44176     ESTABLISHED 0          20120      1954/sshd: root@pts
tcp6       0      0 :::22                   :::*                    LISTEN      0          17443      1326/sshd
9419:metalogger监听的端口地址,和元数据服务器通信的,当master宕机,可以通过它的日志,接管master的服务
9420:用于chunkserver连接的端口地址
9421:用于客户端挂接连接的端口地址
9425:web界面监控各个分布节点的端口


输入master的主机名

此时还没有chunk server数据结点,所以server这里是空的


Chunk Server

8、在真正存储数据的节点安装moosefs-chunkserver

yum install moosefs-chunkserver -y

9、安装之后在两个节点都会生成一个mfs用户

[root@mfs2 ~]# id mfs
uid=997(mfs) gid=995(mfs) 组=995(mfs)

10、编辑配置文件mfshdd.cfg,写入mfs的分区/mnt/chunk1

mfshdd.cfg:空间配置文件
/mnt/chunk1 是一个给mfs 的分区,但在本机上是一个独立的目录,最好是一个单独的硬盘或者一个raid 卷,最低要求是一个分区。

11、更改目录/mnt/chunk 的权限,因为mfschunkserver进程是用mfs运行的

chown -R mfs:mfs /mnt/chunk1
[root@mfs2 mnt]# mkdir /mnt/chunk1
[root@mfs2 mnt]# chown -R mfs:mfs /mnt/chunk1

做解析

12、开启chunkserver

systemctl start moosefs-chunkserver
netstat -antlupe  ##开通监控的端口9422
[root@mfs2 mfs]# netstat -antuple
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode      PID/Program name
tcp        0      0 0.0.0.0:9422            0.0.0.0:*               LISTEN      997        26134      2566/mfschunkserver
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      0          16724      1063/sshd
tcp        0      0 192.168.122.102:22      192.168.122.1:53190     ESTABLISHED 0          18664      1951/sshd: root@pts
tcp        0      0 192.168.122.102:40370   192.168.122.101:9420    ESTABLISHED 997        26137      2566/mfschunkserver
tcp6       0      0 :::22                   :::*                    LISTEN      0          16733      1063/sshd

13、此时就可以看到,mfsmaster与chunkserver建立了连接

[root@mfs1 mfs]# lsof -i :9420
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mfsmaster 2425  mfs   11u  IPv4  26227      0t0  TCP *:9420 (LISTEN)
mfsmaster 2425  mfs   13u  IPv4  26938      0t0  TCP mfs1:9420->mfs2:40370 (ESTABLISHED)
mfsmaster 2425  mfs   14u  IPv4  26940      0t0  TCP mfs1:9420->mfs3:59054 (ESTABLISHED)

客户端结点:

[root@git1 ~]# curl "http://ppa.moosefs.com/MooseFS-3-el7.repo" > /etc/yum.repos.d/MooseFS.repo% Total    % Received % Xferd  Average Speed   Time    Time     Time  CurrentDload  Upload   Total   Spent    Left  Speed
100   168  100   168    0     0    186      0 --:--:-- --:--:-- --:--:--   186[root@git1 ~]# curl "http://ppa.moosefs.com/MooseFS-3-el7.repo" > /etc/yum.repos.d/MooseFS.repo% Total    % Received % Xferd  Average Speed   Time    Time     Time  CurrentDload  Upload   Total   Spent    Left  Speed
100   168  100   168    0     0    186      0 --:--:-- --:--:-- --:--:--   186
[root@git1 ~]# yum install moosefs-client -y

做解析

测试使用

在客户端创建空目录:
[root@git1 ~]# mkdir /mnt/mfs
[root@git1 ~]# cd /mnt/mfs/挂载
[root@git1 mfs]# mfsmount /mnt/mfs/
mfsmaster accepted connection with parameters: read-write,restricted_ip,admin ; root mapped to root:root客户端和master通信使用的是master的9421端口
[root@git1 mfs]# mount
mfsmaster:9421 on /mnt/mfs type fuse.mfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)

第一次创建时失败

[root@git1 mfs]# mkdir data1
[root@git1 mfs]# mfsgetgoal data1
data1: realpath error on (/mnt/mfs/data1): ENOENT (No such file or directory)
[root@git1 mfs]# ls
data1
[root@git1 mfs]# cd
[root@git1 ~]# cd /mnt/mfs/
[root@git1 mfs]# ls
[root@git1 mfs]#

再创建一次就好了

[root@git1 mfs]# mkdir data1
[root@git1 mfs]# mkdir data2
[root@git1 mfs]# ls
data1  data2
[root@git1 mfs]# mfsgetgoal data1
data1: 2
[root@git1 mfs]# mfsgetgoal data2
data2: 2

目标(goal),是指文件被拷贝的份数,设定了拷贝的份数后是可以通过mfsgetgoal ,mfscheckfile 和mfsfileinfo命令来证实的,也可以通过mfsrsetgoal 来改变设定。

mfssetgoal -r 份数 目录/文件

[root@git1 mfs]# mfssetgoal -r 1 data1
data1:inodes with goal changed:                       1inodes with goal not changed:                   0inodes with permission denied:                  0
[root@git1 mfs]# cd data1
[root@git1 data1]# cp /etc/passwd .
[root@git1 data1]# ls
passwd

data2设置拷贝2份,并拷贝文件

[root@git1 mfs]# mfsgetgoal data2
data2: 2
[root@git1 mfs]# cd data2
[root@git1 data2]# cp /etc/fstab .

查看各自的信息

[root@git1 mfs]# mfsfileinfo data1/passwd
data1/passwd:chunk 0: 0000000000000001_00000001 / (id:1 ver:1)copy 1: 192.168.122.103:9422 (status:VALID)
[root@git1 mfs]# mfsfileinfo data2/fstab
data2/fstab:chunk 0: 0000000000000002_00000001 / (id:2 ver:1)copy 1: 192.168.122.102:9422 (status:VALID)copy 2: 192.168.122.103:9422 (status:VALID)

测试挂掉mfs3

[root@mfs3 mfs]#  systemctl stop moosefs-chunkserver
[root@git1 mfs]# mfsfileinfo data1/passwd
data1/passwd:chunk 0: 0000000000000001_00000001 / (id:1 ver:1)no valid copies !!!
[root@git1 mfs]# cat data1/passwd
^C不影响data2的访问,因为它还有一个副本
[root@git1 mfs]# mfsfileinfo data2/fstab
data2/fstab:chunk 0: 0000000000000002_00000001 / (id:2 ver:1)copy 1: 192.168.122.102:9422 (status:VALID)

测试大文件会在数据结点上分开存储

[root@git1 data1]# dd if=/dev/zero  of=bigoff bs=1M count=100
记录了100+0 的读入
记录了100+0 的写出
104857600字节(105 MB)已复制,9.78126 秒,10.7 MB/秒
[root@git1 data1]# ls
bigoff  passwd
[root@git1 data1]# mfsfileinfo bigoff
bigoff:chunk 0: 0000000000000003_00000001 / (id:3 ver:1)copy 1: 192.168.122.103:9422 (status:VALID)chunk 1: 0000000000000004_00000001 / (id:4 ver:1)copy 1: 192.168.122.102:9422 (status:VALID)

在chunkserver中,文件是这样存储的

MFS分布式文件系统(一) ——MFS简介+部署+使用相关推荐

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

    目录 一.MFS分布式文件系统详述 分布式简介 MFS分布式文件系统的原理 MFS文件系统的组成 MFS文件系统的工作过程 二.MFS分布式文件系统的部署 实验环境 配置Master Server 配 ...

  2. MFS分布式文件系统的搭建

    MFS分布式文件系统的搭建 一:介绍MFS ​ MFS(MooseFS)是一个具有容错性的网络分布式文件系统.它把数据分散存放在多个物理服务器上,而呈现给用户的则是一个统一的资源. MFS也像其他类的 ...

  3. MFS分布式文件系统存储之文件的删除恢复

    MFS分布式文件系统存储之文件的删除恢复 在MFS分布式集群中,Client 客户端的~/mfs/bin下具有很多的脚本命令,实现对master server虚拟共享目录的管理. 今天主要介绍的是其下 ...

  4. MFS分布式文件系统及监控

    MFS分布式文件系统 文件系统:ext4.xfs.ext3 mooseFS(moose 驼鹿)是一款网络分布式文件系统.它把数据分散在多台服务器上,但对于用户来讲,看到的只是一个源.MFS也像其他类U ...

  5. MFS分布式文件系统2-master双机热备实现高可用

    文章目录 前言 1.mfs1和mfs5做文件系统同步 1.1 将mfs5主机改为master主机 1.2 配置iscsi文件系统并同步元数据 1.2.1 删除moosefs2上的硬盘 1.2.2 配置 ...

  6. 分布式文件系统FastDFS架构辨析,分布式文件系统FastDFS_V4.06安装部署

    FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实现,支持Linux.FreeBSD.AIX等UNIX系统.它只能通过专有API对文件进行存取访问,不支持POSIX接口方式, ...

  7. SHELL脚本自动化部署MFS分布式文件系统

    前言:在我们运维中,最常见的文件存储系统大概就是NFS了,但是随着网站压力不断增加,NFS渐渐不能满足企业数据增长需求,有木有自动扩展.高效.部署.实施方便快捷的分布式存储供我们使用呢?那我们来看一下 ...

  8. CentOS下MFS分布式文件系统搭建

    MFS : 网络分布式文件系统中的一种 Project web site: http://www.moosefs.com/ Installation and using MooseFS: http:/ ...

  9. mfs 分布式文件系统

    mfs权威指南(moosefs)分布式文件系统一站式解决方案(部署,性能测试)不断更新 http://bbs.chinaunix.net/thread-1644309-1-1.html 1. 我在性能 ...

最新文章

  1. java的工作原理你知道吗_每天用Mybatis,但是Mybatis的工作原理你真的知道吗?
  2. 3-自定义BI启动版是否隐藏CMS名称
  3. MySQL——复杂的多表查询——以超市交易数据为例
  4. ubuntu 定时执行php文件,Ubuntu crontab 定时执行php脚本文件
  5. Unity3D 人形血条制作小知识
  6. virsh 网络设置_KVM使用Network Filters进行虚拟机网络管理 | leon的博客
  7. Java中throws和throw的区别讲解
  8. xslt 定义表格html表格样式,使用 XSLT 作为 HTML 的样式表.doc
  9. LED显示驱动(五):视频设备显示驱动调试步骤总结
  10. 新风系统风速推荐表_实验室通风系统的设计和应用
  11. 微信小程序云开发教程-WXML入门-常用组件和属性
  12. Lucene的几种分词系统
  13. 处理App状态改变的策略
  14. Android源码下载repo以及repo init总结
  15. 关于@Vaild注解的使用
  16. TX2安装ubuntu18,ROS
  17. dya6小数据池、集合、编码、深浅copy
  18. 鱼眼图像畸变校正matlab,鱼眼镜头畸变校正算法的设计
  19. 前端优化系列:DNS预获取 dns-prefetch 提升页面载入速度
  20. 容器里有10升油,现在只有两个分别能装3升和7升油的瓶子,需要将10 升油等分成2 个5 升油。程序输出分油次数最少的详细操作过程

热门文章

  1. iPhone6 AirDrop找不到我的mac解决方法!注销mac和iPhone的icloud账号
  2. 加油站三维可视化监控系统,安全管理智慧运营
  3. 初探Spring(一)
  4. UltraEdit文本编辑器丨功能介绍
  5. poro注册码一枚872611
  6. 实战演练,网络验证破解系列教程
  7. 编码质量评估-编码视频效果测试场景归纳
  8. Linux 下删除当前目录及子目录下的所有.o文件
  9. sinr的值在多少到多少之间
  10. win10启动项设置(win10启动项设置了没有用)