开发者社区> 余二五> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Mfs使用与介绍

简介:
+关注继续查看

Mfs使用与介绍

一,关于MooseFS

1MooseFS是容错网络的分布式文件系统。将数据分散在多个物理服务器作为一个资源的用户是可见的。对于标准的文件操作MooseFS充当其他Unix相似的文件系统:

层次结构(目录树)

存储POSIX文件属性(权限,最后访问和修改时间)

支持特殊文件(块设备和字符设备,管道和套接字)

符号链接(指向目标文件的文件名次,不一定MooseFS上的)和硬链接(MooseFS相同的数据文件不同的名字)

2基于IPMooseFS的鲜明特点是:

高可靠性(分布在不同的电脑,可以存储的数据的多个副本)

通过安装新的计算机/磁盘容量动态扩展

删除的文件保留一个可配置的一段时间内(文件系统级别的垃圾桶

快照的文件,即使文件被写入/访问

3架构

MooseFS由四部分组成:

元数据服务器在整个体系中负责管理管理文件系统,目前 MFS 只支持一个元数据服务器 master,这是一个单点故障,需要一个性能稳定的服务器来充当。希望今后 MFS能支持多个 master 服务器,进一步提高系统的可靠性。

元数据日志服务器备份 master 服务器的变化日志文件,文件类型为 changelog_ml.*.mfs。当元数据服务器数据丢失或者损毁,可从日志服务器取得文件进行恢复。

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

客户端。使用 MFS 文件系统来存储和访问的主机称为 MFS 的客户端,成功挂接 MFS文件系统以后,就可以像以前使用 NFS 一样共享这个虚拟性的存储了。

Mfs读数据流程

143801540.png

Client——》master——》client——》chunk——》client

Clientmaster读取元数据(包括inode),返回给client。然后根据inodechunk中读取,将结果返回client

写数据流程

143802463.png

Client——》master——》chunk——》master——》client——》chunk——》chunk——》client

Client先向master获取到inode号,但是master要到chunk上查看并创建新的空间,将结果返回给clientclient这些开始向chunkblock中写入数据,而chunk之间自己将数据同步,完成之后,将成功的结果返回给clientclient成功后,发送信号给master

4 该系统是如何工作的

已安装MooseFS客户端计算机上的所有文件的操作是完全一样的,因为他们将与其他文件系统。操作系统的内核将所有的文件操作FUSE模块,通信mfsmount进程。mfsmount进程通信随后通过网络管理服务器和数据服务器(块服务器)。这整个过程中用户是完全透明的。
1mfsmount与管理服务器进行通信,每个文件的元数据上的操作需要的时间:

创建文件

删除文件

读取目录

读取和修改属性

改变文件大小

在读取或写入数据的开始

任何访问在MFSMETA特殊文件

mfsmount使用直接连接到数据服务器(组块服务器),其存储有关一个文件的块。当写入文件时,写过程完成后,管理服务器接收信息从mfsmount更新文件的长度和最后修改时间。此外,数据服务器(数据块的服务器)通信的互相复制,以便实现适当数量的数据不同的机器上的文件的副本。

2容错

管理命令允许系统管理员指定的目标,或副本应保持数,每个目录或每个文件级别上。目标设置一个以上的和具有一个以上的数据服务器提供容错。当文件数据被存储在许多副本(在一个以上的数据服务器),该系统是,耐故障或一个单一的数据服务器的临时网络中断。这当然并不是指目标设置为1的文件,在这种情况下,该文件将只存在一个单一的数据服务器上,不论有多少数据服务器部署在系统中。格外重要文件可能有他们的目标设定一个高于2的数字,这将使这些文件要耐的情况下,在一个单一的数据服务器出现故障或多个服务器的细分一次。一般设置副本的数量应该是超过预期的数量无法访问或不序服务器。从网络断开,文件存储在其中的至少两个拷贝,将保持从另一个数据服务器访问。现在根据其目标的数据将被复制到另一个可访问的数据服务器再次提供所需的份数,应当指出,如果可用的服务器的数目是低于目标设置为一个给定的文件,所需的份数不会被保留。同样,如果有相同数量的服务器作为当前设定的目标,如果一个数据服务器已达到其容量的100%,这将是无法开始持有一个文件的副本,现在的目标阈值以下,因为另一个数据服务器进入脱机状态。在这些情况下,一个新的数据服务器应尽快系统连接,以保持所需数量的文件的副本,在任何时候一个新的数据服务器可以连接到该系统。立即成为新的容量将可用于存储新文件或担任其他数据服务器的文件复制副本,管理工具存在查询状态的文件系统内的文件,以确定是否有任何的文件目前低于他们的目标(设置数量的副本)。此实用程序也可以被用来改变目标设定需要的数据片段存储在块中的版本管理,所以旧的数据副本(如它已离线一段时间重新连接数据服务器) ,不会造成文件变得语无伦次。数据服务器将同步保持当前的版本过时块将被删除,自由空间将被重新分配给持有新块的块,不会有任何的故障的客户机(mfsmount过程运行)影响的文件系统的一致性,或对其他客户的业务。在最坏的情况下,尚未从失败的客户端计算机发送的数据可能会丢失。

二,实验图

143649331.jpg

在上图中比较典型的网站架构
MFS编译与安装

1,安装

Master server

#wget http://jaist.dl.sourceforge.net/project/moosefs/moosefs/1.6.26/mfs-1.6.26.tar.gz

创建mfs用户来运行mfs进程

#useradd mfs -s /sbin/nologin

#tar xf mfs-1.6.26.tar.gz

#cd mfs-1.6.26

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

如果提示下面错误

******************************** mfsmount disabled ********************************

* fuse library is too old or not installed - mfsmount needs version 2.6 or higher *

***********************************************************************************

checking for fuse_version in -lfuse... no

checking for zlibVersion in -lz... no

configure: error: zlib development library not found

#yum -y install zlib-devel fuse*

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

#Make && make install

2,配置

#cd /usr/local/mfs/etc

主配置文件mfsmaster.cfgmfsexports.cfg设置需要被共享的目录与权限

1,解释mfsmaster.cfg,并不需要做任何修改可以使用

#cp msfmaster.cfg.dist mfsmaster.cfg

#grep -v '^$' mfsmaster.cfg

# WORKING_USER = mfs

# WORKING_GROUP = mfs

# SYSLOG_IDENT = mfsmaster   在syslog日志中的标识为mfsmaster,说明是master产生。

# LOCK_MEMORY = 0    是否执行mlockall()以避免mfsmaster进程溢出,0表示不执行

# NICE_LEVEL = -19      进程运行的优先级

# EXPORTS_FILENAME = /usr/local/mfs/etc/mfsexports.cfg  被共享的目录文件的存放位置

# TOPOLOGY_FILENAME = /usr/local/mfs/etc/mfstopology.cfg  定义mfs的网络访问

# DATA_PATH = /usr/local/mfs/var/mfs 数据存储路径

# BACK_LOGS = 50        元数据改变日志文件数量

# BACK_META_KEEP_PREVIOUS = 1   保持之前的元数据备份数量

# REPLICATIONS_DELAY_INIT = 300   初始延迟复制的时间300

# REPLICATIONS_DELAY_DISCONNECT = 3600  chunk server断开复制的延迟(默认是3600秒)

# MATOML_LISTEN_HOST = *  mata server连接的IP,默认是*,代表任何IP

# MATOML_LISTEN_PORT = 9419   mata server连接的端口

# MATOCS_LISTEN_HOST = *     chunk server连接的ip

# MATOCS_LISTEN_PORT = 9420  chunk server连接的端口

# MATOCL_LISTEN_HOST = *     客户端连接的ip

# MATOCL_LISTEN_PORT = 9421  客户端连接的端口

# CHUNKS_LOOP_CPS = 100000

# CHUNKS_LOOP_TIME = 300

# CHUNKS_SOFT_DEL_LIMIT = 10

# CHUNKS_HARD_DEL_LIMIT = 25

# CHUNKS_WRITE_REP_LIMIT = 2

# CHUNKS_READ_REP_LIMIT = 10

# REJECT_OLD_CLIENTS = 0  拒绝客户比1.6.0版本低的连接,默认0

# deprecated:   弃用下面两项

# CHUNKS_DEL_LIMIT - use CHUNKS_SOFT_DEL_LIMIT instead

# LOCK_FILE - lock system has been changed, and this option is used only to search for old lockfile

2mfsexports.cfg配置

#cp mfsexports.cfg.dist  mfsexport.cfg

#vim mfsexports.cfg 添加一行

192.168.1.0/24          /       rw
其余的都是注释说明,因此大家只需要自行了解

3复制文件

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

这是一个 字节的文件,为 mfs-1.6.x 新增项目

# cp mfstopology.cfg.dist mfstopology.cfg   可以不修改,但是启动mfsmaster时会报错

#/usr/local/mfs/sbin/mfsmaster start  

mfstopology: incomplete definition in line: 7

mfstopology: incomplete definition in line: 7

mfstopology: incomplete definition in line: 22

mfstopology: incomplete definition in line: 22

mfstopology: incomplete definition in line: 28

mfstopology: incomplete definition in line: 28

上面的错误只要将mfstopology.cfg里的行删除就ok。有资料说这个版本有这个bug。下个版本已经修复了。

#/usr/local/mfs/sbin/mfsmaster restart应该不会提示错误了。

# ps -ef |grep mfs

root      9723     1  0 Apr27 ?        00:00:02 python sbin/mfscgiserv

mfs      10103     1  0 00:14 ?        00:00:06 /usr/local/mfs/sbin/mfsmaster restart

root     10141 10110  0 01:35 pts/1    00:00:00 grep mfs

#/usr/local/mfs/sbin/mfsmaster  -h  查看支持哪些参数

usage: /usr/local/mfs/sbin/mfsmaster [-vdu] [-t locktimeout] [-c cfgfile] [start|stop|restart|reload|test]

-v : print version number and exit

-d : run in foreground

-u : log undefined config variables

-t locktimeout : how long wait for lockfile

-c cfgfile : use given config file

#tail -f /var/log/messages

2meta server

安装过程与上面一样,只介绍配置文件

配置文件

#cp mfsmetalogger.cfg.dist mfsmetalogger.cfg

# grep -v '^$' mfsmetalogger.cfg

# WORKING_USER = mfs

# WORKING_GROUP = mfs

# SYSLOG_IDENT = mfsmetalogger

# LOCK_MEMORY = 0

# NICE_LEVEL = -19

# DATA_PATH = /usr/local/mfs/var/mfs

# BACK_LOGS = 50

# BACK_META_KEEP_PREVIOUS = 3   保持之前的元数据备份

# META_DOWNLOAD_FREQ = 24      元数据备件文件的下载请求频率。默认24小时,即每隔一天从master server /usr/local/mfs/var/mfs/下载此文件metadata.mfs.back。当元数据服务关闭或出现故障时,metadata.mfs.back文件会自动消失,此时要恢复整个mfs,需要从元数据日志服务器中取得该文件。这个文件与日志文件共同使用才能够恢复整个被损坏的分布式文件系统。

# MASTER_RECONNECTION_DELAY = 5

MASTER_HOST = 192.168.1.18  只需要修改这一行,改成master serverIP或主机名

# MASTER_PORT = 9419

# MASTER_TIMEOUT = 60

# deprecated, to be removed in MooseFS 1.7

# LOCK_FILE = /var/run/mfs/mfsmetalogger.lock

启动服务

#/usr/local/mfs/sbin/mfsmetaloger -h

usage: sbin/mfsmetalogger [-vdu] [-t locktimeout] [-c cfgfile] [start|stop|restart|reload|test]

-v : print version number and exit

-d : run in foreground

-u : log undefined config variables

-t locktimeout : how long wait for lockfile

-c cfgfile : use given config file

#/usr/local/mfs/sbin/mfsmetaloger start

#losf -i:9419

COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

mfsmetalo 1561  mfs    8u  IPv4  12934      0t0  TCP 192.168.1.19:51647->192.168.1.18:9419 (ESTABLISHED)

已经连接到master server9419端口,如果不能正常连接请检查日志,是否关闭iptablesselinux

3,配置chunk server

安装步骤与master server雷同

配置文件解释

#cd /usr/local/mfs/etc

#cp mfschunkserver.cfg.dist mfschunkserver.cfg

# grep -v '^$' mfschunkserver.cfg

# WORKING_USER = mfs

# WORKING_GROUP = mfs

# SYSLOG_IDENT = mfschunkserver

# LOCK_MEMORY = 0

# NICE_LEVEL = -19

# DATA_PATH = /usr/local/mfs/var/mfs

# MASTER_RECONNECTION_DELAY = 5

# BIND_HOST = *

MASTER_HOST = 192.168.1.18

# MASTER_PORT = 9420

# MASTER_TIMEOUT = 60

# CSSERV_LISTEN_HOST = *   监听来自客户端的连接,这里的客户端指其他chunk server

# CSSERV_LISTEN_PORT = 9422

# HDD_CONF_FILENAME = /usr/local/mfs/etc/mfshdd.cfg  设置分配给mfs使用的磁盘空间文件的位置

# HDD_TEST_FREQ = 10周期性测试10

# deprecated, to be removed in MooseFS 1.7

# LOCK_FILE = /var/run/mfs/mfschunkserver.lock

# BACK_LOGS = 50

# CSSERV_TIMEOUT = 5

配置mfshdd.cfg

#cp mfshdd.cfg.dist  mfshdd.cfg

#vim mfshdd.cfg

/data

#chown -R mfs:mfs /data

#/usr/local/mfs/sbin/mfschunkserver start

# ps -ef |grep mfs

mfs       1463     1  0 May02 ?        00:01:10 sbin/mfschunkserver start

root      1959  1912  0 12:16 pts/0    00:00:00 grep mfs

4,客户端测试

编译mfs

#useradd mfs -s /sbin/nologin

#cd mfs-1.6.26

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

#make;make install

挂载chunk server共享目录

#/usr/local/mfs/bin/mfsmount  /mnt -H 192.168.1.18 注意是masterIP,不是chunk serverIP

查看

# df -h

Filesystem            Size  Used Avail Use% Mounted on

192.168.1.18:9421      15G     0   15G   0% /mnt/

master server 启动mfscgiserv监控客户连接状态

#/usr/local/mfs/mfscgiserv

在浏览器中输入 http://192.168.1.18:9425

卸载直接用umont,如果提示不能卸载,不要强制卸载。用fuser ,lsof -p命令查出哪个进程在使用fuser -u /mnt  查找出进程

Lsof -p 跟踪进程是哪个

四,管理与使用MFS

1mfsmount用法

Mfsmount [-H master] [-P port] [-S path] mountpoint

-H master 管理服务器的IP地址

-P port 管理服务器的端口号,如果是默认的则不必再写

-S path 指出挂载MFS目录的子目录,默认是/目录,即挂载整个MFS目录

Mountpoint 挂载到哪个目录下

2,在启动管理服务器进程时,用了一个“-m”或“-o mfsmeta的选项,这样可以挂载一个辅助的文件系统mfsmeta。辅助文件系统可以在两个方面恢复丢失的数据。

(1)mfs卷上误删除的的文件,而此文件又过了垃圾文件存放期

(2)为了释放磁盘空间而删除或移动文件,当需要恢复这些文件时,文件又过了垃圾文件存放期。

使用MFS辅助文件系统,可以执行

#mfsmount -m /mnt -H 192.168.1.18  这样才可以在垃圾桶里找到删除了文件但还未过期

# ll -R /mnt/mfsmeta/

/mnt/mfsmeta/:

total 0

dr-x------. 2 root root 0 May  3 16:56 reserved

drwx------. 3 root root 0 May  3 16:56 trash  垃圾桶

如果决定挂载mfsmeta,要在master servermfsexport.cfg文件中添加如下

*.Rw

每个文件可以被储存为多个副本,这种情况下,每一个文件所占用的空间要比其文件本身大得多。此外,被删除且在有效期内的文件都放在一个”垃圾箱“中,所以它们也占空间,其大小也依赖文件的份数。

3,设置文件被复制的份数

#mfssetgoal 3 /mnt/ 设置3份比较可靠 加-r递归,对整个目录树操作。

#mfsgetgoal /mnt/   查看设置的份数

4mfscheckfilemfsfileinfo

#mfscheckfile /mnt/

#mfsfileinfo /mnt

#mfsdirinfo /mnt 等同于du -s

5,设置垃圾箱时间

#mfssetrashtime 600 /mnt   600秒,10分钟之后就会被自动删除

#mfsgetrashtime /mnt   查看当前设置的时间,默认是七天

五,启动mfs集群

1,启动mfsmaster进程

2,启动所有的mfschunkserver进程

3,启动mfsmetalogger进程

停止mfs集群

1,所有客户端卸载mfs文件系统

2mfschunkserver -s

3mfsmetalogger -s

4mfsmaster -s

Chunk server的维护

如果每个文件的goal(目标)都大于2,并且没有under-goal文件(这些可以通过mfsgetgoal -rmfsdirinof命令来检查),那么其中一个chunk server在任何时刻都可以停止或重新启动。以后每当需要停止或都重新启动另一个chunk server的时候,要确定之前的数据存储服务器被连接,而且没有under-goal chunks

元数据的备份

1,主要元数据文件metadata.mfsmaster上。

2,元数据改变日志changelog.*.mfs,在meta server上,存储过去n小时内文件改变。N的数值是由back_logs参数设置。参数设置在mfschunkserver.cfg配置,

Master server的恢复

master server崩溃,需要最后一个元数据改变日志changlog和主要元数据文件metadata.mfs,通过

Mfsmetarestore -a 默认会在/usr/local/mfs/var/mfs目录中自动需要的改变需要的改变日志文件和主要元数据文件。Mfsmetarestore命令在恢复时自动查找是metadata.mfs.back文件,而不是metadata.mfs文件,如果找不到metadata.mfs.back,会继续查找是否存在metadata_ml.mfs.back文件,如果没有,将提示恢复出错。

如果安装不是在/usr/local/mfs下,则需要指定路径

Mfsmetarestore -a -d /storage/mfsmaster










本文转自 deng304749970 51CTO博客,原文链接:http://blog.51cto.com/damondeng/1205613,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
ECS使用体验和收获分享
通过学习阿里云ECS云服务器,掌握了LINUX的基本概念和常用的命令
58 0
git使用详细介绍
一、概述git是一个分布式版本控制的工具。现有公共代码仓库:github,gitee,coding。自建仓库,私有仓库(企业使用):gitlab,gitblit。 二、git与svn对比1、git是分布式的,svn不是此为git与其他非分布式的版本控制系统(例如svn,cvs等)最核心的区别。
1424 0
CSI介绍
CSI 介绍 我们知道Kubernetes中关于使用存储卷的机制有In-Tree、Flexvolume模式,那为何还要提出CSI方式呢? In-Tree Volume: 这种方式需要将后端存储的代码逻辑放到K8S的代码中运行,调用引擎与插件间属于强耦合。
2857 0
CSS居中方案介绍
介绍常见的css居中方案
11496 0
mj使用
<p style="padding-top:0px; padding-bottom:0px; margin-top:0px; margin-bottom:0px; clear:both; height:auto; overflow:hidden; font-size:14px; color:rgb(51,51,51); font-family:Arial; line-height:26px
1410 0
+关注
20376
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载