MooseFS 3.0版介绍及试用
2016-12-21 16:48:44 阿炯

MooseFS在推出了v3.0版本,分为社区版本和专业版本,不过和v1.x版本相比较,增强了一些功能特性(quotas, extended attributes, ACL support, MFS CLI tool, better memory management.)。国内百度有基于MooseFS的深度二次开发,叫Shadow-MFS(https://github.com/ops-baidu/shadow-mfs),不过这个项目感觉已经烂尾了。

发现了一个国外的一个基于MooseFS的分支版本,叫做LizardFS,代码也有放在Github上。在实际安装使用后,感觉还不错(似乎其已经不再维护了,在2023年12月看其最后更新依然停留在2017年12月)。


[新特点]
chunkserver的硬盘分配支持不同的大小
支持了内存锁定,默认不开启。linux下支持调用malloc不要过度使用交换分区(40%)
mfstopology
支持chunkserver连接到master的简单的用户名密码认证,它同时有很多参数可微调。
支持网络地址映射
对文件的atime进行了处理,默认与常用的文件相同。
mfstopology用来定义了ip地址段及所在的机架的映射关系。
支持高级的文件类型(字符、设备、管道、套接字等),支持POSIX文件锁
atime, mtime and ctime timestamps
支持POSIX ACL
更加灵活的存储方式,如按文件类型,存储介质特性(ssd,sas,sata),机柜间的网络结构等打标签的方式来分区存放文件数据,作者用了独立的文档来介绍这部分的功能,也进行了大书特书地介绍



MFS文件系统结构:

1)管理服务器managing server (master) :负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复,多节点拷贝。单个机器管理整个文件系统,用来存储记录每一个文件的Metadata(记录文件的大小、文件的属性、文件的位置,也包括非常规文件,如目录、sockets、管道和设备)
 
2)元数据日志服务器Metalogger server(metalogger):负责备份master服务器的变化日志文件,文件类型为changelog_ml.*.mfs,以便于在master server出问题的时候接替其进行工作。

3)数据存储服务器data servers (chunkservers):负责连接管理服务器,听从管理服务器调度,提供存储空间,并为客户提供数据传输。

4)客户机(client):通过fuse内核接口挂接远程管理服务器上所管理的数据存储服务器,使之看起来和本地unix文件系统使用一样。

数据存储过程:

数据存储服务器才是真正存储用户数据的服务器,在存储文件时,首先把文件分成块,然后将这些块在数据存储服务器之间互相复制,同时数据存储服务器还负责连接管理服务器,服从管理服务器调度,并为客户提供数据传输。数据存储服务器可以有多个,并且数量越多,可靠性越高,MFS可用的磁盘空间也越大。另外异步复制数据。

文件存储在本地存放的方式为:16进制两位数命名文件夹,单层目录。


[os env]

源码编译安装

添加专用用户:
useradd --comment 'Used for mfs file stroage serv use' --gid backup -r --shell /usr/sbin/nologin --uid 9420 mfs

(master)
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=backup

(no master)
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=backup --disable-mfsmaster


相关系统依赖组件

****** mfsnetdump disabled ******
* mfsnetdump needs pcap library *
*********************************
no pkg-config - can't check FUSE version
**** mfsmount disabled *****
* pkg-config not installed *
****************************

checking for FUSE... no
******************************** mfsmount disabled ********************************
* fuse library is too old or not installed - mfsmount needs version 2.6 or higher *
***********************************************************************************

apt-get install libpcap-dev pkg-config libfuse-dev -y

------------------------------------------------------

checking for library containing pcap_lib_version... no
****** mfsnetdump disabled ******
* mfsnetdump needs pcap library *
*********************************
checking for FUSE... no
******************************** mfsmount disabled ********************************
* fuse library is too old or not installed - mfsmount needs version 2.6 or higher *
***********************************************************************************
checking for fuse_version in -lfuse... no

-----------------------
checking for zlibVersion in -lz... no
configure: error: zlib development library not found

yum install -y fuse-devel libpcap-devel zlib-devel

[各组件配置]

[mfsmetalogger]

如果与mfschunkserver放同一台机器的话,要修改它的数据存放目录。
DATA_PATH = /usr/local/mfs/var/metalog

另外为了安全起见,加快日志下载频率:
# metadata download frequency in hours (default is 24, should be at least BACK_LOGS/2)
# META_DOWNLOAD_FREQ = 2

修改mfsmaster的连接地址:
# MooseFS master host, IP is allowed only in single-master installations (default is mfsmaster)
# MASTER_HOST = freeoa

这里连接的端口是9419

[mfschunkserver]
它基本上没有要改动的地方,当然要按实际情况修改mfsmaster的连接地址:
# MooseFS master host, IP is allowed only in single-master installations (default is mfsmaster)
# MASTER_HOST = freeoa

这里连接的端口是9420

其次是指定其所要共享出现的磁盘分区,源自文件:mfshdd.cfg,在这个配置文件中指定好目录,另外是该目录的权限。另外在添加chunkserver后,容量是自动增加的,不用做另外的操作。

Aug 17 14:33:05 freeoa mfsmaster[2811]: csdb: server not found (192.168.0.83:9422,0), add it to database
Aug 17 14:33:05 freeoa mfsmaster[2811]: chunkserver register begin (packet version: 6) - ip: 192.168.0.83 / port: 9422, usedspace: 0 (0.00 GiB), totalspace: 0 (0.00 GiB)
Aug 17 14:33:05 freeoa mfsmaster[2811]: csdb: generate new server id for (192.168.0.83:9422): 2
Aug 17 14:33:06 freeoa mfsmaster[2811]: chunkserver register end (packet version: 6) - ip: 192.168.0.83 / port: 9422


[mount]
root@freeoa:~# /usr/local/mfs/bin/mfsmount -H freeoa -P 9421 /mnt/mfs/
mfsmaster accepted connection with parameters: read-write,restricted_ip,admin ; root mapped to root:root

Replication limits are divided into four cases:
• first limit is for endangered chunks (chunks with only one copy)
• second limit is for undergoal chunks (chunks with number of copies lower than specified goal)
• third limit is for rebalance between servers with space usage around arithmetic mean
• fourth limit is for rebalance between other servers (very low or very high space usage)



参考来源

MooseFS使用总结

使用分布式文件系统MooseFS实现存储共享(v1.6版)