MFS分布式文件系统部署

软件下载地址:

https://moosefs.com/support/#documentation

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

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

SAN和MFS比较

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

MFS的特征

   1:层析结构(目录树)

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

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

   4:符号链接,软硬链接

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

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

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

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

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

应用场景

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

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

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

MFS 工作原理和设计架构

角色角色作用

管理服务器
managing server (master)

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

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

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

数据存储服务器
data servers (chunkservers)

负责连接管理服务器,听从管理服务器调度,
提供存储空间,并为客户提供数据传输.

客户机挂载使用
client computers

通过fuse 内核接口挂接远程管理服务器上所
管理的数据存储服务器,.看起来共享的文件
系统和本地unix 文件系统使用一样的效果.

 

 

 

 

 

 

 

 

内部运行机制

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

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

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

端口号简述:(基础理论知识了解一下)

9420  : MFS master和MFS chunck通信端口

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

9419  : MFS master和MFSmetalogger端通信端口

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

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


实验环境

主机IP作用
172.25.81.1mfsmaster server
172.25.81.2metalogger server
172.25.81.3mfschunk server
172.25.81.4mfschunk server
172.25.81.250mfs client

 

 

 

 

 

 

 

安装环境准备:

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

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

fuse概述:

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

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

 

master server端配置:

[root@server1 ~]# curl "https://ppa.moosefs.com/RPM-GPG-KEY-MooseFS" > /etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS

[root@server1 rpm-gpg]# curl "http://ppa.moosefs.com/MooseFS-3-el7.repo" > /etc/yum.repos.d/MooseFS.repo

[root@server1 yum.repos.d]# yum install moosefs-master moosefs-cgi moosefs-cgiserv moosefs-cli -y

首次安装master 时,会自动生成一个名为metadata.mfs.empty 的元数据文件 metadata,该文件是空的。MooseFSmaster 运行时必须有文件metadata.mfs

该方式安装默认存在metadata.mfs文件,不需要进行复制

[root@server1 ~]# vim /etc/mfs/mfsmaster.cfg

配置文件都按默认值的话可以不用改动,如果需要进行修改则需要去掉注释并对相应的参数进行修改,这里把主要的参数列举出来

  6  WORKING_USER = mfs                  //运行masterserver的用户

  9  WORKING_GROUP = mfs              //运行masterserver的组

 30  DATA_PATH = /var/lib/mfs               //数据存放路径

 67  MATOML_LISTEN_HOST = *         //用于chunkserver连接的ip地址(默认*代表所有ip)

 70 _LISTEN_PORT = 9419                 //用于客户端挂载的监听端口

[root@server1 ~]# vim /etc/hosts              ##添加dns解析

172.25.81.1    mfsmaster server1

[root@server1 ~]# systemctl start moosefs-master    ##开启服务

metalogger server端配置:

[root@server2 ~]# curl "https://ppa.moosefs.com/RPM-GPG-KEY-MooseFS" > /etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS

[root@server2 ~]# curl "http://ppa.moosefs.com/MooseFS-3-el7.repo" > /etc/yum.repos.d/MooseFS.repo

[root@server2 ~]# yum install moosefs-metalogger -y

[root@server2 ~]# vim /etc/mfs/mfsmetalogger.cfg

MASTER_HOST = 172.25.81.1             ##MASTER SERVER 的 IP 地址

[root@server2 mfs]# systemctl start moosefs-metalogger

除了修改该配置文件的方法之外,也可以配置dns解析来指定MASTER_HOST,这样就不需要对配置文件进行修改

[root@server2 ~]# vim /etc/hosts

172.25.81.1    mfsmaster server1

查看服务开启状况:

可以看出mfsmaster的9419端口与metalogger 监听的端口地址相连接

[root@server2 mfs]# netstat -anput | grep 9419

[root@server2 mfs]# ps ax | grep mfs

[root@server2 mfs]# lsof -i :9419

查看日志服务器的工作目录:

chunk server(数据存储服务器)端配置(server3 server4)

[root@server3 ~]# curl "https://ppa.moosefs.com/RPM-GPG-KEY-MooseFS" > /etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS

[root@server3 ~]# curl "http://ppa.moosefs.com/MooseFS-3-el7.repo" > /etc/yum.repos.d/MooseFS.repo

[root@server3 ~]# yum install moosefs-chunkserver -y

配置文件位于安装目录/etc/mfs,需要的配置文件有两个:mfschunkserver.cfg和 mfshdd.cfg,

mfschunkserver.cf是主配置文件,mfshdd.cfg是服务器用来分配给 MFS使用的空间,最好是一个单独的硬盘或者一个raid卷,最低要求是一个分区。

mfschunkserver.cfg的配置

[root@server3 ~]# vim /etc/mfs/mfschunkserver.cfg

MASTER_HOST = 172.25.81.1

同样,此处依然可以不作修改,通过dns解析来指定MASTER_HOST

mfshdd.cfg的配置

[root@server3 ~]# vim /etc/mfs/mfshdd.cfg

/mnt/chunk1                    ##在最后一行插入

在这里/mnt/chunk1是一个给mfs的分区,但在本机上是一个独立的磁盘的挂载目录,用 chown mfs.mfs /mnt/chunk1 把属主改变为mfs。

[root@server3 ~]# mkdir /mnt/chunk1

[root@server3 ~]# chown mfs.mfs /mnt/chunk1/

[root@server3 ~]# systemctl start moosefs-chunkserver

server4同server3配置

[root@server4 ~]# vim /etc/mfs/mfshdd.cfg

/mnt/chunk2

[root@server4 ~]# mkdir /mnt/chunk2

[root@server4 ~]# chown mfs.mfs /mnt/chunk2

[root@server4 ~]# systemctl start moosefs-chunkserver

 

查看mfsmaster节点上的端口可以看出9420端口是用于chunkserver 连接的端口地址

对mfscgiserv的使用(master server端)
Mfscgiserv是用python编写的一个web服务器,它的监听端口是9425,启动之后,用户利用浏览器就可全面监控所有客户挂接,chunkserver及master server,客户端的各种操作等等,绝对是个好工具。
     在任何一台装有浏览器的机器上都可以查看:http://172.25.81.1:9425

[root@server1 ~]# systemctl start moosefs-cgiserv

浏览器访问http://172.25.81.1:9425  注意master server的主机名

mfs client端配置:

[root@foundation81 ~]# curl "https://ppa.moosefs.com/RPM-GPG-KEY-MooseFS" > /etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS

[root@foundation81 ~]# curl "http://ppa.moosefs.com/MooseFS-3-el7.repo" > /etc/yum.repos.d/MooseFS.repo

[root@foundation81 ~]# yum install -y moosefs-client

添加dns解析

注意:所有的MFS都是挂接同一个元数据服务器master的IP,而不是其他数据存储服务器chunkserver的IP。

挂接MFS文件系统

[root@foundation81 ~]# mkdir /mnt/mfs              ##创建挂接点

[root@foundation81 ~]# vim /etc/mfs/mfsmount.cfg

/mnt/mfs

[root@foundation81 ~]# mfsmount           ##自动读取后端文件进行挂载

任意数量的客户端主机,可以通过mfsmount进程与管理服务器(接收和更改元数据)和数据服务器(改变实际文件数据)进行交流。

通过df命令查看磁盘使用情况来检查是否被挂接成功,可以看出mfsmaster的9421端口用于客户端连接

mount 命令进行查看

mfsmount的工作过程

▲mfsmount启动后,首先会读取命令行的参数和配置。

▲然后使用fuse定义好挂载点,并对应上mfsmount实现的文件操作函数。

▲设置好到masterserver的连接参数。

▲启动线程fs_nop_thread(keep alive)用于保持与masterserver的连接状态。fs_receive_thread,连接到masterserver并进行通讯,在masterserver上注册,并做一些初始化工作。(挂接客户端,就直接开始尝试连接masterserver)

▲开始响应客户端的输入(由fuse中转)。

重点解释下响应用户输入的过程,输入就是我们所做的创建、修改文件的操作,这些操作会被移交到在fuse_lowlevel_ops中定义好的各个具体的函数,在这些具体的函数中去和masterserver进行通信。

每次用户所做一个文件操作,就会生成一个threc类型的数据:threc// 这个数据类型确实太重要了///===fs_createpacket(rec,CUTOMA_FUSE_READ_CHUNK,8); 一般由这个fs_createpacket来创建

[root@foundation81 ~]# cd /mnt/mfs/

[root@foundation81 mfs]# mkdir dir1

[root@foundation81 mfs]# mkdir dir2

[root@foundation81 mfs]# mfsgetgoal dir1/
dir1/: 2                                                           ##默认的文件副本是两份
[root@foundation81 mfs]# mfsgetgoal dir2/
dir2/: 2                                                           ##默认的文件副本是两份

[root@foundation81 mfs]# mfssetgoal -r 1 dir1/               ##修改dir1的文件备份数为1

[root@foundation81 mfs]# cp /etc/passwd dir1/

[root@foundation81 mfs]# mfsfileinfo dir1/passwd    ##查看文件具体信息,数据存储在chunk2上,因为我们设置了数据复制一份

对于大文件,实行分散存储,在后端的chunk server 上各存储部分数据 ,但实质只是一份数据

[root@foundation81 mfs]# cd dir1/

[root@foundation81 dir1]# dd if=/dev/zero of=bigfile bs=1M count=100

[root@foundation81 mfs]# cd /mnt/mfs/

[root@foundation81 mfs]# cp /etc/fstab dir2/

[root@foundation81 mfs]# mfsfileinfo dir2/fstab

[root@foundation81 mfs]# mfsfileinfo dir2/fstab                         ##该目录下数据默认复制两份,分别放在后端的chunk server上

down掉server3的chunk server服务,再次查看两个文件夹下的文件的状态:

可以看出设置复制数为2的文件夹下的文件存储在另一个chunk server节点上

可以看出设置复制数为1的文件夹下的正常文件已经不被任何一个chunk server节点存储

设置复制数为1的文件夹下的大文件分布存储在该chunk server节点上的部分已经不存在,存储在另一chunk server节点上的数据依然存在

 

不小心删除了元数据,恢复的方法:

[root@foundation81 mfs]# rm -fr dir1/passwd

[root@foundation81 mfs]#  mfsgettrashtime dir1/
dir1/: 86400             ##查看当前文件的缓存时间,在86400 秒内的数据都可以恢复

 

[root@foundation81 mfs]# mkdir /mnt/mfsmeta

[root@foundation81 mfs]# mfsmount -m /mnt/mfsmeta/

[root@foundation81 mfs]# cd /mnt/mfsmeta/

[root@foundation81 mfsmeta]# ls
sustained  trash

[root@foundation81 mfsmeta]# cd trash/

[root@foundation81 trash]# find -name *passwd*
./004/00000004|dir1|passwd

[root@foundation81 trash]# cd 004/
[root@foundation81 004]# ls
00000004|dir1|passwd  undel

[root@foundation81 004]# mv 00000004\|dir1\|passwd undel/              ##恢复文件,注意特殊字符要进行转译

查看文件是否恢复成功:

 

master有时候会处于非正常服务状态,导致客户端无法获取数据

(1)正常关闭master

[root@server1 ~]# systemctl stop moosefs-master

当服务端正常关闭时,客户端就会卡顿

当服务端重新开启时,客户端就会恢复正常

[root@server1 ~]# systemctl start moosefs-master

(2)非正常关闭master

[root@server1 ~]# kill -9  1092

查看/var/lib/mfs目录下的文件,发现没有metadata.mfs文件--主要元数据文件(启动moosefs-master时需要该文件)

此时启动moosefs-master会报错

[root@server1 mfs]# mfsmaster -a            ##利用mfsmaster -a来合并元数据日志,自动恢复模式

查看进程,服务启动成功

为了在每次master非正常关闭之后,都可以保证服务成功开启,这里直接将此命令写入的moosefs-master启动脚本中,这样不管是否正常关闭,都可以保证服务成功开启

[root@server1 mfs]# vim /usr/lib/systemd/system/moosefs-master.service

[Unit]
Description=MooseFS Master server
Wants=network-online.target
After=network.target network-online.target

[Service]
Type=forking
ExecStart=/usr/sbin/mfsmaster -a
ExecStop=/usr/sbin/mfsmaster stop
ExecReload=/usr/sbin/mfsmaster reload
PIDFile=/var/lib/mfs/.mfsmaster.lock
TimeoutStopSec=1800
TimeoutStartSec=1800
Restart=no

[Install]
WantedBy=multi-user.target

[root@server1 mfs]# systemctl daemon-reload

 

[root@server1 mfs]# kill -9 1110                  ##停掉刚刚用命令恢复的服务

[root@server1 mfs]# systemctl start moosefs-master                ##用脚本启动,不报错

[root@server1 mfs]# systemctl status moosefs-master

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值