mfs分布式存储搭建应用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mfs分布式存储搭建应用相关的知识,希望对你有一定的参考价值。

                MFS 分布式存储的运行方式

MFS工作原理

MooseFS是一款具有冗余容错功能的分布式文件系统。它把数据分散在多台服务器上,确保一份数据多个备份副本,对外提供统一的结构。

功能特性

对于标准的文件操作,MooseFS表现与其他类Unix文件系统一致。支持的通过文件系统特性:

· 层次结构(目录树)

· 兼容POSIX文件属性

· 支持特殊文件

· 符号链接和硬链接

· 基于IP地址和密码的访问控制

独有特性

· 高可靠性(数据的多个副本存储在不同服务器)

· 容量动态扩展(添加新硬盘或者服务器)

· 可以回收在制定时间内删除的文件,类似回收站功能

· 可以对整个文件甚至是正在被写入的文件创建文件快照

MFS整体架构的四种角色

· Master(元数据服务器)负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复,多节点拷贝。存储着每个文件的元数据(文件的大小、属性、位置信息,包括所有非常规文件的所有信息,例如目录、套接字、管道以及设备文件)

· Metalogger(元数据日志服务器)负责备份Master服务器的changelog。文件类型为 changelog.*.mfs ,以便在Master出问题时接替其工作

· Chunk(数据存储服务器)负责连接Master,听从Master调度,提供存储空间,并为客户端提供数据传输

· Client(客户端挂载)通过FUSE内核接口挂载远程管理服务器(master)上所管理的数据存储服务器,使用起来和本地文件系统一样

· 技术分享

## MFS读处理过程:
1、客户端向元数据服务器发出读请求。
2、元数据服务器把所需数据存放的位置(Chunk ServerIP地址和chunk编号)告知客户端。
3、客户端向已知的Chunk Server请求发送数据。
4Chunk Server向客户端发送数据。

## MFS写处理过程:
1、客户端向元数据服务器发送写入请求。
2、元数据服务器与Chunk Server进行交互(只有当所需的分块Chunks存在的时候才进行这个交互):
a、元数据服务器只是在某些服务器创建新的分块chunks
bChunk Servers告知元数据服务器,步骤a已经操作成功。
3、元数据服务器告知客户端,你可以在哪个Chunk Server的哪些Chunks写入数据。
4、客户端向指定的Chunk Server写入数据
5Chunk Server与其他Chunk Server进行数据同步。
6Chunk Server之间同步成功。
7Chunk Server告知客户端数据写入成功。
8、客户端告知元数据服务器本次写入完毕。

 

实验拓扑

技术分享 

一、搭建master  server

1.安装依赖包

[[email protected] ~]# yum -y install zlib-devel

技术分享 

2.创建用户

[[email protected] ~]# useradd mfs -s /sbin/nologin

技术分享 

3.安装源码包

[[email protected] ~]# tar xf /mnt/mfs-1.6.27-5.tar.gz -C /usr/src

[[email protected] mfs-1.6.27]# cd /usr/src/mfs-1.6.27/

技术分享 

[[email protected] mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs  --with-default-group=mfs  --disable-mfschunkserver  --disable-mfsmount

技术分享 

[[email protected] mfs-1.6.27]# make&&make install

技术分享 

4.复制文件

[[email protected] mfs-1.6.27]# cd /usr/local/mfs/etc/mfs

技术分享 

[[email protected] mfs]# cp mfsmaster.cfg.dist mfsmaster.cfg

[[email protected] mfs]# cp mfsexports.cfg.dist mfsexports.cfg

[[email protected] mfs]# cp mfstopology.cfg mfstopology.cfg

技术分享 

[[email protected] mfs]# cd /usr/local/mfs/var/mfs/

[[email protected] mfs]# cp  metadata.mfs.empty metadata.mfs

技术分享 

 

5.配置文件(只需了解,不用改动)

// mfsmaster.cfg(主配置文件)/usr/local/mfs/etc/mfs目录下

# WORKING_USER = mfs 运行 master server 的用户

# WORKING_GROUP = mfs 运行 master server 的组

# SYSLOG_IDENT = mfsmaster master server syslog中的标识,说明是由 master serve 产生的

# LOCK_MEMORY = 0 是否执行 mlockall()以避免 mfsmaster 进程溢出(默认为 0

# NICE_LEVEL = -19 运行的优先级(如果可以默认是 -19; 注意: 进程必须是用 root启动)

# EXPORTS_FILENAME = /usr/local/mfs/etc/mfsexports.cfg 被挂接目录及其权限控制文件的存放位置

# TOPOLOGY_FILENAME = /usr/local/mfs/etc/mfs/mfstopology.cfg

# DATA_PATH = /usr/local/mfs/var/mfs 数据存放路径,此目录下大致有三类文件,changelogsessionsstats

# BACK_LOGS = 50 metadata 的改变 log 文件数目(默认是 50);

# BACK_META_KEEP_PREVIOUS = 1

# REPLICATIONS_DELAY_INIT = 300 延迟复制的时间(默认是 300s;

# REPLICATIONS_DELAY_DISCONNECT = 3600 chunkserver 断开的复制延迟(默认是 3600);

# MATOML_LISTEN_HOST = * metalogger 监听的 IP 地址(默认是*,代表任何 IP)

# MATOML_LISTEN_PORT = 9419 metalogger 监听的端口地址(默认是 9419)

# MATOML_LOG_PRESERVE_SECONDS = 600

# MATOCS_LISTEN_HOST = * 用于 chunkserver 连接的 IP 地址(默认是*,代表任何 IP);

# MATOCS_LISTEN_PORT = 9420 用于 chunkserver 连接的端口地址(默认是 9420);

# MATOCU_LISTEN_HOST = * 用于客户端挂接连接的 IP 地址(默认是*,代表任何 IP)

# MATOCU_LISTEN_PORT = 9421 用于客户端挂接连接的端口地址(默认是 9421);

# CHUNKS_LOOP_MAX_CPS = 100000

# CHUNKS_LOOP_MIN_TIME = 300 chunks 的回环频率(默认是:300 秒);

mfsexportes.cfg 为共享mfs文件系统的控制文件,NFS要共享一个目录时,我们会使用vim /etc/exports命令,编写共享给谁,所要共享的目录,共享出去的属性这些内容,而mfsexports.cfg的作用与其类似其书写格式如下: 对客户端的配置

Allow   everything    but  meta

*                /       rw,alldirs,maproot=0

技术分享 

Client(客户端)支持格式:ipip/netmaskip/位数掩码、ip-ip*

该文件每一个条目分为三部分:

第一部分:客户端的ip 地址

第二部分:被挂接的目录

第三部分:客户端拥有的权限

//地址可以指定的几种表现形式:

* 所有的ip 地址

n.n.n.n 单个ip 地址

n.n.n.n/b IP 网络地址/位数掩码

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

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

 

//目录部分需要注意两点:

/ 标识MooseFS ;

. 表示MFSMETA 文件系统

//权限部分:

ro 只读模式共享

rw 读写的方式共享

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

6.启动服务/usr/local/mfs/sbin/mfsmaster start

技术分享 

[[email protected] mfs]# netstat -anpt

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address    Foreign Address             State       PID/Program name   

tcp        0      0 0.0.0.0:9419                0.0.0.0:*                   LISTEN      7599/mfsmaster      

tcp        0      0 0.0.0.0:9420                0.0.0.0:*                   LISTEN      7599/mfsmaster      

tcp        0      0 0.0.0.0:9421                0.0.0.0:*                   LISTEN      7599/mfsmaster      

tcp        0      0 192.168.1.1:9419            192.168.1.2:37816           ESTABLISHED 7599/mfsmaster      

tcp        0      0 192.168.1.1:9420            192.168.1.3:48107           ESTABLISHED 7599/mfsmaster      

tcp        0      0 ::1:25                      :::*                        LISTEN      1732/master         

7.查看进程

[[email protected] mfs]# ps -ef|grep mfs

技术分享 

8.停止mfsmaster

[[email protected] mfs]# /usr/local/mfs/sbin/mfsmaster -s stop

二、搭建metalogger  server

1.安装依赖包

[[email protected] ~]# yum -y install zlib-devel

技术分享 

2.创建用户

[[email protected] ~]# useradd mfs -s /sbin/nologin

 

技术分享 

3.安装源码包

[[email protected] ~]# tar xf /mnt/mfs-1.6.27-5.tar.gz -C /usr/src

[[email protected] mfs-1.6.27]# cd /usr/src/mfs-1.6.27/

技术分享 

[[email protected] mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs  --with-default-group=mfs  --disable-mfschunkserver  --disable-mfsmount

技术分享 

[[email protected] mfs-1.6.27]# make && make install

技术分享 

4.复制文件

[[email protected] mfs-1.6.27]# cd /usr/local/mfs/etc

[[email protected] mfs]# cp mfsmetalogger.cfg.dist mfsmetalogger.cfg

技术分享 

[[email protected] mfs]# vim mfsmetalogger.cfg

MASTER_HOST=192.168.1.1  //手工添加MASTER SERVERip地址

技术分享 

5.启动服务

[[email protected] mfs]# /usr/local/mfs/sbin/mfsmetalogger start

技术分享 

三、搭建chunk server

1.安装依赖包

[[email protected] ~]# yum -y install zlib-devel

技术分享 

2.创建用户

[[email protected] ~]# useradd mfs -s /sbin/nologin

技术分享 

3.安装

[[email protected] ~]# tar xf /mnt/mfs-1.6.27-5.tar.gz -C /usr/src

[[email protected] mfs-1.6.27]# cd /usr/src/mfs-1.6.27/

技术分享 

[[email protected] mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfsmount

技术分享 

[[email protected] mfs-1.6.27]# make &&make install

技术分享 

4.复制配置文件

[[email protected] mfs]# cd  /usr/local/mfs/etc/mfs/

#cp mfschunkserver.cfg.dist mfschunkserver.cfg

[[email protected] mfs]# cp mfshdd.cfg mfshdd.cfg

技术分享 

5.修改配置文件

[[email protected] mfs]# vim mfschunkserver.cfg

MASTER_HOST = 192.168.1.1  //master服务器的ip地址

技术分享 

[[email protected] mfs]# vim mfshdd.cfg

/data    //设置chunkserver存放数据的目录

技术分享 

4.设置目录权限,启动mfschunkserver

[[email protected] mfs]# mkdir /data              //创建/data

[[email protected] mfs]# chown -R mfs:mfs /data          //设置权限

[[email protected] mfs]# /usr/local/mfs/sbin/mfschunkserver start   //启动服务

技术分享 

四、搭建第二个chunkserver

1.[[email protected] ~]# useradd mfs  -s /sbin/nologin

技术分享 

2.安装

[[email protected] mfs-1.6.27]# tar xf /mnt/mfs-1.6.27-5.tar.gz -C /usr/src

[[email protected] mfs-1.6.27]# cd /usr/src/mfs-1.6.27/

技术分享 

[[email protected] mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfsmount

技术分享 

[[email protected] mfs-1.6.27]# make  && make install

技术分享 

3.复制配置文件

[[email protected] mfs-1.6.27]# cd  /usr/local/mfs/etc/mfs

[[email protected] mfs]# cp mfschunkserver.cfg.dist mfschunkserver.cfg

[[email protected] mfs]# cp mfshdd.cfg.dist mfshdd.cfg

技术分享 

4.修改配置文件

[[email protected] mfs]# vim mfschunkserver.cfg

MASTER_HOST = 192.168.1.1  //master服务器的ip地址

技术分享 

[[email protected] mfs]# vim mfshdd.cfg

/data    //存放数据的目录

技术分享 

5.设置目录权限,启动mfschunkserver

#mkdir   /data

[[email protected] mfs]# chown -R mfs:mfs /data

[[email protected] mfs]# /usr/local/mfs/sbin/mfschunkserver start

技术分享 

五、客户端配置

1.安装fuse

fuse的功能简单概括一下,fuse提供一个文件操作的接口,然后fuse在这个接口上监听文件操作,并把这些对文件的操作传给我们自己的相关代码进行处理。 也就是说,fuse提供一个挂载点,然后他会在这个挂在点上进行监听,一旦有操作(新建、读取、修改)发生,他会把控制权交给我们的代码,这些操作的具体代码都在mfsmount模块中实现

[[email protected] fuse-2.9.2]# tar xf /mnt/fuse-2.9.2.tar.gz -C /usr/src

[[email protected] fuse-2.9.2]# cd /usr/src/fuse-2.9.2/

技术分享 

[[email protected] fuse-2.9.2]# ./configure

[[email protected] fuse-2.9.2]# make &&make install

技术分享 

2.设置环境变量

[[email protected] fuse-2.9.2]# vim /etc/profile

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH //环境变量PKG_CONFIG_PATH是用来设置.pc文件的搜索路径的

技术分享 

[[email protected] fuse-2.9.2]# source /etc/profile     //刷新环境变量

技术分享 

3.安装mfs客户端

[[email protected] ~]# useradd -s /sbin/nologin   mfs

技术分享 

[[email protected] mfs-1.6.27]# tar xf /mnt/mfs-1.6.27-5.tar.gz -C /usr/src

[[email protected] mfs-1.6.27]# cd  /usr/src/mfs-1.6.27/

技术分享 

[[email protected] mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver --enable-mfsmount

技术分享 

[[email protected] mfs-1.6.27]# make&&make install

技术分享 

4.挂载mfs文件系统

#mkdir /test     //创建挂载点

[[email protected] test]# modprobe fuse//加载fuse模块到内核

技术分享 

[[email protected] test]# /usr/local/mfs/bin/mfsmount /test -H 192.168.1.1//挂载mfs

技术分享 

查看挂载情况:

技术分享 

5.mfs常用操作

1.设置环境变量

[[email protected] test]# vim /etc/profile

export PATH=/usr/local/mfs/bin:$PATH

技术分享 

[[email protected] test]# source /etc/profile

技术分享 

2.查看与设置文件复制的份数

[[email protected] test]# mfsgetgoal -r /test

技术分享 

3.测试

[[email protected] test]# dd if=/dev/zero of=/test/111.data  bs=200M count=1

技术分享 

查看写入结果:

技术分享 

[[email protected] test]# mfssetgoal -r 2 /test 进行冗余测试

技术分享 

[[email protected] test]# dd if=/dev/zero of=/test/222.data  bs=200M count=1

技术分享 

查看写入结果是否冗余:

技术分享 

六、mfs监控

1. [[email protected] mfs]# /usr/local/mfs/sbin/mfscgiserv  //master服务器写入

技术分享 

2. 通过网站进行监控测试:

 

技术分享 

七、MFS集群维护

1.启动MFS集群

安全的启动MooseFS 集群(避免任何读或写的错误数据或类似的问题)的方式是按照以下命令步骤:

1. 启动mfsmaster 进程

2. 启动所有的mfschunkserver 进程

3. 启动mfsmetalogger 进程(如果配置了mfsmetalogger

4. 当所有的chunkservers 连接到MooseFS master 后,任何数目的客户端可以利用mfsmount 去挂接被export 的文件系统。(可以通过检查master 的日志或是CGI 监视器来查看是否所有的chunkserver被连接)。

2.停止MFS集群

安全的停止MooseFS 集群:

1. 在所有的客户端卸载MooseFS 文件系统(用umount 命令或者是其它等效的命令)

2. mfschunkserver stop 命令停止chunkserver 进程

3. mfsmetalogger stop 命令停止metalogger 进程

4. mfsmaster stop 命令停止master 进程

3.MFS元数据备份

通常元数据有两部分的数据:

· 主要元数据文件metadata.mfs,当mfsmaster 运行的时候会被命名为metadata.mfs.back

· 元数据改变日志changelog.*.mfs,存储了过去的N 小时的文件改变(N 的数值是由BACK_LOGS参数设置的,参数的设置在mfschunkserver.cfg 配置文件中)。

 

 

 


本文出自 “apache” 博客,请务必保留此出处http://xiaorenwutest.blog.51cto.com/12754924/1922558

以上是关于mfs分布式存储搭建应用的主要内容,如果未能解决你的问题,请参考以下文章

MFS搭建分布式文件系统

MFS分布式文件系统的原理及环境搭建

搭建MFS分布式文件系统

Linux搭建MFS分布式文件系统

搭建MFS分布式文件管理系统

MFS分布式文件系统搭建