MFS搭建分布式文件系统

NFS以及openfiler,这两个都是属于存储服务器。但是他们有着共同的缺点,就是性能不好,因为都是通过共享方式共享一个存储空间,使得服务器不堪重负,会出现超时的问题,而且存在着单点故障问题,尽管可以用rsync同步数据到另外一台服务器上做备份,但性能方便没有任何提升。而分布式文件系统把数据分散存储在不同的服务器上,读取数据的时候相当于同时读取,不像nfs是一对多的关系,而是多对多的关系,这样可以使得性能得到大幅提升。

这次使用MFS搭建分布式文件系统,MFS具有容错功能,高可用,可扩展的功能。MFS把数据分散在多台服务器上,但用户看到的只是一个源。

一、实验拓扑

二、实验步骤

1、搭建master server

1)停止防火墙并且安装支持包

2)创建用户

3)安装源码包

[root@centos3 ~]#tar zxf mfs-1.6.27-5.tar.gz

[root@centos3 ~]# cdmfs-1.6.27

[root@centos3mfs-1.6.27]# ./configure \

> --prefix=/usr/local/mfs\ //指定安装目录

> --with-default-user=mfs\ //指定程序运行用户

> --with-default-group=mfs\ //指定程序运行组

> --disable-mfschunkserver \ //禁用Chunk功能

> --disable-mfsmount \ //禁用mfsmount功能

[root@centos3mfs-1.6.27]# make && make install //编译安装

4)复制文件(设置配置文件)

[root@centos3 mfs-1.6.

[root@centos3 mfs]# ls

mfsexports.cfg.dist mfsmetalogger.cfg.dist

mfsmaster.cfg.dist mfstopology.cfg.dist

[root@centos3 mfs]# cpmfsexports.cfg.dist mfsexports.cfg

[root@centos3 mfs]# cpmfsmaster.cfg.dist mfsmaster.cfg

[root@centos3 mfs]# cpmfstopology.cfg.dist mfstopology.cfg

[root@centos3 mfs]# cd/usr/local/mfs/var/mfs/

[root@centos3 mfs]# ls

metadata.mfs.empty

[root@centos1 mfs]# cp metadata.mfs.empty metadata.mfs

这个文件存放master的变化信息

5)启动master server

第一遍启动的时候,可能会出现以下错误信息

[root@centos1mfs]# /usr/local/mfs/sbin/mfsmaster start

loadingsessions ... file not found

如果出现以上信息,则关闭服务并重新启动就可以了

[root@centos1mfs]# /usr/local/mfs/sbin/mfsmaster -s

-s 表示停止服务

[root@centos1mfs]# /usr/local/mfs/sbin/mfsmaster start

再启动就不会出现任何信息

6)查看是否启动

7)建立防火墙规则(如果开启了防火墙需要建立规则,如果关闭不用)

[root@centos1 mfs]# iptables -I INPUT -p tcp--dport 9419 -j ACCEPT

[root@centos1 mfs]# iptables -I INPUT -p tcp--dport 9420 -j ACCEPT

[root@centos1 mfs]# iptables -I INPUT -p tcp--dport 9421 -j ACCEPT

[root@centos1 mfs]# service iptables save

2、搭建metalogger server

1)安装mfs(同上)

2)复制文件

3)修改配置文件,添加master服务器的ip地址(注意去掉注释和空格)

4)开启服务

5)查看端口

[root@centos5 mfs]# netstat -anpt | grep 9419

tcp 0 0 192.168.1.2:50929 192.168.1.1:9419 ESTABLISHED 53533/mfsmetalogger

[root@centos5 mfs]# iptables -I INPUT -p tcp--dport 9419 -j ACCEPT

[root@centos5 mfs]# service iptables save

3、搭建chunk server(二台chunk的搭建步骤相同)

1)安装mfs(同上)

2)复制文件

3)修改配置文件(一共2个)

vim mfschunkserver.cfg

vim mfshdd.cfg(添加/data)

4)建立文件夹并开启服务

5)开启例外

[root@centos5 mfs]#ps -ef | grep mfs

mfs 56269 1 0 20:54 ? 00:00:00/usr/local/mfs/sbin/mfschunkserver start

root 56297 48740 0 20:54 pts/0 00:00:00 grep mfs

[root@centos5 mfs]#iptables -I INPUT -p tcp --dport 9422 -j ACCEPT

[root@centos5 mfs]#service iptables save

注意:第二台chunk的配置和上面的配置完全一样,这里就不在说明了

4、客户端配置

1)安装fuseMFS(客户端依赖于FUSE)

2)设置环境变量

添加下面这行

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

3)安装MFS客户端

配置

tar zxf mfs-1.6.27-5.tar.gz

cd mfs-1.6.27

4)挂载文件系统

5)查看挂载情况

6)设置文件被复制的份数并测试

MFS客户端安装完毕后,会生成/usr/local/mfs/bin/目录,在这个目录下有很多命令是用户所需的。

vim /etc/profile文件中增加一行(为了方便执行命令)

mfsgetgoal命令用来查看文件被复制的分数,利用-r命令可以对整个目录进行递归,goal是指文件比复制的分数。

mfssetgoal命令用来设置文件被复制的分数,生产环境下Chunkserver节点数量应大于2,文件副本数小于Chunk server服务器的数量。由于我有二台Chunk server 我将副本数量设置为1

设置查询文件被复制的份数:

在/mnt/mfs中建立文件

分别打开两台chunk查看/data下,都产生了加密的数据,说明成功了

5、mfs监控

mfscgiserv是用python编写的一个web服务器,其监听端口是9425,可以再masster server 上通过 /usr/local/mfs/sbin/mfscgiserv来启动,用户利用浏览器就可以完全监控所有客户挂接、Chunk server、Master server等。

在一台客户端上通过浏览器访问http://192.168.1.100:9425

在master主机上配置下面的过程

[root@centos3 mfs]#/usr/local/mfs/sbin/mfscgiserv

lockfilecreated and locked

startingsimple cgi server (host: any , port: 9425 , rootpath:/usr/local/mfs/share/mfscgi)

[root@centos3 mfs]# iptables -I INPUT -p tcp --dport9425 -j ACCEPT

6、灾难恢复

MFS维护及灾难恢复

1)MFS集群的启动与停止

MFS集群的启动顺序如下

(1)启动mfsmaster进程

(2)启动所有的mfsChunkserver进程

(3)启动mfsmetalogger进程

(4)在所有客户端上挂载NFS文件系统

MFS集群的停止顺序如下

(1)在所有客户端卸载MFS挂载

(2)停止Chunkserver进程

(3)停止mfsmetalogger进程

(4)停止mfsmaster进程

2)MFS灾难恢复

整个MFS体系中,直接断电只有masterserver进程有可能无法启动,可以在master上使用命令/usr/local/mfs/sbin/mfsmetarestore -a修复

我们将master server 直接断电(必须运行的时间够20分钟才可以断电,否则数据很有可能直接丢失)(模拟:直接关闭掉master server 主机)

[root@centos1~]# /usr/local/mfs/sbin/mfsmaster start

init:file system manager failed !!!

erroroccured during initialization - exiting

[root@centos1~]# /usr/local/mfs/sbin/mfsmetarestore -a

loadingobjects (files,directories,etc.) ... ok

loadingnames ... ok

loadingdeletion timestamps ... ok

loadingchunks data ... ok

checkingfilesystem consistency ... ok

connectingfiles and chunks ... ok

progress:current change: 0 (first:0 - last:0 - 100% - ETA:finished)

storemetadata into file: /usr/local/mfs/var/mfs/metadata.mfs

[root@centos1~]# /usr/local/mfs/sbin/mfsmaster start

3)从MetaLogger中恢复

MFS元数据通常有两部分的数据,分别如下

(1)主要元数据文件metadata.mfs,当mfsmaster运行时会被命名为metadata.back.mfs。

(2)元数据改变日志 changelog.*.mfs,存储了过去N小时的文件变更。

在Master 发生故障时,可以从MetaLogger中恢复,步骤如下

(1)安装一台mfsmaster,利用同样的配置来配置这台mfsmaster,mfsmaster进程先不要启动

(2)将metalogger上/usr/local/mfs/var/mfs/目录下所有文件复制到mfsmaster相应的目录中。

[root@centos3mfs]# scp root@192.168.1.101:/usr/local/mfs/var/mfs/* /usr/local/mfs/var/mfs/

[root@centos3mfs]# /usr/local/mfs/sbin/mfsmetarestore -m metadata_ml.mfs.back -o metadata.mfs changelog_ml.*.mfs

loadingobjects (files,directories,etc.) ... ok

loadingnames ... ok

loadingdeletion timestamps ... ok

loadingchunks data ... ok

checkingfilesystem consistency ... ok

connectingfiles and chunks ... ok

changelog_ml.0.mfs:1:version mismatch

[root@centos3mfs]# /usr/local/mfs/sbin/mfsmaster start

[root@centos3mfs]# ls

Ceshi

注意:如果是全新安装的master,恢复数据后,需要更改metalogger和chunkserver,配置MASTER_HOST的ip地址,客户端也需要重新挂载mfs目录。

原文发布于微信公众号 - L宝宝聊IT(gh_b0e552aa80db)

原文发表时间:2018-04-03

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算教程系列

如何在Ubuntu 16.04上使用Deployer自动部署Laravel应用程序

Laravel是一个开源的PHP Web框架,旨在使常见的Web开发任务(如身份验证,路由和缓存)变得更加容易。Deployer是一个开源的PHP部署工具,为许...

40510
来自专栏Hongten

hadoop2集群环境搭建

在查询了很多资料以后,发现国内外没有一篇关于hadoop2集群环境搭建的详细步骤的文章。

18020
来自专栏运维小白

Linux基础(day38)

10.32/10.33 rsync通过服务同步 rsync 通过服务的方式同步 要编辑配置文件/etc/rsyncd.conf 启动服务rsync --daem...

21560
来自专栏蓝天

thrift使用小记

    Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目。Thrift通过一个中间语言(IDL...

19710
来自专栏各种机器学习基础算法

无法连接远程mysql数据库解决方案

请注意,这里使用的是ubuntu 16.04 LTS版本系统,如系统不同,可能无法生效。 在这里先假设两条数据: 数据库服务器IP地址为:192.168.2.1...

593150
来自专栏散尽浮华

完整部署CentOS7.2+OpenStack+kvm 云平台环境(6)--在线调整虚拟机的大小

前面提到过openstack环境部署及创建虚拟机的完整过程,然后有时候会发现创建的虚拟机规格太小,满足不了业务需求;亦或是虚拟机规格太大,容易造成资源浪费。 于...

32890
来自专栏FreeBuf

使用CMSTP绕过AppLocker的方法介绍

CMSTP是一个与Microsoft连接管理器配置文件安装程序关联的二进制文件。它接受INF文件,这些文件可以通过恶意命令武器化,以脚本(SCT)和DLL的形式...

11730
来自专栏xingoo, 一个梦想做发明家的程序员

Nodejs·理解Buffer

Node里面的Buffer其实就是用于网络请求、文件读取等等操作,而且是分配在堆外,不会占用堆内的内存,这也是因为本来V8的内存就很小,如果读取大文件,那就....

23970
来自专栏木可大大

XSS攻击与防范

XSS攻击,又称为CSS(Cross Site Scripting),由于CSS已经被用作层叠样式表,为了避免这个冲突,我们将Cross缩写成X。XSS攻击的中...

10410
来自专栏软件工程师成长笔记

Linux下开启FTP的21端口

这几天一直在学习在CentOS7.0创建本地yum源和局域网yum源,准备两台CentOS7.0虚拟机,一个做服务器,一个做客户端;由于开发环境只有局域网,没法...

6.5K30

扫码关注云+社区

领取腾讯云代金券