MFS分布式文件系统

1、MFS的介绍

前段时间在老家,信号太差了,连不上服务器。耽误时间了,小伙伴久等了。

mooseFS(moose 驼鹿)是一款网络分布式文件系统。它把数据分散在多台服务器上,但对于用户来讲,看到的只是一个源。MFS也像其他类unix文件系统一样,包含了层级结构(目录树),存储着文件属性(权限,最后访问和修改时间),可以创建特殊的文件(块设备,字符设备,管道,套接字),符号链接,硬链接。MooseFS[MFS]是一个具有容错性的网络分布式文件系统。它把数据分散存放在多个物理服务器上,而呈现给用户的则是一个统一的资源。

http://www.moosefs.org/reference-guide.html //安装和帮助文档

http://www.moosefs.com/官网

http://ftp.be.debian.org/pub/linux/utils/util-linux-ng/v2.24/ 工具包

2、SAN和MFS比较

当我们存储服务器的容量达到瓶颈之后,那我们就需要采用分布式的文件系统来扩大存储容量,类似与百度云的存储,也是采用分布式存储!

3、MFS的特征

1:层析结构(目录树)

2:存储文件属性(权限,访问和修改时间)

3:支持特殊文件(块设备,字符设备,管道)

4:符号链接,软硬链接

5:对文件系统访问可以通过IP地址或者密码进行访问限制

6:高可靠(数据的多个拷贝存储在不同的计算机上)

7:通过附加新的计算机或者硬盘可以实现容量的动态拓展

8:删除文件可以根据一个可配置的时间周期进行保留

9:不受访问和写入影响的文件连贯快照

4、应用场景

谈及MooseFS的应用场景,其实就是去谈分布式文件系统的应用场景。

1)大规模高并发的数据存储及访问(小文件、大文件),

2)大规模的数据处理,如日志分析

5、MFS分布式文件系统部署方案

MooseFS 是一种分布式文件系统,MooseFS 文件系统结构包括以下四种角色:

1 管理服务器 managing server (master):

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

2元数据日志服务器 Metalogger server(Metalogger):

负责备份 master 服务器的变化日志文件,文件类型为 changelog_ml.*.mfs,以便于在 master server 出问题的时候接替其进行工作

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

听从管理服务器调度,提供存储空间,并为客户提供数据传输.。真正存储用户数据的服务器。存储文件时,首先把文件分成块,然后这些块在数据服务器 chunkserver之间复 制(复制份数可以手工指定,建议设置副本数为 3)。数据服务器可以是多个,并且数量越多,可使用的“磁盘空间”越大,可靠性也越高。

4 客户机挂载使用 client computers :

客户端挂载远程mfs服务器共享出的存储并使用。 通过 fuse 内核接口挂载进程管理服务器上所管理的数据存储服务器共享出的硬盘。共享的文件系统的用法和 nfs 相似。使用 MFS 文件系统来存储和访问的主机称为 MFS 的客户端,成功挂接 MFS 文件系统以后,就可以像以前使用 NFS 一样共享这个虚拟性的存储了。

6、内部运行机制及端口关系图

1:客户端请求访问存储,请求发送到了MFS Master

2:MFS Master根据我们的请求,查询所需要的文件分布在那些服务器上

3:客户端直接和存储服务器进行数据存储和读写

端口号:

9420 :MFS master和MFS chunck通信端口

9421 :MFS master和MFS Client端通信端口

9419 :MFS master和MFS metalogger端通信端口

9422 :MFS chunck 和MFS Client端通信端口

9425 :MFS master web界面监听端口,查看整体运行状态

7、MFS分布式文件实验环境

服务器 角色

docker-02 管理服务器managing server (master) 和元数据日志服务器(Metalogger)

docker-03 数据存储服务器data servers (chunk servers )

docker-01 客户机挂载使用client computers

安装环境准备:

所有服务器端和客户端都要支持fuse内核模块。

由于mfs的客户端程序也就是加载mfs磁盘系统的命令是使用了fuse,因此只要是想挂载mfs的服务器,必要的前提条件就是先安装fuse,这样编译mfs的时候才能顺利通过。

fuse概述:

用户空间文件系统(Filesystem in Userspace,简称FUSE)是操作系统中的概念,指完全在用户态实现的文件系统。目前Linux通过内核模块对此进行支持。一些文件系统如NTFS-3G(作用:让Linux中对NTFS文件系统提供支持) 使用FUSE实现。

注:2.6以上内核,都自带fuse

8、部署MFS分布式文件系统

8.1MFS管理服务器

 [root@docker-02 ~]# yum install rpm-build gcc gcc-c++ fuse-devel zlib-devel –y
 [root@docker-02 ~]# useradd -s /sbin/nologin mfs
 [root@docker-02 ~]# unzip moosefs-master.zip.zip && cd moosefs-master
 [root@docker-02 ~]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
 [root@docker-02 ~]# make -j 4 && make install
 [root@docker-02 ~]# cd /usr/local/mfs/
 [root@docker-02 mfs]# ls
 bin etc include lib sbin share var
 ##配置文件相关介绍
 bin         #客户端工具
 etc         #服务器的配置文件都放在该目录中 
 sbin       #服务端启动程序。如:元数据服务器端程序 mfsmaster、数据存储服务器端服务程序mfschunkserver
 share     #文档 
 var        #元数据目录(可在配置文件中自定义到其他目录)
 [root@docker-02 mfs]# cd /usr/local/mfs/etc/mfs/
 [root@docker-02 mfs]# cp mfsmaster.cfg.sample mfsmaster.cfg
 [root@docker-02 mfs]# cp mfsexports.cfg.sample mfsexports.cfg
 [root@docker-02 mfs]# cp mfsmetalogger.cfg.sample mfsmetalogger.cfg
 [root@docker-02 mfs]# cd /usr/local/mfs/var/mfs/
 [root@docker-02 mfs]# cp metadata.mfs.empty metadata.mfs ##首次安装 master 时,会自动生成一个名为 metadata.mfs.empty 的元数据文件 metadata,该文件是空的。MooseFS master 运行必须有文件 metadata.mfs
 [root@docker-02 mfs]# cd /usr/local/mfs/etc/mfs/ [root@docker-02 mfs]# vim mfsmaster.cfg 30DATA_PATH =/usr/local/mfs/var/mfs
 78MATOCS_LISTEN_HOST =*    ##监听所有 IP,也直接写一个 IP 地址,如 172.17.1.150
 81MATOCS_LISTEN_PORT =9420
 ##注:这个配置文件中所有注释掉的设置都是默认的配置。 
 如果有需要还可以修改 DATA_PATH 的设置将元数据目录存储到其他的分区或磁盘。其他的参数都很简单根据需要调整即可。 
 master 会打开 9420端口等待 mfschunkserver 数据存储服务器连接 
 [root@docker-02 mfs]# chown -R mfs:mfs /usr/local/mfs/
 [root@docker-02 mfs]# /usr/local/mfs/sbin/mfsmaster start ##各个端口开始起来
 open files limit has been setto: 16384
 working directory: /usr/local/mfs/var/mfs
 lockfile created and locked
 initializing mfsmaster modules ...
 mfsexports: unknown option 'mapproot=0'inline: 7(ignored)
 exports file has been loaded
 mfstopology configuration file (/usr/local/mfs/etc/mfstopology.cfg) not found -using defaults
 loading metadata ...
 metadata file has been loaded
 stats file has been loaded
 master <-> metaloggers module: listen on *:9419
 master <-> chunkservers module: listen on *:9420
 main master server module: listen on *:9421
 mfsmaster daemon initialized properly
 [root@docker-02 mfs]# netstat -antup | grep 94*
 tcp        0     00.0.0.0:9419                0.0.0.0:*                   LISTEN      1188/mfsmaster      
 tcp        0     00.0.0.0:9420                0.0.0.0:*                   LISTEN      1188/mfsmaster      
 tcp        0     00.0.0.0:9421                0.0.0.0:*                   LISTEN      1188/mfsmaster      
 tcp        0     00.0.0.0:9110                0.0.0.0:*                   LISTEN      1085/node_exporter  
 [root@docker-02 mfs]# /usr/local/mfs/sbin/mfsmaster stop ##服务的关闭方法
 [root@docker-02 mfs]# ll /usr/local/mfs/var/mfs/ ##查看生成的日志文件
 总用量 4892
 -rw-r-----1mfs mfs      8710月 1013:53 changelog.0.mfs
 -rw-r-----1mfs mfs      4310月 1011:14 changelog.2.mfs
 -rw-r-----1mfs mfs    182610月  323:15 changelog.50.mfs
 -rw-r-----1mfs mfs     12010月 1013:00 metadata.crc
 -rw-r--r--1mfs mfs       810月  223:45 metadata.mfs.back
 -rw-r-----1mfs mfs    310310月 1012:00 metadata.mfs.back.1
 -rw-r-----1mfs mfs 498455210月 1013:00 stats.mfs 
 ##指定需要共享的权限
 [root@docker-02 mfs]# cd /usr/local/mfs/etc/mfs
 [root@docker-02 mfs]# vim mfsexports.cfg
  1# Allow everything but "meta".
  2*                       /       rw,alldirs,admin,maproot=0:0
  3
  4# Allow "meta".
  5*                       .       rw
  6172.17.1.152/20         /       rw,alldirs,maproot=0
  7172.17.1.0/20         /       rw,alldirs,mapproot=0

注:mfsexports.cfg 文件每一条由三部分组成,第一部分表示客户端的 IP 地址,第二部分表示被挂接的目录,第三部分表示客户端拥有的权限,下面对三个部分逐行解释

1.客户端 IP 地址

* 所有 IP 地址

x.x.x.x 单个 IP 地址

x.x.x.x/m.m.m.m IP 网络地址/子网掩码

f.f.f.f-t.t.t.t IP 段

2.被挂载的目录

/ 表示 MooseFS 的根

. 表示 MFSMETA 文件系

3.客户端拥有的权限

ro 只读

rw 读写

alldirs 允许挂载任何指定的子目录

maproot 映射为 root 用户还是指定的用户

password 指定客户端密码

8.2安装MFS元数据日志服务器

元数据日志守护进程是在安装master server 时一同安装的,最小的要求并不比master 本身大,可以被运行在任何机器上(例如任一台chunkserver),但是最好是放置在MooseFS master 的备份机上,备份master 服务器的变化日志文件,文件类型为changelog_ml.*.mfs。因为主要的master server 一旦失效,可能就会将这台metalogger 机器取代而作为master server。

 [root@docker-02 ~]# unzip moosefs-master.zip && cd moosefs-master
 ##编译的时候,用户在若在其他设备,需要新建运行mfsmetalogger角色的用户,docker-02上在安装master的时候,已经新建,略过,其他机器上,应该执行useradd -s /sbin/nologin mfs
 [root@docker-02 ~]# ./configure --prefix=/usr/local/mfsmeta --with-default-user=mfs --with-default-group=mfs
 [root@docker-02 ~]# make && make install
 [root@docker-02 ~]# cd /usr/local/mfsmeta/etc/mfs/
 [root@docker-02 mfs]# cp mfsmetalogger.cfg.sample mfsmetalogger.cfg
 [root@docker-02 mfs]# vim mfsmetalogger.cfg
 39# META_DOWNLOAD_FREQ = 24 ##24元数据备份文件下载请求频率。默认为24小时,即每隔一天从元数据服务器 
 #(MASTER) 下载一个 metadata.mfs.back 文 件 。 当元数据服务器关闭或者出故障时 , matedata.mfs.back 文件将消失,那么要恢复整个 mfs,则需从 metalogger 服务器取得该文件。请特别注意这个文件,它与日志文件一起,才能够恢复整个被损坏的分布式文件系统。 
 52MASTER_HOST =172.17.1.151  ##此行原来注释了,修改,并启用
 #MASTER_HOST,这个文件中需要修改的是 MASTER_HOST 变量,这个变量的值是 MASTER SERVER 的 IP 地址 
 [root@docker-02 mfs]# chown -R mfs:mfs /usr/local/mfsmeta/
 [root@docker-02 mfs]# /usr/local/mfsmeta/sbin/mfsmetalogger start
 open files limit has been setto: 4096
 working directory: /usr/local/mfsmeta/var/mfs
 lockfile created and locked
 initializing mfsmetalogger modules ...
 mfsmetalogger daemon initialized properly
 [root@docker-02 mfs]# /usr/local/mfsmeta/sbin/mfsmetalogger stop ##服务关闭方法
 [root@docker-02 mfs]# netstat -antup | grep 9419
 tcp        0     00.0.0.0:9419                0.0.0.0:*                   LISTEN      1257/mfsmaster      
 tcp        0     0172.17.1.151:9419           172.17.1.151:37936         ESTABLISHED 1257/mfsmaster 

注:mfsmaster到此为止,我们Master和Metalogger服务器安装完成,且在一台机器上

8.3安装配置Chunk Server

安装数据服务器(chunkservers),这些机器的磁盘上要有适当的剩余空间,而且操作系统要遵循POSIX 标准(验证了的有这些:Linux, FreeBSD, Mac OS X and OpenSolaris)。

Chunkserver存储数据时,是在一个普通的文件系统如ext4上储存数据块或碎片(chunks/fragments)作为文件。你在chunkserver上看不到完整的文件。

 [root@docker-03 ~]# yum install rpm-build gcc gcc-c++ fuse-devel zlib-devel –y
 [root@docker-03 ~]# useradd -s /sbin/nologin mfs
 [root@docker-03 ~]# unzip moosefs-master.zip
 [root@docker-03 ~]# cd moosefs-master && ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs && make && make install
 [root@docker-03 ~]# cd /usr/local/mfs/etc/mfs/
 [root@docker-03 mfs]# cp mfschunkserver.cfg.sample mfschunkserver.cfg ##主配置文件
 [root@docker-03 mfs]# cp mfshdd.cfg.sample mfshdd.cfg ##使用的磁盘空间配置文件
 [root@docker-03 mfs]# vim mfschunkserver.cfg
 81MASTER_HOST =172.17.1.151  ##元数据服务器的名称或地址,可以是主机名,也可以是 ip 地址
 84MASTER_PORT =9420 ##可以启用它,也可以不启用,不启用,默认就是9420
 104# CSSERV_LISTEN_PORT = 9422 ##这个监听端口用于与其它数据存储服务器间的连接,通常是数据复制
 [root@docker-03 mfs]# vim mfshdd.cfg
 34#~/mnt/hd7
 35/tmp  ##在这里/tmp 是一个给 mfs 的分区,但在生产环境是一个独立的磁盘的挂载目录 
 [root@docker-03 mfs]# chown -R mfs:mfs /usr/local/mfs/
 [root@docker-03 mfs]# /usr/local/mfs/sbin/mfschunkserver start
 open files limit has been setto: 16384
 working directory: /usr/local/mfs/var/mfs
 lockfile created and locked
 setting glibc malloc arena max to 4
 setting glibc malloc arena test to 4
 initializing mfschunkserver modules ...
 hdd space manager: path to scan: /tmp/
 hdd space manager: startbackground hdd scanning (searching foravailable chunks)
 main server module: listen on *:9422
 stats file has been loaded
 mfschunkserver daemon initialized properly
 [root@docker-03 mfs]# ls /tmp ##分块存储,人工时无法认识的
 00 10 20 30 40 50 60 70 80 90A0 B0 C0 D0 E0 F0 pai_cache
 01 11 21 31 41 51 61 71 81 91A1 B1 C1 D1 E1 F1 PaiFunction.py
 02 12 22 32 42 52 62 72 82 92A2 B2 C2 D2 E2 F2 PaiFunction.pyc
 03 13 23 33 43 53 63 73 83 93A3 B3 C3 D3 E3 F3 pai.py
 04 14 24 34 44 54 64 74 84 94A4 B4 C4 D4 E4 F4 pai.pyc
 05 15 25 35 45 55 65 75 85 95A5 B5 C5 D5 E5 F5
 06 16 26 36 46 56 66 76 86 96A6 B6 C6 D6 E6 F6
 07 17 27 37 47 57 67 77 87 97A7 B7 C7 D7 E7 F7
 08 18 28 38 48 58 68 78 88 98A8 B8 C8 D8 E8 F8
 09 19 29 39 49 59 69 79 89 99A9 B9 C9 D9 E9 F9
 0A 1A 2A 3A 4A 5A 6A 7A 8A 9A AA BA CA DA EA FA
 0B 1B 2B 3B 4B 5B 6B 7B 8B 9B AB BB CB DB EB FB
 0C 1C 2C 3C 4C 5C 6C 7C 8C 9C AC BC CC DC EC FC
 0D 1D 2D 3D 4D 5D 6D 7D 8D 9D AD BD CD DD ED FD
 0E 1E 2E 3E 4E 5E 6E 7E 8E 9E AE BE CE DE EE FE
 0F 1F 2F 3F 4F 5F 6F 7F 8F 9F AF BF CF DF EF FF
 [root@docker-03 mfs]# /usr/local/mfs/sbin/mfschunkserver stop ##关闭方法

8.4配置客户端

 [root@docker-01 ~]# yum install rpm-build gcc gcc-c++ fuse-devel zlib-devel -y
 [root@docker-01 ~]# useradd -s /sbin/nologin mfs
 [root@docker-01 ~]# unzip moosefs-master.zip && cd moosefs-master
 [root@docker-01 ~]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --enable-mfsmount ##开启mfsmount必须有,作为客户端必须有的这一个选项
 [root@docker-01 ~]# make -j 4 && make install
 [root@docker-01 ~]# mkdir /mfs
 [root@docker-01 ~]# lsmod | grep fuse
 fuse                   80180 0
 [root@docker-01 ~]# modprobe fuse ##若没有,加载一下
 [root@docker-01 ~]# ln -s /usr/local/mfs/bin/mfsmount /usr/bin/mfsmount
 ##将mfs共享出来的存储空间挂载到/mfs目录下:
 [root@docker-01 ~]# mfsmount /mfs/ -H 172.17.1.151 -p

9、测试

 [root@docker-03 mfs]# yum install -y tree
 [root@docker-03 mfs]# tree /tmp/
 /tmp/
 ├── 00
 ├── 01
 ├── 02
 ├── 03
 ├── 04
 ├── 05
 ├── 06
 ├── 07
 ├── 08
 ├── 09
 ├── 0A
 ├── 0B
 ├── 0C
 ├── 0D
 ├── 0E
 [root@docker-01 ~]# cp -r /boot/* /mfs/ ##客户端写入数据
 [root@docker-03 mfs]# tree /tmp/ ##存储服务器监控
 /tmp/
 ├── 00
 ├── 01
 │   └── chunk_0000000000000001_00000001.mfs
 ├── 02
 │   └── chunk_0000000000000002_00000001.mfs
 ├── 03
 │   └── chunk_0000000000000003_00000001.mfs
 ├── 04
 │   └── chunk_0000000000000004_00000001.mfs
 ├── 05
 │   └── chunk_0000000000000005_00000001.mfs
 [root@docker-01 ~]# ls /mfs/ ##客户端是看得到的文件内容,而在我们的Chunk Server上看到的都是一些碎片
 config-2.6.32-754.10.1.el6.x86_64

10、配置web监控

主用来监控 MFS 各节点状态信息,可部署在任一节点服务器。

 [root@docker-02 ~]# /usr/local/mfs/sbin/mfscgiserv ##启动网页监控

浏览器:http://172.17.1.151:9425/(如需指定服务器ip修改share/mfscgi/mfs.cgi)

本文分享自微信公众号 - 运维猫(centos15)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券