MFS 简介
MFS 即Moosefs ,是一款网络分布式文件系统,是一个将数据分散在多台服务器上,然后通过网络挂载在客户端,使客户端能像使用本地硬盘一样存储数据。MFS也像其他类Unix文件系统一样,包含了层级结构(目录树),存储文件属性(权限,最后访问,最后修改等),可以创建特殊文件(块设备,字符设备,管道,套接字),符号链接,硬链接。
MFS 优点
免费开源,目前有CE(社区版)Pro(专业版)两种版本
通用文件系统,不需要修改上层应用就可以使用
在线扩容,在线维护,体系架构可伸缩性强
部署简单
存储对象高可用,可任意设置文件冗余属性
提供类似于windows回收站功能,删除的文件可以在一定时间内恢复
提供Web GUI 监控接口
提供MFS CLI ,操作简单
MFS 文件系统结构分为四部分:
管理服务器managing server (master) 负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复,多节点拷贝
元数据日志服务器Metalogger server(Metalogger) 负责备份master服务器的日志文件,文件类型为changelog_ml.*.mfs,以便于在master server出问题的时候接替其进行工作,可以通过Metalogger 恢复master
数据存储服务器data servers (chunkservers) 负责连接管理服务器,听从管理服务器调度,提供存储空间,并为客户提供数据传输 ,数据文件被分为64M大小的块,每个块被分散存储在块服务器的硬盘上,同时块服务器上还会存储其他块服务器的块文件副本,自动保持数据存储平衡
客户机挂载使用client computers 通过fuse内核接口挂载远程管理服务器上所管理的数据存储服务,客户端挂载上MFS后就可以像操作本地文件系统一样操作MFS中的文件了,与NFS有类似的使用方式,操作系统的内核将对文件的操作传递给FUSE模块,这个模块用来和mfsmount通信,mfsmount 进程后续通过网络和master以及chunkserver 进行通信 ,过程透明。
MFS 读写进程
MFS部署
实验环境: mfsmaster:192.168.1.111
metalogger:192.168.1.100
chunk server : 192.168.1.101/104
client : 192.168.1.102
安装,本次安装使用源码安装,在MFS官网下载moosefs-2.0.89-1.tar.gz,要在所有服务器上都安装源码包,然后再分别根据方案修改配置文件
安装之前在所有服务器上安装 yum -y install zlib-devel fuse-devel gcc
======================================================================master server:
[root@master ~]# useradd mfs -s /sbin/nologin
[root@master ~]# tar zxvf moosefs-2.0.89-1.tar.gz
[root@master ~]# cd mfs-2.0.89/
[root@master mfs-2.0.89]# ./configure --prefix=/etc/mfs --with-default-user=mfs --with-default-group=mfs
[root@master mfs-2.0.89]# make && make install
[root@master mfs-2.0.89]# cd /etc/mfs/etc
[root@master etc]# mv mfsmaster.cfg.dist mfsmaster.cfg //主配置文件
[root@master etc]# mv mfsexports.cfg.dist mfsexports.cfg //导出文件,权限控制文件
[root@master etc]# cp /etc/mfs/var/mfs/metadata.mfs.empty /etc/mfs/var/mfs/metadata.mfs
主配置文件示例:
/etc/mfs/etc/mfsmaster.cfg
EXPORTS_FILENAME = /etc/mfs/etc/mfsexports.cfg //权限控制文件的存储位置
DATA_PATH = /etc/mfs/var/mfs //指定元数据的存储路径
MATOCS_LISTEN_PORT = 9420 //Master to Chunk Server 端口监听
MATOML_LISTEN_PORT = 9419 //Master to MetaLogger
MATOCU_LISTEN_PORT = 9421 //客户端挂载MFS时连接的端口
export文件配置示例:
/etc/mfs/etc/mfsexports.cfg
192.168.1.0/24 / rw,alldirs,mapall=0 //默认配置
[root@master ~]# /etc/mfs/sbin/mfsmaster start
[root@master ~]# /etc/mfs/sbin/mfscgiserv //可选项,可以通过web方式查看mfs导出等信息
starting simple cgi server (host: any , port: 9425 , rootpath: /etc/mfs/share/mfscgi)
[root@master ~]# firefox http://192.168.1.111:9425
======================================================================
======================================================================
detalogger server :
[root@master ~]# useradd mfs -s /sbin/nologin
[root@master ~]# tar zxvf moosefs-2.0.89-1.tar.gz
[root@master ~]# cd mfs-2.0.89/
[root@master mfs-2.0.89]# ./configure --prefix=/etc/mfs --with-default-user=mfs --with-default-group=mfs
[root@master mfs-2.0.89]# make && make install
[root@master mfs-2.0.89]# cd /etc/mfs/etc
[root@master etc]# mv mfsmetalogger.cfg.dist mfsmetalogger.cfg
主配置文件示例:
/etc/mfs/etc/mfsmetalogger.cfg
MASTER_HOST = 192.168.1.111 //指定Master服务器
MASTER_PORT = 9419
DATA_PATH = /etc/mfs/var/mfs //从Master抓回文件,然后进行存放的路径
BACK_LOGS = 50 //超过50个备份日志则轮转
META_DOWNLOAD_FREQ = 24 //元数据备份文件下载的频率,默认24小时
[root@master etc]# /etc/mfs/sbin/mfsmetalogger start
working directory: /etc/mfs/var/mfs
lockfile created and locked
initializing mfsmetalogger modules ...
mfsmetalogger daemon initialized properly
======================================================================
chunk server :(两台设备上配置方法相同,此处列出192.168.1.101配置)
[root@master ~]# useradd mfs -s /sbin/nologin
[root@master ~]# tar zxvf moosefs-2.0.89-1.tar.gz
[root@master ~]# cd mfs-2.0.89/
[root@master mfs-2.0.89]# ./configure --prefix=/etc/mfs --with-default-user=mfs --with-default-group=mfs
[root@master mfs-2.0.89]# make && make install
[root@master mfs-2.0.89]# cd /etc/mfs/etc
[root@master /etc]# mv mfschunkserver.cfg.dist mfschunkserver.cfg
[root@master /etc]# mv mfshdd.cfg.dist mfshdd.cfg
配置chunk server 能够提供的存储空间,此实验中使用本地文件系统作为存储空间
mkdir /mnt/mfschunks1
mkdir /mnt/mfschunks2
chown -R mfs:mfs /mnt/mfschunks1
chown -R mfs:mfs /mnt/mfschunks2
chmod 770 /mnt/mfschunks1
chmod 770 /mnt/mfschunks2
配置chunkserver的主配置文件
/etc/mfs/etc/mfschunkserver.cfg
MASTER_HOST = 192.168.1.111 //master server
/etc/mfs/etc/mfshdd.cfg
/mnt/mfschunks1 10GiB
/mnt/mfschunks2 10GiB //分区的挂载点,指定大小为两个10GiB
root@master ~]# /etc/mfs/sbin/mfschunkserver start
working directory: /etc/mfs/var/mfs
lockfile created and locked
initializing mfschunkserver modules ...
hdd space manager: scanning folder /mfsdir/ ...
hdd space manager: /mfsdir/: 0 chunks found
hdd space manager: scanning complete
main server module: listen on *:9422
no charts data file - initializing empty charts
mfschunkserver daemon initialized properly
======================================================================
client:
[root@master ~]# useradd mfs -s /sbin/nologin
[root@master ~]# tar zxvf moosefs-2.0.89-1.tar.gz
[root@master ~]# cd mfs-2.0.89/
[root@master mfs-2.0.89]# ./configure --prefix=/etc/mfs --with-default-user=mfs --with-default-group=mfs
[root@master mfs-2.0.89]# make && make install
创建挂载点 mkdir /mnt/mfs
创建删除文件存储挂载目录 mkdir /mnt/meta
挂载MFS文件系统
/etc/mfs/bin/mfsmount /mnt/mfs -H 192.168.1.111
/etc/mfs/bin/mfsmount /mnt/meta -H 192.168.1.111
[root@agent2 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
16G 1.9G 13G 13% /
tmpfs 246M 0 246M 0% /dev/shm
/dev/sda1 485M 37M 423M 9% /boot
mfsmaster:9421 40G 9.0G 32G 23% /mnt/mfs
mfsmaster:9421 40G 9.0G 32G 23% /mnt/meta
客户端进行读写测试
在客户端/mnt/mfs下创建两个目录mfs1,mfs2
为两个目录设定不同的存储copy个数
mfssetgoal -r 1 /mnt/mfs/mfs1
mfssetgoal -r 2 /mnt/mfs/mfs2
[root@agent2 ~]# mfsgetgoal /mnt/mfs/mfs1
/mnt/mfs/mfs1: 1
[root@agent2 ~]# mfsgetgoal /mnt/mfs/mfs2
/mnt/mfs/mfs2: 2
做读写测试
写测试:
[root@agent2 ~]# time dd if=/dev/zero of=/mnt/mfs/mfs1/test1 bs=1024K count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 35.4864 s, 30.3 MB/s
real 0m37.656s
user 0m0.002s
sys 0m1.585s
[root@agent2 ~]# time dd if=/dev/zero of=/mnt/mfs/mfs2/test1 bs=1024K count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 39.4327 s, 27.2 MB/s
real 0m40.092s
user 0m0.002s
sys 0m1.951s
读测试:
[root@agent2 ~]# time dd if=/mnt/mfs/mfs1/test of=/dev/null bs=1M
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 15.2552 s, 70.4 MB/s
real 0m15.307s
user 0m0.002s
sys 0m0.488s
[root@agent2 ~]# time dd if=/mnt/mfs/mfs2/test of=/dev/null bs=1M
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 14.2385 s, 75.4 MB/s
real 0m14.244s
user 0m0.001s
sys 0m0.485s
测试结果显示:不同的读写型速率稍有差异
部署过程需要注意的地方:
太简单了,没有!哈哈哈哈哈
MFS 很有意思,接下里GFS!