mfs分布式文件系统


前言:为什么要使用mfs

1.1nfs已经满足不了业务频繁的请求,之前是三台nginx公用一台nfs服务器,这样读写频繁直接导致了io瓶颈,但是已经是线上业务,不能通过更换设备来解决当前io问题,所以选择一套新的文件系统就提上了日程,构建高可用MFS分布式文件存储架构成了当务之急

角色角色作用

管理服务器

managingserver (master)

负责各个数据存储服务器的管理,文件读写调

,文件空间回收以及恢复.多节点拷贝

元数据日志服务器

MetaloggerserverMetalogger

负责备份master 服务器的变化日志文件,文

件类型为changelog_ml.*.mfs ,以便于在

master server 出问题的时候接替其进行工作

数据存储服务器

dataservers (chunkservers)

负责连接管理服务器,听从管理服务器调度,

提供存储空间,并为客户提供数据传输.

客户机挂载使用

client computers

通过fuse 内核接口挂接远程管理服务器上所

管理的数据存储服务器,.看起来共享的文件

系统和本地unix 文件系统使用一样的效果.


1.4mfs之所以优于nfs

1.4 MooseFS优点

i. Free(GPL)

ii.通用文件系统,不需要修改上层应用就可以使用(那些需要专门apidfs好麻烦哦!)。

iii. 可以在线扩容,体系架构可伸缩性极强。(官方的case可以扩到70台了!)

iv. 部署简单。(sa们特别高兴,领导们特别happy!)

v. 体系架构高可用,所有组件无单点故障。 (您还等什么?)

vi.文件对象高可用,可设置任意的文件冗余程度(提供比raid1+0更高的冗余级别),而绝对不会影响读或者写

的性能,只会加速哦!)

vii. 提供Windows回收站的功能.(不怕误操作了,提供类似oralce 的闪回等高级dbms的即时回滚特性,

oralce这些特性可是收费的哦!)

viii. 提供类似Java语言的 GC(垃圾回收)

ix.提供netappemcibm等商业存储的snapshot特性。

x. google filesystem的一个c实现。(google在前面开路哦!)

xi.提供web gui监控接口。

xii. 提高随机读或写的效率

xiii. 提高海量小文件的读写效率

2部署mfs分布式文件系统

2.1部署mfs-master 管理服务器

2.1.1mfs-master安装

wgethttp://ncu.dl.sourceforge.net/project/moosefs/moosefs/1.6.11/mfs-1.6.11.tar.gz (下载安装包)

tar zxvf mfs-1.6.11.tar.gz (解压安装包)

cd mfs-1.6.11

useradd mfs -s /sbin/nologin (新建mfs用户,用于编译安装)

./configure --prefix=/usr/local/mfs--with-default-user=mfs --with-default-group=mfs (编译安装)

make

make install

cd /usr/local/mfs/etc/ (进入mfs配置文件目录)

cp mfsmaster.cfg.distmfsmaster.cfg (复制主配置文件)

cpmfsexports.cfg.dist mfsexports.cfg

vim mfsmaster.cfg

vim mfsexports.cfg

cd ..

cd var/

mfs/

cp metadata.mfs.emptymetadata.mfs

cat metadata.mfs

ln –s /usr/local/mfs/sbin/mfsmaster/etc/init.d/ mfsmaster

/usr/local/mfs/sbin/mfsmaster start

ps axu | grep mfsmaster

lsof -i

tail -f /var/log/messages

2.1.2启动Master服务

/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

loading metadata ...

create new empty filesystemmetadata filehas been loaded

no charts data file - initializing emptycharts

master <-> metaloggers module: listenon *:9419

master <-> chunkservers module:listen on *:9420

main master server module: listen on *:9421

mfsmaster daemon initialized properly

2.1.3停止Master服务

/usr/local/mfs/sbin/mfsmaster -s

2.1.4启动和停止Web GUI

启动:/usr/local/mfs/sbin/mfscgiserv

停止: kill/usr/local/mfs/sbin/mfscgiserv


2.1.5访问Web GUI方式

mfs-master IP:9425

http://192.168.17.139:9425



2.1.6相关配置文件

vim mfsexports.cfg

192.168.200.0/24 . rw (允许192.168.200.0访问所有)

192.168.17.0/24 / rw  (允许192.168.17.0访问/目录)

2.1.7添加/usr/local/mfs/sbin/mfsmaster 软链接

ln -s /usr/local/mfs/sbin/mfsmaster/etc/init.d/mfsmaster

/etc/init.d/mfsmaster restart  (启动mfs-master )

/etc/init.d/mfsmaster stop    (关闭mfs-master)


2.2部署mfs-chunk 存储服务器

2.2.1从块设备创建本地文件系统

fdisk -l

mkfs.ext3 /dev/sdb

mkdir /data

chown mfs:mfs /data

mount -t ext3 /dev/sdb /data

df -ah

/dev/sdb 133G 188M 126G 1% /data

2.2.2创建110GLoopDevice文件

/dev/sdb1挂载到/data1 data1目录下生成文件10G mfs.img  

fdisk /dev/sdb (磁盘分区)

mkdir /mfs

mount /dev/sdb1  /mfs (挂载/dev/sdb1分区给/mfs

cd  /mfs

dd if=/dev/zero of=mfs.img bs=1M count=10000 (创建mfs.img镜像)

mkfs.ext3 mfs.img (格式化镜像mfs.img文件)

losetup /dev/loop2 mfs.img (把mfs.img镜像分配给/dev/loop2虚拟分区)

mkfs.ext3 /dev/loop2 (格式化虚拟分区)

mkdir –p /opt/mfs (创建分区挂载目录)

chown mfs:mfs /opt/mfs (目录权限修改)

mount –o loop /dev/loop2 /opt/mfs (把虚拟分区分配给/opt/mfs

2.2.3安装Chunk Server

wgethttp://ncu.dl.sourceforge.net/project/moosefs/moosefs/1.6.11/mfs-1.6.11.tar.gz

tar zxvf mfs-1.6.11.tar.gz

cd mfs-1.6.11

useradd mfs -s /sbin/nologin

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

make

make install

cd /usr/local/mfs/etc/

cp mfschunkserver.cfg.distmfschunkserver.cfg

cp mfshdd.cfg.dist mfshdd.cfg

修改配置文件

cd /usr/local/mfs/etc/

2.2.4修改配置文件

vi mfsadd.cfg (添加分区挂载目录)


vi mfschunkserver.cfg (修改chunk主配置文件指向服务器IP和端口)


2.2.5启动Chunk Server

启动方法一 #/usr/local/mfs/sbin/mfschunkserverstart

#ln –s /usr/local/mfs/sbin/mfschunkserve/etc/init.d/mfschunkserver

启动方法二#/etc/init.d/mfschunkserverrestart

ps axu |grep mfs

tail -f /var/log/messages

登录Web GUI  http://192.168.17.138:9425发现disk+设备





2.2.6停止Chunk Server

/usr/local/mfs/sbin/mfschunkserver stop

2.2.7添加/usr/local/mfs/sbin/mfschunkserver软链接

ln -s /usr/local/mfs/sbin/mfschunkserver/etc/init.d/mfschunkserver

       /etc/init.d/mfschunkserverrestart

2.3部署Metaloggerserver 元日志服务器

安装和配置元数据日志服务器(metalogger

2.3.1安装元数据日志服务

mfsmetalogger.cfg的配置

该服务只有一个配置文件,那就是mfsmetalogger.cfg

[root@nas etc]# ps -ef|grep mfs

mfs 12327 1 0 08:38 ? 00:00:00/usr/local/mfs/sbin/mfsmaster start

创建用户

useradd mfs s /sbin/nolog in

安装

wget http://ncu.dl.sourceforge.net/project/moosefs/moosefs/1.6.11/mfs-1.6.11.tar.gz

tar zxvf mfs-1.6.11.tar.gz

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

make ; make install

文中的大多数变量不难理解,类似于mfsmaster.cfg 中的变量,其中:

这个文件中需要修改的是MASTER_HOST 变量,这个变量的值是master server IP 地址

2.3.2启动metalogger服务

这说明metalogger 服务正常启动了。利用命令检查:

通过进程:

通过检查端口:

[root@mail etc]# vi mfsmetalogger.cfg (修改配置文件MASTER_HOST

# 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.17.139

# MASTER_PORT = 9419

# MASTER_TIMEOUT = 60

# deprecated, to be removed in MooseFS 1.7

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

[root@mail sbin]# ./mfsmetalogger start 启动mstalogger元日志服务器)

working directory: /usr/local/mfs/var/mfs

lockfile created and locked

initializing mfsmetalogger modules ...

mfsmetalogger daemon initialized properly

[root@mail sbin]# ps -ef |grepmfs

mfs 12254 1 0 15:25 ? 00:00:00 ./mfschunkserver start

[root@mail sbin]# lsof -i:9419

COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME

mfsmetalo 12292 mfs 7u IPv4 1395372 TCPmail.tt.com:52456->192.168.3.34:9419 (ESTABLISHED)

查看日志服务器的工作目录

这是运行18 小时后:

2.3.3停止metalogger服务

如果没有启动metalogger 服务,在master server 则会有如下提示信息产生:

[root@mail mfs]# pwd

/usr/local/mfs/var/mfs

[root@mail mfs]# ll

total 8

-rw-r----- 1 mfs mfs 249 Jan 13 15:39 changelog_ml.1.mfs

-rw-r----- 1 mfs mfs 519 Jan 13 15:40 sessions_ml.mfs

[root@mail mfs]# ll

total 1808

-rw-r----- 1 mfs mfs 0 Jan 14 08:40 changelog_ml.0.mfs

-rw-r----- 1 mfs mfs 4692 Jan 13 23:39 changelog_ml.10.mfs

-rw-r----- 1 mfs mfs 4692 Jan 13 22:39 changelog_ml.11.mfs

-rw-r----- 1 mfs mfs 4692 Jan 13 21:39 changelog_ml.12.mfs

-rw-r----- 1 mfs mfs 4692 Jan 13 20:39 changelog_ml.13.mfs

-rw-r----- 1 mfs mfs 4692 Jan 13 19:39 changelog_ml.14.mfs

-rw-r----- 1 mfs mfs 4692 Jan 13 18:39 changelog_ml.15.mfs

-rw-r----- 1 mfs mfs 4692 Jan 13 17:39 changelog_ml.16.mfs

-rw-r----- 1 mfs mfs 4722 Jan 13 16:39 changelog_ml.17.mfs

-rw-r----- 1 mfs mfs 249 Jan 13 15:39 changelog_ml.18.mfs

-rw-r----- 1 mfs mfs 4692 Jan 14 08:39 changelog_ml.1.mfs

-rw-r----- 1 mfs mfs 4692 Jan 14 07:39 changelog_ml.2.mfs

-rw-r----- 1 mfs mfs 4692 Jan 14 06:39 changelog_ml.3.mfs

-rw-r----- 1 mfs mfs 4692 Jan 14 05:39 changelog_ml.4.mfs

-rw-r----- 1 mfs mfs 4692 Jan 14 04:39 changelog_ml.5.mfs

-rw-r----- 1 mfs mfs 4692 Jan 14 03:39 changelog_ml.6.mfs

-rw-r----- 1 mfs mfs 4692 Jan 14 02:39 changelog_ml.7.mfs

-rw-r----- 1 mfs mfs 4692 Jan 14 01:39 changelog_ml.8.mfs

-rw-r----- 1 mfs mfs 4692 Jan 14 00:39 changelog_ml.9.mfs

-rw-r----- 1 mfs mfs 915016 Jan 14 09:00 csstats.mfs

-rw-r----- 1 mfs mfs 777640 Jan 14 08:10 metadata_ml.mfs.back

-rw-r----- 1 mfs mfs 519 Jan 14 09:16 sessions_ml.mfs

[root@mail sbin]# ./mfsmetalogger –s  (停止mstalogger元日志服务器)

working directory: /usr/local/mfs/var/mfs

sending SIGTERM to lock owner (pid:12284)

waiting for termination ... terminated

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

安装数据存储服务

配置文件位于安装目录/usr/local/mfs/etc ,需要的配置文件有两个: mfschunkserver.cfg

mfshdd.cfgmfschunkserver.cf 是主配置文件,mfshdd.cfg 是服务器用来分配给MFS 使用的空间,最

好是一个单独的硬盘或者一个raid 卷,最低要求是一个分区。

mfschunkserver.cfg的配置

文中的大多数变量不难理解,类似于mfsmaster.cfg 中的变量

tail -f /var/log/messages

Dec 30 16:53:00 nas mfsmaster[14291]: no meta loggers connected !!!



2.4mfs- Client的安装

2.4.1安装fuse

yuminstall kernel.x86_64 kernel-devel.x86_64 kernel-headers.x86_64

###rebootserver####

yuminstall fuse.x86_64 fuse-devel.x86_64 fuse-libs.x86_64

modprobefuse

2.3.2安装MooseFS Client

wgethttp://ncu.dl.sourceforge.net/project/moosefs/moosefs/1.6.11/mfs-1.6.11.tar.gz

tarzxvf mfs-1.6.11.tar.gz

cdmfs-1.6.11

useraddmfs -s /sbin/nologin

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

--enable-mfsmount

make

makeinstall

2.4.2挂载文件系统

cd/mnt/

mkdirmfs

/usr/local/mfs/bin/mfsmount/mnt/mfs/ -H 192.168.17.138

mkdirmfsmeta

/usr/local/mfs/bin/mfsmount-m /mnt/mfsmeta/ -H 192.168.17.138


df-ah