文件服务器mfs,分布式文件系统MFS(moosefs)实现存储共享

这种架构除了性能问题而外,还存在单点故障,一旦这个NFS服务器发生故障,所有靠共享提供数据的应用就不再可用,尽管用rsync方式同步数据到另外一个服务器上做nfs服务的备份,但这对提高整个系统的性能毫无帮助。基于这样一种需求,我们需要对nfs服务器进行优化或采取别的解决方案,然而优化并不能对应对日益增多的客户端的性能要求,因此唯一的选择只能是采取别的解决方案了;通过调研,分布式文件系统是一个比较合适的选择。采用分布式文件系统后,服务器之间的数据访问不再是一对多的关系(1个NFS服务器,多个NFS客户端),而是多对多的关系,这样一来,性能大幅提升毫无问题。

到目前为止,有数十种以上的分布式文件系统解决方案可供选择,如lustre,hadoop,Pnfs等等。我尝试了PVFS,hadoop,moosefs这三种应用,参看了lustre、KFS等诸多技术实施方法,最后我选择了moosefs(以下简称MFS)这种分布式文件系统来作为我的共享存储服务器。为什么要选它呢?我来说说我的一些看法:

1、实施起来简单。MFS的安装、部署、配置相对于其他几种工具来说,要简单和容易得多。看看lustre 700多页的pdf文档,让人头昏吧。

2、不停服务扩容。MFS框架做好后,随时增加服务器扩充容量;扩充和减少容量皆不会影响现有的服务。注:hadoop也实现了这个功能。

3、恢复服务容易。除了MFS本身具备高可用特性外,手动恢复服务也是非常快捷的,原因参照第1条。

4、我在实验过程中得到作者的帮助,这让我很是感激。

uid-17238776-id-1693158.html

MFS文件系统的组成

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

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

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

元数据服务器安装和配置

元数据服务器可以是linux,也可以是unix,你可以根据自己的使用习惯选择操作系统,在我的环境里,我是用freebsd做为MFS元数据的运行平台。GNU源码,在各种类unix平台的安装都基本一致。

(一)安装元数据服务

1、下载GNU源码wget

2、解包tar zxvf mfs-1.5.12.tar.gz

3、切换目录cd mfs-1.5.12

4、创建用户useradd mfs –s /sbin/nologin

5、配置./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs

6、编译安装make ; make install

(二)配置元数据服务

元数据服务器的配置文件是mfsmaster.cfg,我在安装MFS时指定了前缀,因此这个文件的位置在/usr/local/mfs/etc/mfsmaster.cfg.我们打开这个配置文件,看看都有哪些内容:uid-17238776-id-1693158.html

尽管每行都被注释掉了,但它们却是配置文件的默认值,要改变这些值,需要取消注释,然后明确指定其取值。接下来说明一下其中一些项目的含义。

◆LOCK_FILE = /var/run/mfs/mfsmaster.pid文件锁所在的位置,它的功能是避免启动多次启动同一个守护进程。由于系统中本来不存在目录/var/run/mfs,因此需要手动创建mkdir /var/run/mfs,然后更改其属主chown –R mfs:mfs /var/run/mfs这样MFS服务就能对这个目录有创建/写入mfsmaster.pid文件的权限了。

◆DATA_PATH = /usr/local/mfs/var/mfs数据存放路径,只元数据的存放路径。那么这些数据都包括哪些呢?进目录看看,大致分3种类型的文件:

uid-17238776-id-1693158.html

这些文件也同样要存储在其他数据存储服务器的相关目录。

◆MATOCS_LISTEN_PORT = 9420 MATOCS--master to chunkserver,即元数据服务器使用9420这个监听端口来接受数据存储服务器chunkserver端的连接。

◆MATOCU_LISTEN_PORT = 9421元数据服务器在9421端口监听,用以接受客户端对MFS进行远程挂接(客户端以mfsmount挂接MFS)

◆其他部分看字面意思都不难理解。还有几个与时间有关的数值,其单位是秒。

这个配置文件,不必做修改就能工作了。

(一)元数据服务器master启动

元数据服务器可以单独启动,即使没有任何数据存储服务器(chunkserver)也是能正常工作的,因此当我们安装配置完MFS后,即可启动它。执行命令/usr/local/mfs/sbin/mfsmaster start,如果没有意外,元数据库服务器就应该作为一个守护进程运行起来。现在我们可以通过3个方面来检查一下MFS master的运行状况:

uid-17238776-id-1693158.html

(四)、关闭元数据服务器

关闭元数据服务器,务必使用/usr/local/mfs/sbin/mfsmaster –s这种方式,如果直接使用kill杀死进程,将导致下次启动时出现找不到相关文件,而不能正常启动服务器。这个一定要谨慎。当然,如果发生了这个事情,还是可以通过mfsmetastore来恢复的。

数据存储chunkserver服务器的安装配置

数据存储服务器chunkserver也是可以运行在各种类unix平台的,因此不再多说。一个MFS环境到底能集群多少服务器,作者的说法是上PB容量,个人建议,最好3台以上;并且专门用来做存储,不要把它跟master搞到一个机器(理论上没问题,实现也是可以的,但这不是一个好策略)。因为每个数据存储服务器的安装和配置都是相同的,所以只需按照一个服务器的操作就可以了。

(一)、安装数据存储服务器chunkserver

1、下载GNU源码wget

2、解包tar zxvf mfs-1.5.12.tar.gz

3、切换目录cd mfs-1.5.12

4、创建用户useradd mfs –s /sbin/nologin

5、配置./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs

6、编译安装make ; make install

(二)配置数据存储服务器chunkserver

数据存储服务器有2个配置服务器需要修改,一个是主配置文件mfschunkserver.cfg ,另一个配置文件是mfshdd.cfg。每个服务器用来分配给MFS使用的空间最好是一个单独的硬盘或者一个raid卷,最低要求是一个分区。作者举的例子是创建一个大文件,然后挂接在本地,这不好,只能用来做实验了。1、修改配置文件/usr/local/mfs/etc/mfschunkserver.cfg。下面是修改了的配置文件:

uid-17238776-id-1693158.html这个配置文件里,没有注释符号“#”就是被修改过的项了,接下来是里面某些项的含义说明:

◆MASTER_HOST = 192.168.0.19元数据服务器的名称或地址,可以是主机名,也可以是ip地址,只要数据存储服务器能访问到元数据服务器就行。

◆LOCK_FILE = /var/run/mfs/mfschunkserver.pid与元数据服务器master的处理完全相同.

◆CSSERV_LISTEN_PORT = 9422 CSSERV—chunkserver,这个监听端口用于与其它数据存储服务器间的连接,通常是数据复制。

◆HDD_CONF_FILENAME =分配给MFS使用的磁盘空间配置文件的位置。

2、修改配置文件/usr/local/mfs/etc/mfshdd.cfg。在我的服务器上,只有一个1T的SATA硬盘,分了一个800G容量的分区来做为MFS存储服务的组成部分。为了使mfs拥有写目录的权限,需要修改目录的属主。我的服务器的分区挂接点是/data ,用chown –R mfs:mfs /data把属主改变。因为我的每个服务器只需贡献一个分区做为MFS,因此配置文件只需要如下一行内容就可以了:

uid-17238776-id-1693158.html

(四)关闭数据存储服务器

跟元数据服务器master相似,执行命令/usr/local/mfs/sbin/mfschunkserver –s , chunkserver服务就停下来了。为了使系统重启过程能自动启动chunkserver服务,可以通过在/etc/rc.local文件追加行/usr/local/mfs/sbin/mfschunkserver start来达到这个目的(master的自动重启处理也可同样处理)。

MFS客户端的安装及配置

我的生产环境,只有centos和freebsd两种环境,因此下面的描述,只有centos及freebsd挂接MFS文件系统的情形,其他类型的unix系统,待日后尝试。对比前面的操作过程,客户端挂接后使用MFS集群文件系统才是最费时的事情。

一、centos作为MFS的客户端。

(一)安装MFS客户端

◆Mfsmount需要依赖FUSE,因此需要先安装好fuse,这里我选用fuse-2.7.4.tar.gz。

1、解包tar zxvf fuse-2.7.4.tar.gz

2、切换目录cd fuse-2.7.4.

3、配置./configure

4、编译安装make;make install

如果系统已经安装了fuse,则跳过这个步骤。

◆安装MFS客户端程序1、修改环境变量文件/etc/profile ,追加下面的行,然后再执行命令source /etc/profile使修改生效。

uid-17238776-id-1693158.html

(二)挂接和使用MFS文件系统

1、创建挂接点mkdir /mnt/mfs

2、挂接MFS /usr/local/mfs/bin/mfsmount –h 192.168.0.19 .注意,所有的MFS都是挂接同一个元数据服务器master,而不是其他数据存储服务器chunkserver !

uid-17238776-id-1693158.html

一、freebsd作为MFS客户端

Freebsd安装和挂接MFS集群文件系统,比centos操作起来要复杂一些.mfsmount需要依赖fuse,并且需要在内核中加载fusefs模块。

(一)安装fuse

1、解包tar zxvf fuse-2.7.4.tar.gz

2、切换目录cd fuse-2.7.4.

3、配置./configure

4、编译安装make;make install

如果系统已经安装了fuse,则跳过这个步骤。

(二)安装内核模块fusefs-kmod

uid-17238776-id-1693158.html

uid-17238776-id-1693158.html

uid-17238776-id-1693158.html

6、选择“fusefs-kmod-0.3.9.p1_2”,按[OK]返回到第“4”步出现的那个操作界面。这时我们用“Tab”键选中底部右边的“Install”,完成安装后,会出现一个安装成功的提示,然后瞬间消失。

◆加载fusefs模块kldload /usr/local/modules/fuse.ko .如果加载不成功,请检查是否存在模块文件fuse.ko.

◆检查fusefs模块是否被加载到内核:

uid-17238776-id-1693158.html

如果没有类似上面馆的输出,就表明fusefs模块没有加载成功。

(三)安装包pkg-config:

1、cd /usr/ports/devel/pkg-config

2、make install clean

(四)安装MFS客户端

1、解包tar zxvf mfs-1.5.12.tar.gz

2、切换目录cd mfs-1.5.12

3、创建用户pw useradd mfs –s /sbin/nologin

4、配置./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --enable-mfsmount

5、编译安装make ; make install

◆检查MFS客户端安装的结果。通过查看目录/usr/local/mfs/bin目录的文件,应该发现如下文件:

uid-17238776-id-1693158.html

uid-17238776-id-1693158.html

就能实现开机或重启系统自动挂接MFS文件系统。

破坏性测试

一、测试数据存储服务器

我用5个服务器组成了MFS的存储平台,其中一个是master,其余四个服务器是chunkserver.先停止一个chunkserver服务,然后在某个MFS客户端往挂接点的目录(/mnt/mfs)里复制数据或者创建目录/文件、或者读取文件、或者删除文件,观察操作是否能正常进行。再停止第2个chunkserver,重复执行上述操作;然后再停止第3个服务器,执行类似的文件读些操作。减少chunkserver试验后,我们再来逐步增加chunkserver服务器,然后对MFS执行读写等相关访问操作,检验其正确性。

通过增减chunkserver服务器的测试,服务的可靠性确实不错,哪怕只剩下最后一个服务器,也能正常提供存储访问服务。

二、测试元数据服务器

元数据服务器最重要的文件在目录/usr/local/mfs/var/mfs ,MFS每一个数据的变化,都被记录在这个目录的文件里,我们可以通过备份这个目录的全部文件,来保障整个MFS文件系统的可靠性.在正常情况下,元数据服务器的改变日志文件(changelogs)实时地、自动地复制到所有的数据存储服务器,并且以changelog_csback.*.mfs的形式命名。换句换说,即使元数据服务器报废了,也能再部署一个元数据服务器,然后从数据存储服务器chunkserver取得恢复所需要的文件。

(一)本地测试

1、停止元数据服务/usr/local/mfs/sbin/mfsmaster

2、备份元数据服务器数据cd /usr/local/mfs/var; tar czvf mfs.tgz mfs

3、删除目录mv mfs mfs.bk或rm –rf mfs

4、启动元数据服务../sbin/mfsmaster start启动失败,提示不能初始化数据。

5、解包tar zxvf mfs.tgz

6、执行恢复操作../sbin/mfsmetarestore –a

7、启动元数据服务../sbin/mfsmaster start

8、在MFS客户端检查MFS存储的数据是否跟恢复前一致?能否正常访问等等。

(一)迁移测试

1、安装新的MFS元数据服务器。

2、复制元数据服务器数据目录(/usr/local/mfs/var/mfs)到这个新的元数据服务器。

3、停止原先的那个元数据服务器(关闭计算机或停止它的网络服务)。

4、更改新的元数据服务器的ip为原来那个服务器的ip.

5、启动新的元数据服务/usr/local/mfs/sbin/mfsmaster start

6、在MFS客户端检查MFS存储的数据是否跟恢复前一致?能否正常访问等等。

感谢Pawel Kalinowski(mfs作者)提供帮助!

2009/3/30

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/526720.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 1215_mysql执行带外键的sql文件时出现mysql ERROR 1215 (HY000): Cannot add foreign key constraint的解决...

ERROR 1215 (HY000): Cannot add foreign key constraint最近在建表时遇到了这个错误,然后找了下找到了解决办法,记录下:本来是要建两张表:出现下面的提示:然后开始上网查,有的说是用的引擎不同的原因&…

mysql里面可以用正则吗_Mysql中使用正则表达式

最近在《MYSQL必知必会》这本书中读到在SQL中使用正则表达式,以前是学过数据库也学过正则表达式,但是不知道原来他们可以一起使用,这里做下记录。首先是Mysql使用正则表达式的语法:SELECT ... FROM ... WHERE ... REGEXP ...(这…

mysql数据库的备份和恢复的常用方法_MySQL数据库备份与恢复方法(转)

常有新手问我该怎么备份数据库,下面介绍3种备份数据库的方法:MySQL中的每一个数据库和数据表分别对应文件系统中的目录和其下的文件。在Linux下数据库文件的存放目录一般为/var/lib/mysql。在Windows下这个目录视MySQL的安装路径而定,DiaHost…

ruby mysql dbi_Ruby MySQL DBI实例

本次章节将介绍如何用Ruby来访问数据库。类似的Perl DBI模块为Ruby脚本的Ruby DBI模块提供了一种数据库(这里用MySQL讲解)独立的接口。DBI代表数据库无关的接口为RubyDBI提供的Ruby代码和底层数据库之间的抽象层,允许你真的很容易切换数据库实现。它定义了一套方法&…

mysql与tomcat_mysql数据库与tomcat服务器的一些细节问题

java程序使用数据库的方法1.使用jndi数据源核心代码:initCtx new InitialContext()DataSource ds;ds (DataSource) initCtx.lookup("java:comp/env/jdbc/mysql1");conn ds.getConnection();----------配置服务器信息web项目web.xml中配置MySQL DB Conn…

信息安全学习路线图_Python学习图谱:学习到困惑的时候可以参考的图谱

很多同学都想学习Python,最近就连地产大佬潘石屹都要学Python。刚刚开始学习Python的同学来说,不知道从哪里下手,学习起来比较困惑,没有找到一个好的学习方法,没有高手带路,没有人督促你学习,或…

zabbixdocker里的mysql_docker zabbix安装部署(数据库和web及zabbix服务都用docker版)

一、docker zabbix相关镜像下载分别docker pull (mysql:5.7 、zabbix/zabbix-agent 、zabbix/zabbix-server-mysql 、zabbix/zabbix-web-nginx-mysql)[rootald8 ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEmysql 5.7 98455b9624a9 12 days ago 372MBzabbix/zabbix…

mysql 物理结构设计_数据库的物理结构设计指的是什么?

Log Goup ID,可能会配置多个redo组,每个组对应一个id,当前都是0,占用4字节Start LSN,这个redo log文件开始日志的lsn,占用8字节Log File Number,总是为0,占用4字节Created By&#x…

java script中==和===_Java Script 中 ==(Equal) 和 === (Identity Equal) 的区别和比较算法逻辑...

判断两个变量是否相等在任何编程语言中都是非常重要的功能。JavaScript 提供了 和 两种判断两个变量是否相等的运算符,但我们开始学习的时候 JavaScript 的时候,就被一遍又一遍的告知: 要求变量的类型和值均相等,才能返回true。…

java android 数组_Android开发基础之Java 数组

Java 数组数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。Java 语言中提供的数组是用来存储固定大小的同类型元素。你可以声明一个数组变量,如 numbers[100] 来代替直接声明 100 个独立变量 number0&…

bellman ford java_Java C 实现Bellman-ford算法

package com.cn.tree;public class MyException extends Exception {private static final long serialVersionUID 1L;public MyException(String str) {super(str);}public MyException() {}}package com.cn.graph;import com.cn.tree.MyException;/*** 很明显时间复杂度为O(…

c#模拟看板控件_在Winform界面使用自定义用户控件及TabelPanel和StackPanel布局控件...

在很多时候,我们做一些非常规化的界面的时候,往往需要创建一些用户控件,在其中绘制好一些基础的界面块,作为后续重复使用的一个单元,用户控件同时也可以封装处理一些简单的逻辑。在开发Winform各种类型项目&#xff0c…

java jdbc 详解_JDBC概述及详解各个对象

JDBC(Java DataBase Connectivity)详解一.概念:JDBC是一种可执行SQL语句的JavaAPI,Java数据库链接,Java语言操做数据库mysql二.本质:JDBC是一种可用于执行SQL语句的Java API,由一些Java语言编写的类和页面组成。各个数…

java空心字木塔_我国七个千年古塔:第四个空心没有塔顶,最后一个是木塔无钉无铆...

1、崇圣寺三塔,云南大理,公元824—839年崇圣寺三塔是一个三塔三阁组成的建筑群,最大的主塔又名千寻塔。是中国现存层数最多的古佛塔,拥有16层。崇圣寺三塔历经30多次地震不倒,极其顽强。2、大雁塔,陕西西安…

java8 ie_Java8语法糖之Lambda表达式_Hudie.的博客-CSDN博客

原文作者:编程一只蝶原文标题:Java8语法糖之Lambda表达式发布时间:2021-02-16 13:08:40一、Lambda表达式简介Lambda表达式,是Java8的一个新特性,也是Java8中最值得学习的新特性之一。(另一个新特性是流式编程。)Lambda…

python中的event_Python event

最新项目游戏感用于SteelSeries GameSense 3.8.x的Python库安装这个包有两个不同的版本。一个支持普通的同步函数调用,另一个支持python的异步功能。要安装同步版本,请运 ...2021-03-02已阅读: n次此模块验证事件模块中的电话号码,就像base_p…

centos的mysql怎么删用户_linux/centos给Mysql创建用户、授权、查看、删除、修改密码、撤...

linux/centos给Mysql创建用户、授权、查看、删除、修改密码、撤linux/centos给Mysql创建用户、授权、查看、删除、修改密码、撤销权限linux/centos给Mysql创建用户、授权、查看、删除、修改密码、撤销权限root权限高,安全性考虑,一般只允许本地(本机)访问…

采取 过滤 php_这3种php高级过滤了解一下,很实用!

在php中有很多的过滤,可以对输入的字符串进行过滤,同时也可以对邮件地址进行过滤,接下来我要讲的是php中的3种高级过滤,在开发中很实用。第一种:过滤数值范围在php经常要接收各种数据,其中数值是非常普遍的…

吃PHP小孩智力好,这7种鱼千万不能给孩子吃,会影响孩子的智力!

所以,给宝宝添加鱼类时一定要注意,有7种鱼含有大量金属元素,是千万不能给宝宝吃的!1罗非鱼罗非鱼深青色的外表有几分像鲫鱼。由于罗非鱼的成长周期较长,它们体内汞的含量也就相比其他鱼偏高,小朋友吃罗非鱼…

java监控rabbitMq服务状态,spring cloud 的监控turbine-rabbitmq的示例

前提是你已经有了注册中心,然后搭建一个基础spring cloud 服务,并配置注册服务等等前提环境搭建接下来描述的服务提供者和服务调用者的配置都是一样的,来自《spring cloud 与 docker微服务架构实战》的读后的个人总结.pom文件中需要引入spring-cloud-starter-hystrix/spring-cl…