MooseFS是一个分布式存储的框架,其具有如下特性:
    1.Free(GPL)
    2.通用文件系统,不需要修改上层应用就可以使用
    3.可以在线扩容,体系架构可伸缩性极强。
    4.部署简单。
    5.高可用,可设置任意的文件冗余程度
    6.可回收在指定时间内删除的文件
    7.提供netapp,emc,ibm等商业存储的snapshot特性。
    8.google filesystem的一个c实现。
    9.提供web gui监控接口。
    10.提高随机读或写的效率。
    11.提高海量小文件的读写效率。
 
MFS 工作原理和设计架构

 
官方的网络示意图是这样的:
 

读写原理:
 
 

192.168.122.10    node1.uplooking.com    master server   
192.168.122.20    node2.uplooking.com    metalogger server
192.168.122.30    node3.uplooking.com    chunk server
192.168.122.40    node4.uplooking.com    chunk server
192.168.122.50    node5.uplooking.com    chunk server
192.168.122.60    node6.uplooking.com    mfs client
 
 
master server
 
[root@node1 ~]# useradd mfs -s /sbin/nologin
[root@node1 ~]# cd /tmp/
[root@node1 tmp]# tar xf mfs-1.6.20-2.tar.gz
[root@node1 tmp]# cd mfs-1.6.20-2
[root@node1 mfs-1.6.20-2]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount
[root@node1 mfs-1.6.20-2]# make
[root@node1 mfs-1.6.20-2]# make install
[root@node1 mfs-1.6.20-2]# cd /usr/local/mfs/etc/
主配置文件
[root@node1 etc]# cp mfsmaster.cfg.dist mfsmaster.cfg
被挂接目录及权限配置
[root@node1 etc]# cp mfsexports.cfg.dist mfsexports.cfg
[root@node1 etc]# cp /usr/local/mfs/var/mfs/metadata.mfs.empty /usr/local/mfs/var/mfs/metadata.mfs
[root@node1 etc]# /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 file has been loaded
no charts data file - initializing empty charts
master <-> metaloggers module: listen on *:9419
master <-> chunkservers module: listen on *:9420
main master server module: listen on *:9421
mfsmaster daemon initialized properly
 
启动WEB监控服务
[root@node1 etc]# /usr/local/mfs/sbin/mfscgiserv
starting simple cgi server (host: any , port: 9425 , rootpath: /usr/local/mfs/share/mfscgi)
 
[root@node1 etc]# firefox http://192.168.122.10:9425
 
 

 
chunk server
 
[root@node3 ~]# useradd mfs -s /sbin/nologin
[root@node3 ~]# cd /tmp/
[root@node3 tmp]# tar xf mfs-1.6.20-2.tar.gz
[root@node3 tmp]# cd mfs-1.6.20-2
 
[root@node3 mfs-1.6.20-2]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfsmount
 
[root@node3 mfs-1.6.20-2]# make
[root@node3 mfs-1.6.20-2]# make install
[root@node3 mfs-1.6.20-2]# cd /usr/local/mfs/etc/
[root@node3 etc]# cp mfschunkserver.cfg.dist mfschunkserver.cfg
mfs使用空间配置
[root@node3 etc]# cp mfshdd.cfg.dist mfshdd.cfg
 
[root@node3 etc]# vim /usr/local/mfs/etc/mfschunkserver.cfg
MASTER_HOST = 192.168.122.10
[root@node3 etc]# mkdir /data
[root@node3 etc]# mount /dev/hda1 /data
[root@node3 etc]# chown -R mfs:mfs /data
[root@node3 etc]# vim mfshdd.cfg
/data
[root@node3 etc]# /usr/local/mfs/sbin/mfschunkserver start
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfschunkserver modules ...
hdd space manager: scanning folder /data/ ...
hdd space manager: scanning complete
hdd space manager: /data/: 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
 
 

 
metalogger server
 
[root@node2 ~]# useradd mfs -s /sbin/nologin
[root@node2 ~]# cd /tmp/
[root@node2 tmp]# tar xf mfs-1.6.20-2.tar.gz
[root@node2 tmp]# cd mfs-1.6.20-2
[root@node2 mfs-1.6.20-2]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount
[root@node2 mfs-1.6.20-2]# make
[root@node2 mfs-1.6.20-2]# make install
[root@node2 mfs-1.6.20-2]# cd /usr/local/mfs/etc/
[root@node2 etc]# cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
[root@node2 etc]# vim mfsmetalogger.cfg
MASTER_HOST = 192.168.122.10
 
[root@node2 etc]# /usr/local/mfs/sbin/mfsmetalogger start
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmetalogger modules ...
mfsmetalogger daemon initialized properly
 
 
 

 
mfs client
 
[root@node6 ~]# yum install fuse fuse-libs fuse-devel
 
[root@node6 ~]# useradd mfs -s /sbin/nologin
[root@node6 ~]# cd /tmp/
[root@node6 tmp]# tar xf mfs-1.6.20-2.tar.gz
[root@node6 tmp]# cd mfs-1.6.20-2
 
[root@node6 mfs-1.6.20-2]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver
[root@node6 mfs-1.6.20-2]# make
[root@node6 mfs-1.6.20-2]# make install
 
 
[root@node6 mfs-1.6.20-2]# /usr/local/mfs/bin/mfsmount /mnt/mfs -H 192.168.122.10
mfsmaster accepted connection with parameters: read-write,restricted_ip ; root mapped to root:root
[root@node6 mfs-1.6.20-2]# /usr/local/mfs/bin/mfsmount -m /mnt/mfsmeta -H 192.168.122.10
mfsmaster accepted connection with parameters: read-write,restricted_ip
 
可能报错
# /usr/local/mfs/bin/mfsmount /mnt/mfs -H 192.168.122.10
mfsmaster accepted connection with parameters: read-write,restricted_ip ; root mapped to root:root
fuse: device not found, try 'modprobe fuse' first
error in fuse_mount
解决办法
# modprobe fuse
再次挂载
# /usr/local/mfs/bin/mfsmount -m /mnt/mfsmeta -H 192.168.122.10
mfsmaster accepted connection with parameters: read-write,restricted_ip
 
[root@node6 mfs-1.6.20-2]# df -h
Filesystem                                Size      Used     Avail     Use%     Mounted on
/dev/mapper/VolGroup00-LogVol00    8.6G      2.6G      5.6G      32%     /
/dev/vda1                                  99M       12M       82M      13%     /boot
tmpfs                                     252M         0          252M      0%         /dev/shm
mfs#192.168.122.10:9421            22G         0           22G       0%         /mnt/mfs
 
 

 
MFS的高级特性
 
1.冗余goal设置
目标(goal),是指文件被拷贝的份数,设定了拷贝的份数后是可以通过mfsgetgoal 命令来证实的,也可以通过mfsrsetgoal 来改变设定。
 
/usr/local/mfs/bin/mfssetgoal 3 /mnt/mfs/test1
/usr/local/mfs/bin/mfsgetgoal /mnt/mfs/test1
    /mnt/mfs/test1: 3
 
用mfsgetgoal –r 和mfssetgoal –r 同样的操作可以对整个树形目录递归操作,其等效于mfsrsetgoal命令。实际的拷贝份数可以通过mfscheckfile 和mfsfile info 命令来证实。
 
注意以下几种特殊情况:
◾一个不包含数据的零长度的文件,尽管没有设置为非零的目标(the non-zero “goal”),但用mfscheckfile 命令查询将返回一个空的结果;将文件填充内容后,其会根据设置的goal创建副本;这时再将文件清空,其副本依然作为空文件存在。
◾假如改变一个已经存在的文件的拷贝个数,那么文件的拷贝份数将会被扩大或者被删除,这个过程会有延时。可以通过mfscheckfile 命令来证实。
◾对一个目录设定“目标”,此目录下的新创建文件和子目录均会继承此目录的设定,但不会改变已经存在的文件及目录的拷贝份数。
可以通过mfsdirinfo来查看整个目录树的信息摘要。
 
2.垃圾回收站
 
一个删除文件能够存放在一个“ 垃圾箱”的时间就是一个隔离时间, 这个时间可以用mfsgettrashtime 命令来验证,也可以用mfssettrashtime 命令来设置。如:
/usr/local/mfs/bin/mfssettrashtime 64800 /mnt/mfs/test1
/usr/local/mfs/bin/mfsgettrashtime /mnt/mfs/test1
    /mnt/mfs/test1: 64800
 
时间的单位是秒(有用的值有:1 小时是3600 秒,24 – 86400 秒,1天 – 604800 秒)。就像文件被存储的份数一样, 为一个目录设定存放时间是要被新创建的文件和目录所继承的。数字0 意味着一个文件被删除后, 将立即被彻底删除,在想回收是不可能的。
 
删除文件可以通过一个单独安装MFSMETA 文件系统。特别是它包含目录/ trash (包含任然可以被还原的被删除文件的信息)和/ trash/undel (用于获取文件)。只有管理员有权限访问MFSMETA(用户的uid 0,通常是root)。
 
/usr/local/mfs/bin/mfsmount -m /mnt/mfsmeta -H 192.168.0.1
 
被删文件的文件名在“垃圾箱”目录里还可见,文件名由一个八位十六进制的数i-node 和被删文件的文件名组成,在文件名和i-node 之间不是用“/”,而是用了“|”替代。如果一个文件名的长度超过操作系统的限制(通常是255 个字符),那么部分将被删除。通过从挂载点起全路径的文件名被删除的文件任然可以被读写。
 
移动这个文件到trash/undel 子目录下,将会使原始的文件恢复到正确的MooseFS 文件系统上路径下(如果路径没有改变)。如果在同一路径下有个新的同名文件,那么恢复不会成功。
 
从“垃圾箱”中删除文件结果是释放之前被它站用的空间(删除有延迟,数据被异步删除)。
 
在MFSMETA中还有另一个目录reserved,该目录内的是被删除但依然打开的文件。在用户关闭了这些被打开的文件后,reserved 目录中的文件将被删除,文件的数据也将被立即删除。在reserved 目录中文件的命名方法同trash 目录中的一样,但是不能有其他功能的操作。
 
3.快照snapshot
 
MooseFS 系统的另一个特征是利用mfsmakesnapshot 工具给文件或者是目录树做快照。
/usr/local/mfs/bin/mfsmakesnapshot source ... destination
 
Mfsmakesnapshot 是在一次执行中整合了一个或是一组文件的拷贝,而且任何修改这些文件的源文件都不会影响到源文件的快照, 就是说任何对源文件的操作,例如写入源文件,将不会修改副本(或反之亦然)。
 
也可以使用mfsappendchunks:
/usr/local/mfs/bin/mfsappendchunks destination-file source-file ...
 
当有多个源文件时,它们的快照被加入到同一个目标文件中(每个chunk 的最大量是chunk)。
 
 
 

MFS搭建的更多相关文章

  1. Web服务器集群搭建关键步骤纪要

    前言:本文记述了搭建一个小型web服务器集群的过程,由于篇幅所限,系统.软件的安装和基本配置我这里就省略了,只记叙关键配置和脚本内容.假如各位朋友想了解各软件详细配置建议查阅官方文档. 一 需求分析: ...

  2. MFS学习总结

    MFS学习总结 MFS概述.特性和新版改进 MFS 工作原理和设计架构 MFS的安装.部署.配置 MFS的高级特性 MFS的性能测试 MFS集群的维护 MFS的常见问题和建议对策 一.MFS概述.特性 ...

  3. 入职第二天:使用koa搭建node server是种怎样的体验

    今天是我入职第二天,leader跟我说,昨天配置好了服务端渲染的文件,今天就先研究研究如何使用koa来搭建一个node server吧! 按照惯例,我去koa官网查了一下什么是koa,结果官网很简单的 ...

  4. MFS故障测试及维护总结

    一.测试环境说明: 10.2.2.230 mfsmaster     VIP:10.2.2.130 10.2.2.231 mfsbackup 10.2.2.253 mfsdata01 10.2.2.2 ...

  5. Centos下MooseFS(MFS)分布式存储共享环境部署记录

    分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连,分布式文件系统的实际基于客户机/服务器模式.目前 ...

  6. Heartbeat+DRBD+MFS高可用

    Heartbeat+DRBD+MFS高可用. 前言:MFS系统简介 组件名称及作用 管理服务器(Managing Server)   简称Master Server 这个组件的角色是管理整个mfs文件 ...

  7. 【Linux运维-集群技术进阶】Nginx+Keepalived+Tomcat搭建高可用/负载均衡/动静分离的Webserver集群

    额.博客名字有点长.. . 前言 最终到这篇文章了,心情是有点激动的. 由于这篇文章会集中曾经博客讲到的全部Nginx功能点.包含主要的负载均衡,还有动静分离技术再加上这篇文章的重点.通过Keepal ...

  8. mfs分布式系统从理论简介到实战部署

    文章前面想说的话:这篇博客写出来真是有点累到了,本来昨天就基本就写好了,放在草稿里面,今天打开就没有了!!唉,就尼玛离我而去了,只有重写,然后中间虚拟机还“爆炸”重启又搞了一会,不容易呀!!希望各位博 ...

  9. Llinux,NFS服务搭建(文件共享)

    NFS配置文件权限参数说明(/etc/exports) 1.rw :表示可读写权限. 2.ro :表示只读权限. 3.sync :请求或写入数据时,数据同步写入到NFS Server的硬盘后才返回.( ...

随机推荐

  1. Docker为什么刚运行就退出了

    引言 最近群里的好多新接触Docker的朋友,好多都遇到了相同的问题,使用 $ docker run -d ubuntu /bin/bash 运行了一个简单的容器后,然后docker ps -a 进行 ...

  2. E20170928-hm

    deploy   vt. (尤指军事行动) 使展开; 施展; 有效地利用;部署 bate   vt. 减轻; 压制; 减去; 使软化;             vi. <方> 减少; 减弱 ...

  3. Rails5 Route Document

    创建: 2017/06/29 完成: 2017/06/29 更新: 2017/06/30 最开头的有效路径展示补充网页版 更新: 2017/07/21 修正错别字 更新: 2017/09/02 增加m ...

  4. akka设计模式系列-Aggregate模式

    所谓的Aggregate模式,其实就是聚合模式,跟masterWorker模式有点类似,但其出发点不同.masterWorker模式是指master向worker发送命令,worker完成某种业务逻辑 ...

  5. MySQL的DML和DQL 增删改查

    DML和DQL   增删改查 SELECT * FROM grade --新增 insert -- 向年级表中新增3条数据INSERT INTO grade(gradeID,gradeName) VA ...

  6. Croppic插件使用介绍-asp.net

    具体的参数使用和基本使用方式请看:http://www.uedsc.com/croppic-api.html 需要说明的几点: 1.支持两种上传方式: (1)先将原图上传至服务器,然后再次将切图信息传 ...

  7. Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?

    Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别? Java 中访问数据库的步骤 1)注册驱动: 2)建立连接: 3)创建Statement: 4)执 ...

  8. sql 分析 依赖beanutils

    你还在为sql语句的拼接而烦恼吗? sql语句支持表达式了! package com.newland.bi.webservice.common.manage; import java.util.Arr ...

  9. 调用.NET Serviced Component引发的性能问题及其解决

    在企业用户环境里,.NET Serviced Component使用广泛.它比较好的把传统COM+封装和.NET应用逻辑衔接了起来,在服务器端应用起到重要作用..NET Serviced Compon ...

  10. CNN-CV识别简史2012-2017:从 AlexNet、ResNet 到 Mask RCNN

    原文:计算机视觉识别简史:从 AlexNet.ResNet 到 Mask RCNN 总是找不到原文,标记一下.        一切从这里开始:现代物体识别随着ConvNets的发展而发展,这一切始于2 ...