preface

在上上家公司,曾维护过公司的MFS文件系统,主要用来存储系统日志文件,单纯的把日志当作文件存储,在当时的架构下,MFS就像一个中间站一样,这边程序生成的日志放入MFS,那边日志分析程序从里面取出日志文件来。

翻开尘封多年的笔记,借助下相关的文档资料,特意写下MFS的一丁点知识。

MFS概论与读写过程

MFS的官方网站是http://www.moosefs.org,我们可以从这里获取权威的帮助信息,官方MFS网络组成以及原理如下所示:

MFS Read Process:

MFS Write Process:

how the system works:

All file operations on a client computer that has mounted MooseFS are exactly the same as they would be with other file systems. The operating system kernel transfers all file operations to the FUSE module, which communicates with the mfsmount process. The mfsmount process communicates through the network subsequently with the managing server and data servers (chunk servers). This entire process is fully transparent to the user.

mfsmount communicates with the managing server every time an operation on file metadata is required:

  1. creating files
  2. deleting files
  3. reading directories
  4. reading and changing attributes
  5. changing file sizes
  6. at the start of reading or writing data
  7. on any access to special files on MFSMETA

mfsmount uses a direct connection to the data server (chunk server) that stores the relevant chunk of a file. When writing a file, after finishing the write process the managing server receives information from mfsmount to update a file's length and the last modification time.

Furthermore, data servers (chunk servers) communicate with each other to replicate data in order to achieve the appropriate number of copies of a file on different machines.

通过上面官网的解释,我相信大家应该指定MFS一个工作流程了。

文件系统

如上图所示,MFS文件系统共有4个角色,分别是

  1. 管理服务器 --- Master Server
  2. 元数据日志服务器 --- Metalogger
  3. 数据存储服务器 --- Chunk Server
  4. 客户端 --- Client

4种角色作用如下:

  1. 管理服务器--mfsmaster

    有时也称为元数据服务器,负责管理各个数据存储服务器,调度文件读写,回收文件空间以及恢复多节点拷贝。

  2. 元数据服务器-mfsmetalogger

    负责备份管理服务器的变化日志,文件类型为changelog_ml.*.mfs,以便于在管理服务器出现问题时接替期进行工作。这类服务器是在mfs1.6版本后新增的服务,可以把元数据日志保留在管理服务器中,也可以单独存在一台服务器中。为保证数据的安全性和可靠性,建议单独使用一台服务器来存放元数据日志,需要注意的是,元数据日志守护进程跟管理服务器在同一个服务器,备份元数据日志服务器作为它的客户端,从管理服务器取得日志文件进行备份。

  3. 数据存储服务器-mfschunkserver

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

  4. 客户端-mfsclient

    客户端通过fuse内核接口挂载远程服务器上所管理的数据存储服务器,使共享的文件系统和使用本地linux文件系统的效果看起来一样的。

MFS的安装

我在这里拿一套实验环境来进行部署,机器信息如下:

IP 角色
172.16.22.142 MfsChunkServer
172.16.160.191 MfsMaster
172.16.160.192 Mfsmetadata
172.16.22.81 MfsClient
yum安装过程

想采用yum安装,那么就按照官网资料操作吧:

yum安装参考官方资料:https://moosefs.com/download/centosfedorarhel.html

Important!

If you already upgraded your Chunkservers to v. 3.0.83 or higher, please DO NOT downgrade them!

In MooseFS Chunkserver v. 3.0.83 we changed Chunk header from 5k to 8k (see changelog) - it means, that Chunkserver older than 3.0.83 cannot "understand" new Chunk header, which may lead to potential data loss!

源码包安装

下面开始源码 ,我们安装3.0这个版本的包,安装过程可以参考官网, 或者下面的PDF:

PDF地址:https://moosefs.com/Content/Downloads/moosefs-3-0-users-manual.pdf

地址是:https://moosefs.com/download/sources.html

源码包下载地址是:http://ppa.moosefs.com/src/moosefs-3.0.84-1.tar.gz

Notice

  1. 安装之前/etc/hosts文件做好解析,在这我们将使用mfsmaster,所以一定要在/etc/hosts里面加入这条记录。
  2. 所有服务器时间同步。
172.16.160.191安装master server-管理服务器
[root@localhost tmp]# tar zxf moosefs-3.0.84-1.tar.gz
[root@localhost tmp]# cd moosefs-3.0.84
[root@localhost moosefs-3.0.84]# useradd mfs -s /sbin/nologin
[root@localhost moosefs-3.0.84]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
[root@localhost moosefs-3.0.84]# make && make install

编译没有问题,那么就安装成功了,我们在/usr/local/mfs/下找到配置文件,更改配置文件:

mfsmaster.cfg

[root@localhost moosefs-3.0.84]# cd /usr/local/mfs/etc/mfs
[root@localhost mfs]# cp sbin/mfs* /usr/sbin/ #复制命令到系统下面
[root@localhost mfs]# cp -a mfsmaster.cfg.sample mfsmaster.cfg
[root@localhost mfs]# grep ^[a-Z] mfsmaster.cfg
WORKING_USER = mfs
WORKING_GROUP = mfs
SYSLOG_IDENT = mfsmaster #在syslog中的表示,说明这是mfsmaster产生的
LOCK_MEMORY = 0 # 是否执行mlockall()以避免mfsmaster内存溢出(默认为0)
NICE_LEVEL = -19 # 运行的优先级(默认-19,注意,这进程必须是root启动 )
DATA_PATH = /usr/local/mfs/var/mfs #数据存放路径,该目录下有三大类文件,changelog,sessions,stats
EXPORTS_FILENAME = /usr/local/mfs/etc/mfs/mfsexports.cfg #被挂载目录以及其权限控制文件的存放位置
BACK_LOGS = 50 #元数据的改变日志文件数量(默认是50)
MATOML_LISTEN_HOST = * # 元数据日志服务器监听的IP地址(默认是*,代表任何IP)
MATOML_LISTEN_PORT = 9419 # 元数据日志服务器监听的端口地址,默认是9419
MATOCS_LISTEN_HOST = * # 用于存储服务器(Chunk Server)连接的IP地址
MATOCS_LISTEN_PORT = 9420 # 是存储服务器(Chunk server)连接的端口地址
REPLICATIONS_DELAY_INIT = 300 # 延迟复制的时间(默认是300)
CHUNKS_LOOP_MIN_TIME = 300 # chunks 的回环率
CHUNKS_SOFT_DEL_LIMIT = 10
CHUNKS_WRITE_REP_LIMIT = 2,1,1,4 在一个循环里复制到一个CHUNK Server的最大chunks数目
CHUNKS_READ_REP_LIMIT = 10,5,2,5
MATOCL_LISTEN_HOST = *
MATOCL_LISTEN_PORT = 9421
以上配置不需要修改,直接把配置文件copy之后就可以了。

mfsexports.cfg

[root@localhost mfs]# cp mfsexports.cfg.sample mfsexports.cfg
[root@localhost mfs]# tail mfsexports.cfg
172.16.160.0/24 . rw,alldirs,maproot=0

参数解释:

  1. 第一部分 172.16.160.0/24表示客户端的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段
  1. 第二部分 / 表示被挂接的目录
  • /表示MooseFS的根
  • .表示MFSMETA文件系统
  1. 第三部分 rw.alldirs,maproot=0 表示客户端拥有的权限。

    权限部分选项如下:
  • ro 只读模式共享
  • rw 读写方式共享
  • alldirs 允许挂载任何指定的子目录
  • maproot 映射为root用户还是指定的用户
  • password 指定客户端密码

metadata.mfs

默认的元数据文件为metadata.mfs.empty,启动master server,需要重命名下

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

启动master server

启动master server的命令为mfsmaster,其参数如下所示。

-v : print version number and exit
-f : run in foreground
-u : log undefined config variables
-n : do not attempt to increase limit of core dump size
-t locktimeout : how long wait for lockfile 等待lockfile的时长
-c cfgfile : use given config file
-i : ignore some metadata structure errors (attach orphans to root, ignore names without inode, etc.)
-a : automatically restore metadata from change logs
-x : produce more verbose output
-xx : even more verbose output

master server可以单独启动,即使没有任何数据存储服务器(chunk server)也能够正常工作。启动master server的命令如下:

[root@localhost mfs]# mfsmaster start
[root@localhost mfs]# netstat -lnpt #查看监听端口,确保启动成功
Active Internet connections (only servers)
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 5944/mfsmaster
tcp 0 0 0.0.0.0:9420 0.0.0.0:* LISTEN 5944/mfsmaster
tcp 0 0 0.0.0.0:9421 0.0.0.0:* LISTEN 5944/mfsmaster
'''

停止master server

安全停止master server是非常必要的,千万不要kill,而是利用自带的命令mfsmaster来安全停止master server。

[root@localhost mfs]# mfsmaster stop

我们安装后采用默认的配置,没有做任何更改,所以默认的日志是写入/var/log/messages。

172.16.160.192安装元数据日志服务器

下载代码包后,解压后开始编译。

[root@localhost moosefs-3.0.84]# useradd mfs -s /sbin/nologin
[root@localhost moosefs-3.0.84]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
[root@localhost moosefs-3.0.84]# make && make install

mfsmetalogger.cfg

更改配置文件

[root@localhost mfs]# cp mfsmetalogger.cfg.sample mfsmetalogger.cfg
[root@localhost mfs]# vim mfsmetalogger.cfg
[root@localhost mfs]# grep ^[a-Z] mfsmetalogger.cfg
META_DOWNLOAD_FREQ = 2 # 元数据备份文件下载请求频率,默认是24小时,即每2小时从master server上下载一个metadata.mfs文件,当元数据服务器关闭或者故障的时候,metadata.mfs.back文件将消失,此时需要从元数据日志服务器中取得这个文件。注意,这个文件和日志文件共同使用才能恢复整个已损坏的分布式文件系统
...只需要更改上面2行就行了,其他保持默认即可如果没有特殊要求。
MASTER_HOST = 172.16.160.191 # master server的地址

启动元数据服务器

启动,停止命令是mfsmetalogger :

root@localhost mfs]# cp /usr/local/mfs/sbin/mfsmetalogger /usr/sbin/
[root@localhost mfs]# mfsmetalogger start # 启动命令
[root@localhost mfs]# ps -ef |grep mfs
mfs 7446 1 0 01:43 ? 00:00:00 mfsmetalogger start
root 7449 1583 0 01:43 pts/0 00:00:00 grep mfs
[root@localhost mfs]# lsof -i :9419 # 确保端口在使用中
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mfsmetalo 7446 mfs 8u IPv4 19768 0t0 TCP 172.16.160.192:48103->172.16.160.191:9419 (ESTABLISHED) [root@localhost mfs]# cd /usr/local/mfs/var/mfs/ # 查看工作目录下是否有元数据文件生成
[root@localhost mfs]# ls
changelog_ml_back.0.mfs changelog_ml_back.1.mfs metadata.mfs.empty metadata_ml.mfs.back [root@localhost mfs]# mfsmetalogger stop # 停止服务
172.16.22.142安装数据存储服务器(Chunk Server)

下载代码包后,解压后开始编译。

[root@salt moosefs-3.0.84]# useradd mfs -s /sbin/nologin
[root@salt moosefs-3.0.84]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs && make && make install

mfschunkserver

[root@salt moosefs-3.0.84]# cd /usr/local/mfs/etc/mfs/
[root@salt mfs]# cp mfschunkserver.cfg.sample mfschunkserver.cfg
[root@salt mfs]# vim mfschunkserver.cfg
[root@salt mfs]# grep ^[a-Z] mfschunkserver.cfg
MASTER_HOST = mfsmaster # 指明master server服务器地址
MASTER_PORT = 9420 #指明master server 端口
HDD_CONF_FILENAME = /usr/local/mfs/etc/mfs/mfshdd.cfg # 这个指明哪个配置文件来配置共享磁盘的

mfshdd

[root@salt etc]# mkdir /mnt/sdb1
[root@salt mfs]# grep ^/ mfshdd.cfg
/mnt/sdb1 # 必须把磁盘挂载在某个目录下,直接使用硬盘或者分区是不行的。
[root@salt etc]# mkfs.ext4 /dev/sdb1
[root@salt etc]# mount /dev/sdb1 /mnt/sdb1/
[root@salt etc]# chown -R mfs.mfs /mnt/sdb1/

启动服务

[root@salt etc]# mfschunkserver start
[root@salt etc]# ps -ef |grep mfs
mfs 40568 1 0 02:14 ? 00:00:00 mfschunkserver start
root 40625 17565 0 02:15 pts/0 00:00:00 grep mfs

要停止服务,请使用mfschunkserver stop来停止。

172.16.22.72 安装客户端

安装fuse

[root@localhost libfuse-master]# yum -y install fuse fuse-devel fuse-libs
我的yum源是CentOs6.6 安装好后自带的。

需要注意的是,如果采用源码安装fuse,那么出现 configure error,mfsmount build was forced,but the fuse development package is not installed ..

这样的错误不能正确安装MFS客户端,是因为没有设置环境变量,通过下面两种方法可以解决:

第一 编辑/etc/profile ,在此文件中加入下面的内容:
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH 第二 直接在命令行执行
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

挂载磁盘并且使用

注意,如果使用mfsmount挂载磁盘后,df出现不了挂载MFS的记录,那么请检查/etc/hosts有没有添加mfsmaster这条记录。因为我踩的坑就是没有添加这条记录导致虽然提示挂载上去 了,但是无法使用mfs的盘,df也显示不了新挂载的盘。

[root@localhost ~]# mfsmount /mnt/mfsclient/ -H mfsmaster   # mfsmaster是在/etc/hosts有记录。
mfsmaster accepted connection with parameters: read-write,restricted_ip,admin ; root mapped to root:root
[root@localhost ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda2 ext4 28G 2.5G 24G 10% /
tmpfs tmpfs 238M 0 238M 0% /dev/shm
/dev/sda1 ext4 283M 28M 240M 11% /boot
mfsmaster:9421 fuse.mfs 8.5G 278M 8.2G 4% /mnt/mfsclient # 新增挂载的记录 [root@localhost mfsclient]# mount
/dev/sda2 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
vmware-vmblock on /var/run/vmblock-fuse type fuse.vmware-vmblock (rw,nosuid,nodev,default_permissions,allow_other)
mfsmaster:9421 on /mnt/mfsclient type fuse.mfs (rw,nosuid,nodev,allow_other)

卸载磁盘

老规矩,umount卸载即可。

[root@localhost mfsclient]# umount /mnt/mfsclient/

测试

至此,MFS已经搭建完成,我们可以来个简单的文件写入。

[root@localhost mfsclient]# dd if=/dev/zero of=/mnt/mfsclient/haha.iso count=100 bs=20M
100+0 records in
100+0 records out
2097152000 bytes (2.1 GB) copied, 7.14513 s, 294 MB/s

如有疑问请与本人联系,18500777133@sina.cn

MooseFs-分布式文件系统系列(一)之了解并安装它的更多相关文章

  1. 分布式文件系统FastDFS在CentOS7上的安装及与Springboot的整合

    1. 概述 FastDFS 是目前比较流行的分布式文件系统,可以很容易的实现横向扩展.动态扩容.灾备.高可用和负载均衡. FastDFS 的服务分为 tracker 服务 和 storage 服务,  ...

  2. 在CentOS上安装部署MooseFS分布式文件系统

    参考资料: http://www.moosefs.org/tl_files/manpageszip/moosefs-step-by-step-tutorial-cn-v.1.1.pdf 环境介绍:OS ...

  3. 分布式文件系统 - FastDFS 在 CentOS 下配置安装部署

    少啰嗦,直接装 看过上一篇分布式文件系统 - FastDFS 简单了解一下的朋友应该知道,本次安装是使用目前余庆老师开源的最新 V5.05 版本,是余庆老师放在 Github 上的,和目前你能在网络上 ...

  4. FastDFS分布式文件系统&Nginx负载均衡最小环境安装配置[超级详解]

    1.背景 FastDFS 是一款开源的.分布式文件系统(Distributed File System),由淘宝开发平台部资深架构师余庆开发.该开源项目的主页是 http://code.google. ...

  5. MooseFs-分布式文件系统系列(二)之安装总结

    preface 上篇博客写了如何安装MFS,那么现在就说说经验总结把 安装方式有源码和yum安装,在官网地址:https://moosefs.com/download/centosfedorarhel ...

  6. 转载:分布式文件系统 - FastDFS 在 CentOS 下配置安装部署(2)

    原文:http://blog.mayongfa.cn/193.html 一.安装 Nginx 和 fastdfs-nginx-module 安装 Nginx 请看:从零开始学 Java - CentO ...

  7. 转载:分布式文件系统 - FastDFS 在 CentOS 下配置安装部署(1)

    原文:http://blog.mayongfa.cn/192.html 一.安装 libfastcommon 和 FastDFS 1.下载安装 libfastcommon ,这里是通过wget下载(我 ...

  8. 【架构设计】分布式文件系统 FastDFS的原理和安装使用

    本文地址 分享提纲: 1.概述 2. 原理 3. 安装 4. 使用 5. 参考文档 1. 概述 1.1)[常见文件系统] Google了一下,流行的开源分布式文件系统有很多,介绍如下:   -- mo ...

  9. MooseFS分布式文件系统介绍及安装教程详解

    MFS系统由4个部分构成:master.metalogger.chunkserver.client. 1.Master —— mfs的大脑,记录着管理信息,比如:文件大小,存储的位置,份数等,和inn ...

  10. 分布式文件系统 - FastDFS 简单了解一下

    别问我在哪里 也许我早已不是我自己,别问我在哪里,我一直在这里. 突然不知道说些什么了... 初识 FastDFS 记得那是我刚毕业后进入的第一家公司,一个技术小白进入到当时的项目组后,在开发中上传用 ...

随机推荐

  1. Scala之OOP

    /** * 1,在Scala中定义类是用class关键字: * 2,可以使用new ClassName的方式构建出类的对象: * 3, 如果名称相同,则object中的内容都是class的静态内容,也 ...

  2. C#:异步编程和线程的使用(.NET 4.5 )

    摘自:http://www.codeproject.com/Articles/996857/Asynchronous-programming-and-Threading-in-Csharp-N(葡萄城 ...

  3. matlab 功率谱分析

    matlab 功率谱分析 1.直接法:直接法又称周期图法,它是把随机序列x(n)的N个观测数据视为一能量有限的序列,直接计算x(n)的离散傅立叶变换,得X(k),然后再取其幅值的平方,并除以N,作为序 ...

  4. C#中的System.Speech命名空间初探

    本程序是口算两位数乘法,随机生成两个两位数,用语音读出来.然后开启语音识别,接受用户输入,知道答案正确关闭语音识别.用户说答案时,可以说“再说一遍”重复题目. 关键是GrammarBuilder和Ch ...

  5. Python基础-字符串格式化_百分号方式_format方式

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  6. git查看提交历史

    git日志的查看 在使用 Git 提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,我们可以使用 git log 命令查看. 查看日志信息: $ git log 可以用 --oneline ...

  7. ECharts图表中级入门之formatter:夜谈关于ECharts图表内的数据格式化方法

    来源于:http://www.ithao123.cn/content-3751220.html 格式化之所以存在,主要是因为我们想把一些不够人性化的内容通过某种处理让其变得人性化,便于用户更好地理解内 ...

  8. 天朝git的使用

    开源中国社区 官方网站 https://git.oschina.net/ 开源中国社区成立于2008年8月,其目的是为中国的IT技术人员提供一个全面的.快捷更新的用来检索开源软件以及交流使用开源经验的 ...

  9. Java 学习之路 之 泛型方法

    前面介绍了在定义类.接口时可以使用类型形参,在该类的方法定义和 Field 定义.接口的方法定义中,这些类型形参可被当成普通类型来用.在另外一些情况下,我们定义类.接口时没有使用类型形参,但定义方法时 ...

  10. Java面试题(全)

    JAVA部分 什么是反射机制?反射机制应用(Struts中反射机制的应用) 答:运行状态中,对于任意一个类,都可以知道它的所有属性和方法,对于任意一个对象都可以调用它的任意一个方法,这种动态获取信息以 ...