码迷,mamicode.com
首页 > 其他好文 > 详细

MFS分布式存储

时间:2015-08-10 02:12:55      阅读:339      评论:0      收藏:0      [点我收藏+]

标签:分布式存储

对于更大量的存储使用 MFS 分布式存储:

技术分享

服务概述:

MFS : 网络分布式文件系统

Project web site: http://www.moosefs.com/



Installation and using MooseFS:

http://www.moosefs.org/reference-guide.html



mooseFS(moose 驼鹿)是一款网络分布式文件系统。它把数据分散在多台服务器上,但对于用户来讲, 看到的只是一个源。MFS 也像其他类 unix 文件系统一样,包含了层级结构(目录树),存储着文件属性

(权限,最后访问和修改时间),可以创建特殊的文件(块设备,字符设备,管道,套接字),符号链接, 硬链接。



MFS 分布式文件系统部署方案:

MooseFS 文件系统 4 种角色介绍

MooseFS 是一种分布式文件系统,MooseFS 文件系统结构包括以下四种角色:

1 管理服务器 managing server (master)

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

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

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

3 数据存储服务器 data servers (chunk servers )

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


4 客户机挂载使用client computers

客户端: 挂载远程mfs服务器共享出的存储并使用。  通过fuse内核接口挂载远程管理服务器上所管理的数据存储服务器共享出的硬盘。 共享的文件系统的用法和nfs相似。

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



内部运行机制:

技术分享

技术分享

xuegod62

端口号:

9420 : MFS master MFS chunck

9421 : MFS master MFS Client

9419   : MFS master 和 MFS metalogger 端通信端口

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

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



实验环境:

服务器 角色

xuegod63 管理服务器 managing server (master) 和元数据日志服务器(Metalogger)

xuegod64 数据存储服务器 data servers (chunk servers )

xuegod62 客户机挂载使用 client computers




安装环境准备:

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

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



fuse 概述:

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

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



配置:mfs 管理服务器 xuegod63

注:所有角色都是用的同一个安装文件只是配置有所丌同

[root@xuegod63 ~]# yum install rpm-build gcc gcc-c fuse-devel zlib-devel -y [root@xuegod63 mfs]# useradd -s /sbin/nologin mfs   #建立用户并禁示此用户登陆 [root@xuegod63 ~]# tar zxvf mfs-1.6.27-5.tar.gz

[root@xuegod63 ~]# cd mfs-1.6.27

[root@xuegod63 mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs

--with-default-group=mfs



[root@xuegod63 mfs-1.6.27]# make   -j 4

...

/mfs/var/mfs#" <cgiserv.py.in >mfscgiserv

make[2]: Leaving directory `/root/mfs-1.6.27/mfscgi‘ make[2]: Entering directory `/root/mfs-1.6.27‘ make[2]: Leaving directory `/root/mfs-1.6.27‘ make[1]: Leaving directory `/root/mfs-1.6.27‘ [root@xuegod63 mfs-1.6.27]#make install



查看安装后目录结构

[root@xuegod63 mfs-1.6.27]# ls /usr/local/mfs bin   etc   sbin   share   var

注:各个文件的作用:

bin – 客户端工具

etc –服务器的配置文件都放在该目录中

sbin  –  服 务 端 吭 劢 程 序 。 如 : 元 数 据 服 务 器 端 程 序  mfsmaster 、 数 据 存 储 服 务 器 端 服 务 程 序

mfschunkserver share – 文档

var – 元数据目录(可在配置文件中自定义到其他目录)




生成配置文件:

[root@xuegod63 ~]# cd /usr/local/mfs/etc/mfs/ [root@xuegod63 ~]# cp mfsmaster.cfg.dist mfsmaster.cfg [root@xuegod63 ~]# cp mfsexports.cfg.dist mfsexports.cfg [root@xuegod63 ~]#cp mfsmetalogger.cfg.dist mfsmetalogger.cfg

[root@xuegod63 ~]#cp /usr/local/mfs/var/mfs/metadata.mfs.empty

/usr/local/mfs/var/mfs/metadata.mfs

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




[root@xuegod63 mfs]# vim /usr/local/mfs/etc/mfs/mfsmaster.cfg #丌需要做修改

23 # MATOCS_LISTEN_HOST = * #监听所有 IP,也直接写一个 IP 地址,如 192.168.1.63

24 # MATOCS_LISTEN_PORT = 9420

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

注:这个配置文件中所有注掉的设置都是默认的配置。

如果有需要还可以修改 DATA_PATH 的设置将元数据目录存储到其他的分区戒磁盘。其他的参数都很简 单根据需要调整即可。

master 会打开 9420 端口等待 mfschunkserver 数据存储服务器连接




2.1.2 修改目录权限

[root@xuegod63 mfs]# chown -R mfs:mfs /usr/local/mfs

2.1.3 启动服务端

[root@xuegod63 mfs]# /usr/local/mfs/sbin/mfsmaster start working directory: /usr/local/mfs/var/mfs

lockfile created and locked initializing mfsmaster modules ... loading sessions ... ok

sessions file has been loaded exports file has been loaded

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

topology file has been loaded loading metadata ...

loading objects (files,directories,etc.) ... ok loading names ... ok

loading deletion timestamps ... ok loading chunks data ... ok

checking filesystem consistency ... ok connecting files and chunks ... ok

all inodes: 1 directory inodes: 1 file inodes: 0 chunks: 0

metadata file has been loaded stats file has been loaded

master <-> metaloggers module: listen on *:9419 master <-> chunkservers module: listen on *:9420 main master server module: listen on *:9421 mfsmaster daemon initialized properly




[root@xuegod63 mfs]# netstat -antup | grep 942

tcp 0 0 0.0.0.0:9420 0.0.0.0:* LISTEN

11266/mfsmaster

tcp 0 0 0.0.0.0:9421 0.0.0.0:* LISTEN

11266/mfsmaster

注:没有看到 9419 是因为没有客户端来连接了



开机启动:

[root@xuegod63 mfs]# echo ‘/usr/local/mfs/sbin/mfsmaster start‘ >> /etc/rc.local



关闭服务器

[root@xuegod63 mfs]# /usr/local/mfs/sbin/mfsmaster stop sending SIGTERM to lock owner (pid:25665)

waiting for termination ... terminated

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



查看产生的日志文件:

[root@xuegod63 mfs]# ls /usr/local/mfs/var/mfs/

metadata.mfs.back   metadata.mfs.back.1   metadata.mfs.empty   sessions.mfs   stats.mfs

[root@xuegod63 mfs]#




挃定要共享的文件:

[root@xuegod63 mfs]# vim /usr/local/mfs/etc/mfs/mfsexports.cfg #添加以下两行

# Allow everything but "meta".

* / rw,alldirs,maproot=0


# Allow "meta".

* . rw

192.168.1.64/24 / rw,alldirs,maproot=0

192.168.1.0/24 / rw,alldirs,maproot=0


mfsexports.cfg 文件每一条由三部分组成,第一部分表示客户端的 IP 地址,第二部分表示被挂接的目录,

第三部分表示客户端拥有的权限,下面对三给部分进行解释:

a.客户端 IP 地址

* 所有 IP 地址

x.x.x.x    单个 IP 地址 

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

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



b.被挂载的目录

/ 表示 MooseFS 的根

. 表示 MFSMETA 文件系统

c. 客户端拥有的权限

ro 只读

rw 读写

alldirs 允讲挂载任何挃定的子目录

maproot 映射为 

root 用户还是指定的用户 

password    指定客户端密码




2、配置 xuegod64 为元数据日志服务器(mfsmetalogger)安装主控备份服务器 元数据日志守护进程是在安装 master server 时一同安装的,最小的要求并不比 master 本身大,可以被 运行在任何机器上(例如任一台 chunkserver),但是最好是放置在 MooseFS master 的备份机上,备 份 master 服务器的变化日志文件,文件类型为 changelog_ml.*.mfs。因为主要的 master server 一旦 失效,可能就会将这台 metalogger 机器取代而作为 master server。



[root@xuegod63 ~]# useradd mfs –s /sbin/nologin #建立用户并禁示此用户登陆

[root@xuegod63 ~]# tar zxvf mfs-1.6.11.tar.gz

[root@xuegod63 ~]# cd mfs-1.6.11

[root@xuegod63 mfs-1.6.27]# ./configure --prefix=/usr/local/mfsmeta

--with-default-user=mfs --with-default-group=mfs

[root@xuegod63 ~]# make   -j 4   && make install



生成配置文件:

[root@xuegod63 mfsmeta]# cd /usr/local/mfsmeta/etc/mfs/ [root@xuegod63 mfs]# cp mfsmetalogger.cfg.dist mfsmetalogger.cfg

[root@xuegod63 mfs]# vim 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

# META_DOWNLOAD_FREQ = 24 元数据备份文件下载请求频率。默认为24小时,即每隔一天从元 数据服务器

(MASTER) 下 载 一 个  metadata.mfs.back 文 件 。 当 元 数 据 服 务 器 关 闭 戒 者 出 故 障 时 , matedata.mfs.back 文件将消失,那么要恢复整个 mfs,则需从 metalogger 服务器取得该文件。请特 别注意这个文件,它不日志文件一起,才能够恢复整个被损坏的分布式文件系统。

# MASTER_RECONNECTION_DELAY = 5

MASTER_HOST = 192.168.1.63

#MASTER_HOST,这个文件中需要修改的是 MASTER_HOST 变量,这个变量的值是 MASTER SERVER

的 IP 地址

# MASTER_PORT = 9419

# MASTER_TIMEOUT = 60

# deprecated, to be removed in MooseFS 1.7

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



修改目录权限

[root@xuegod63 mfs-1.6.27]# chown -R mfs:mfs /usr/local/mfsmeta/

启动服务

[root@xuegod63 mfs]# /usr/local/mfsmeta/sbin/mfsmetalogger start working directory: /usr/local/mfsmeta/var/mfs

lockfile created and locked

initializing mfsmetalogger modules ... mfsmetalogger daemon initialized properly 

开机启动

[root@xuegod63 mfs]# echo ‘/usr/local/mfsmeta/sbin/mfsmetalogger start >> /etc/rc.local



关闭服务

[root@xuegod63 mfs]# /usr/local/mfsmeta/sbin/mfsmetalogger stop sending SIGTERM to lock owner (pid:17622)

waiting for termination ... terminated

[root@xuegod63 mfs]# /usr/local/mfsmeta/sbin/mfsmetalogger start



查看 MFS 通讯端口是否打开 

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

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

mfsmaster 26031   mfs 8u   IPv4   60942 0t0   TCP *:9419 (LISTEN)

mfsmaster 26031 mfs 13u IPv4 61415 0t0 TCP

xuegod63.cn:9419->xuegod63.cn:47622 (ESTABLISHED)

mfsmetalo 26111 mfs 8u IPv4 61414 0t0 TCP

xuegod63.cn:47622->xuegod63.cn:9419 (ESTABLISHED)




数据存储服务器(chunkserver) 安装数据服务器(chunkservers),这些机器的磁盘上要有适当的剩余空间,而且操作系统要遵循 POSIX 标 准(验证了的有这些: Linux, FreeBSD, Mac OS X and OpenSolaris)。

Chunkserver 存储数据时,是在一个普通的文件系统如 ext4 上储存数据块戒碎片(chunks/fragments)

作为文件。 你在 chunkserver 上看不到完整的文件。



安装:

[root@xuegod64 mfs-1.6.27]# useradd mfs -s /sbin/nologin

#建立用户并禁示此用户登陆

[root@xuegod64 ~]# tar zxvf mfs-1.6.27-5.tar.gz

[root@xuegod64 ~]# cd mfs-1.6.27

[root@xuegod64 mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs

--with-default-group=mfs

[root@xuegod64 mfs-1.6.27]# make   -j 4 && make install



生成配置文件:

[root@xuegod64 etc]# cd /usr/local/mfs/etc/mfs/

[root@xuegod64 mfs]# cp mfschunkserver.cfg.dist mfschunkserver.cfg

[root@xuegod64 mfs]# cp mfshdd.cfg.dist mfshdd.cfg



[root@xuegod64 mfs]# vim mfschunkserver.cfg #修改以下红色内容

# WORKING_USER = mfs

# WORKING_GROUP = mfs

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

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

# SYSLOG_IDENT = mfschunkserver

# BACK_LOGS = 50

# MASTER_RECONNECTION_DELAY = 30

MASTER_HOST = 192.168.1.63 元数据服务器的名称戒地址,可以是主机名,也可以是 ip 地址

MASTER_PORT = 9420

# MASTER_TIMEOUT = 60

# CSSERV_LISTEN_HOST = *

# CSSERV_LISTEN_PORT = 9422 这个监听端口用于不其它数据存储服务器间的连接,通常是数据复制

# CSSERV_TIMEOUT = 60

# CSTOCS_TIMEOUT = 60

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



指定数据存放位置:

[root@xuegod64 mfs]# vim /usr/local/mfs/etc/mfs/mfshdd.cfg

/tmp

#/mnt/hd2

在这里/tmp /tmp 是一个给 mfs 的分区,但在本机上是一个独立的磁盘的挂载目录 修改权限

[root@xuegod64 mfs]# chown -R mfs:mfs /tmp

[root@xuegod64 mfs]# chown -R mfs:mfs /usr/local/mfs/



启动服务

/usr/local/mfs/sbin/mfschunkserver start

[root@xuegod64 mfs]# echo ‘/usr/local/mfs/sbin/mfschunkserver start‘ >> /etc/rc.local



查看:

[root@xuegod64 mfs]# ls /tmp/

技术分享

注:关闭服务

[root@xuegod64 mfs]# /usr/local/mfs/sbin/mfschunkserver stop




配置 xuegod62 为 MFS 客户端

[root@xuegod62   ~]#   yum   install   rpm-build   gcc   gcc-c   fuse-devel   zlib-devel   -y

[root@xuegod62 ~]#   useradd mfs -s /sbin/nologin

#建立用户并禁示此用户登陆

[root@xuegod62 ~]# tar zxvf mfs-1.6.27-5.tar.gz

[root@xuegod62 ~]# cd mfs-1.6.27

[root@xuegod62 mfs-1.6.27]# ./configure --prefix=/usr/local/mfs

--with-default-user=mfs --with-default-group=mfs --enable-mfsmount



[root@xuegod62 mfs-1.6.27]# make   -j 4 && make install




测试: 挂接 MFS 文件系统 创建挂载点:

[root@xuegod62 ~]# umount /mnt/

[root@xuegod62 ~]# mkdir /mnt/mfs #挂载 MFS 存储 加载 fuse 模块到内核


[root@xuegod62 ~]# lsmod | grep fuse

[root@xuegod62 ~]# modprobe fuse [root@xuegod62 ~]# lsmod | grep fuse fuse 66285   0






[root@xuegod62 ~]# ln -s /usr/local/mfs/bin/mfsmount /usr/sbin/mfsmount

#将 mfsmount 链接到 sbin 目录中



将 mfs 共享出来的存储空间挂载到 xuegod62 的/mnt/mfs 目录下 root@xuegod62 ~]# mfsmount /mnt/mfs -H 192.168.1.63 -p MFS Password: #密码为空,因为服务器端没有设置密码

mfsmaster accepted connection with parameters: read-write,restricted_ip ; root mapped to root:root

[root@xuegod62 ~]# df -h

Filesystem Size   Used Avail Use% Mounted on

/dev/sda2 9.7G   3.4G   5.8G   37% /

tmpfs 569M 0   569M 0% /dev/shm

/dev/sda1 194M 28M   157M   15% /boot

192.168.1.63:9421 5.2G 0   5.2G 0% /mnt/mfs




开机自劢运行

[root@xuegod62 ~]# echo ‘modprobe fuse‘ >> /etc/rc.local

[root@xuegod62 ~]# /usr/local/mfs/bin/mfsmount   /opt -H 192.168.1.63 >> /etc/rc.local



测试:写数据:



[root@xuegod64 mfs]# rpm -ivh /mnt/Packages/tree-1.5.3-2.el6.x86_64.rpm

[root@xuegod64 mfs]# tree   /tmp/ | more #查看存储形势

/tmp/

├── 00

├── 01

│   └── chunk_0000000000000001_00000001.mfs

├── 02

├── 03

├── 04

多复制一些文件:

[root@xuegod62 ~]# cp -r /boot/ /mnt/mfs

[root@xuegod64 mfs]# tree   /tmp/ | more

/tmp/

├── 00

├── 01


│   └── chunk_0000000000000001_00000001.mfs

├── 02

│   └── chunk_0000000000000002_00000001.mfs

├── 03

│   └── chunk_0000000000000003_00000001.mfs

├── 04

│   └── chunk_0000000000000004_00000001.mfs

├── 05

│   └── chunk_0000000000000005_00000001.mfs



[root@xuegod62 ~]# ls /mnt/mfs boot   hosts

在 MFS chunck server 上,MFS 客户端写入的文件,都是由一个个碎片



测试数据同步:支持多客户端同时挂载读写

[root@xuegod62 ~]# mfsmount   /opt/ -H 192.168.1.63

mfsmaster accepted connection with parameters: read-write,restricted_ip ; root mapped to root:root

[root@xuegod62 ~]# cp /etc/passwd /opt/ [root@xuegod62 ~]# ls /opt/

boot   hosts   passwd   vmlinuz-2.6.32-220.el6.x86_64 [root@xuegod62 ~]# ls /mnt/mfs

boot   hosts   passwd   vmlinuz-2.6.32-220.el6.x86_64



实战:配置 MFS web 监控服务端

用来监控 MFS 各节点状态信息,可部署在任一节点服务器。



在 xuegod63 上配置 MFS web 监控服务端 [root@xuegod63 ~]# /usr/local/mfs/sbin/mfscgiserv lockfile created and locked

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



查看方式在浏览器中输入 http://192.168.1.63:9425 (我这个部署在 MASTER 服务器上)

技术分享


本文出自 “枯木知深秋” 博客,请务必保留此出处http://kmzsq.blog.51cto.com/10542759/1683113

MFS分布式存储

标签:分布式存储

原文地址:http://kmzsq.blog.51cto.com/10542759/1683113

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!