文件可以有多份copy,当goal为1时,文件会被随机存到一台chunkserver上,当goal的数大于1时,copy会由master调度保存到不同的chunkserver上,goal的大小不要超过chunkserver的数量,否则多出的copy,不会有chunkserver去存。

测试环境:

IP

作用

192.168.0.1

master server

192.168.0.2

metalogger server

192.168.0.3

chunk server

192.168.0.4

chunk server

192.168.0.5

chunk server

192.168.0.6

mfs client

1.Master Server

192.168.0.1上master安装:

useradd mfs -s /sbin/nologin

http://sourceforge.net/projects/moosefs/files/moosefs/1.6.27/mfs-1.6.27-1.tar.gz/download

tar zxvf mfs-1.6.27-1.tar.gz

cd mfs-1.6.27-1/

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

make

make install

cd /usr/local/mfs/etc

cp mfsmaster.cfg.dist mfsmaster.cfg  #主配置文件

cp mfsexports.cfg.dist mfsexports.cfg #被挂接目录及权限配置

master配置文件:

vi /usr/local/mfs/etc/mfsmaster.cfg

# WORKING_ USER = mfs      #运行master server 的用户

# WORKING_ GROUP = mfs     #运行master server 的组

# SYSLOG_IDENT = mfsmaster #master server 在syslog 中的标识,说明是由master serve 产生的

# LOCK_MEMORY = 0          #是否执行mlockall()以避免mfsmaster 进程溢出(默认为0)

# NICE_LEVEL = -19         #运行的优先级(如果可以默认是-19; 注意: 进程必须是用root 启动)

# EXPORTS_FILENAME = /usr/local/mfs/etc/mfsexports.cfg #被挂接目录及其权限控制文件的存放位置

# DATA_PATH = /usr/local/mfs/var/mfs    #数据存放路径,此目录下大致有三类文件,changelog,sessions 和stats;

# BACK_LOGS = 50                        #metadata 的改变log 文件数目(默认是50);

# REPLICATIONS_ DELAY_INIT = 300        #延迟复制的时间(默认是300s);

# REPLICATIONS_ DELAY_DISCONNECT = 3600 #chunkserver 断开的复制延迟(默认是3600);

# MATOML_LISTEN_HOST = *     #metalogger 监听的IP 地址(默认是*,代表任何IP);

# MATOML_LISTEN_PORT = 9419 #metalogger 监听的端口地址(默认是9419);

# MATOCS_LISTEN_ HOST = *   #用于chunkserver 连接的IP 地址(默认是*,代表任何IP);

# MATOCS_LISTEN_PORT = 9420 #用于chunkserver 连接的端口地址(默认是9420);

# MATOCU_LISTEN_HOST = *    #用于客户端挂接连接的IP 地址(默认是*,代表任何IP);

# MATOCU_LISTEN_PORT = 9421 #用于客户端挂接连接的端口地址(默认是9421);

# CHUNKS_LOOP_TIME = 300    #chunks 的回环频率(默认是:300 秒);# CHUNKS_DEL_LIMIT = 100

# CHUNKS_WRITE_REP_LIMIT = 1 #在一个循环里复制到一个chunkserver 的最大chunk 数目(默认是1)

# CHUNKS_READ_REP_LIMIT = 5  #在一个循环里从一个chunkserver 复制的最大chunk 数目(默认是5)

# REJECT_OLD_ CLIENTS = 0    #弹出低于1.6.0 的客户端挂接(0 或1,默认是0)

修改DATA_PATH指定的目录要权限为mfs,chown -R mfs:mfs /usr/local/mfs/var/mfs

mfsexports 访问控制对于那些老客户是没用的

vi /usr/local/mfs/etc/mfsexports.cfg

#客户端IP        允许挂载的目录  客户端拥有的权限

192.168.0.0/24     /            rw,alldirs,maproot=0  # /标识MFS的根

192.168.0.0/24     .            rw                    # .标识MFSMETA 文件系统

地址格式:

* #所有的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 段

权限说明:

ro #只读模式

rw #读写模式

alldirs #许挂载任何指定的子目录

maproot #映射为root,还是指定的用户

password #指定客户端密码

服务操作:

/usr/local/mfs/sbin/mfsmaster [-vdu] [-t locktimeout] [-c cfgfile] [start|stop|restart|reload] #master服务操作

/usr/local/mfs/sbin/mfscgiserv  #启动WEBUI 监控服务,访问http://192.168.0.1:9425/

/usr/local/mfs/var/mfs  #此目录见mfsmaster.cfg中DATA_PATH配置

metadata.mfs.back  #MFS元数据信息,延迟将内存数据写入文件,默认频率1h,默认1d同步一次此文件到metalogger server

changelog.*.mfs      #文件操作日志记录,实时记录、同步到metalogger server

sessions.mfs  #客户操作状态记录

stats.mfs        #?

2.Chunk Server

在192.168.0.3-192.168.0.5上安装chunk server:

useradd mfs -s /sbin/nologin

http://sourceforge.net/projects/moosefs/files/moosefs/1.6.27/mfs-1.6.27-1.tar.gz/download

tar zxvf mfs-1.6.27-1.tar.gz

cd mfs-1.6.27-1/

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

make

make install

cd /usr/local/mfs/etc

cp mfschunkserver.cfg.dist mfschunkserver.cfg #chunk配置文件

cp mfshdd.cfg.dist mfshdd.cfg  #MFS使用空间配置

chunk server配置文件:

vi /usr/local/mfs/etc/mfschunkserver.cfg

# WORKING_USER = mfs

# WORKING_GROUP = mfs

# DATA_PATH = /usr/local/mfs/var/mfs

# LOCK_FILE = /var/run/mfs/mfschunkserver.pid

# SYSLOG_IDENT = mfschunkserver

# BACK_LOGS = 50

# MASTER_RECONNECTION_DELAY = 30

MASTER_HOST = 192.168.0.1 #元数据服务器的名称或地址,可以是主机名,也可以是ip 地址

# MASTER_PORT = 9420 #为Matser中 MATOCS_LISTEN_PORT指定的端口

# MASTER_TIMEOUT = 60

# CSSERV_LISTEN_HOST = *

# CSSERV_LISTEN_PORT = 9422 这个监听端口用于与其它数据存储服务器间的连接,通常是数据复制

# CSSERV_TIMEOUT = 60

# CSTOCS_TIMEOUT = 60

# HDD_CONF_FILENAME = /usr/local/mfs/etc/mfshdd.cfg 分配给MFS 使用的磁盘空间配置文件的位置

注:

MASTER_HOST 不能为localhost或127.0.0.1

MASTER_PORT必须为元数据服务器配置中MATOCS_LISTEN_PORT指定的端口,且IP必须被master允许。

chown -R mfs:mfs /data

echo 'data' >> /usr/local/mfs/etc/mfshdd.cfg

服务操作:

/usr/local/mfs/sbin/mfschunkserver [-vdu] [-t locktimeout] [-c cfgfile] [start|stop|restart|reload]  #chunkserver操作命令

3.MetaLogger Server

在192.168.0.2上安装metalogger server,安装步骤同master,在些略过。

配置文件:

vi /usr/local/mfs/etc/mfsmetalogger.cfg

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

# MASTER_PORT = 9419

# MASTER_TIMEOUT = 60

# deprecated, to be removed in MooseFS 1.7

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

服务操作:

/usr/local/mfs/sbin/mfsmetalogger [-vdu] [-t locktimeout] [-c cfgfile] [start|stop|restart|reload]

4. MFS Client

在192.168.0.6上执行客户端安装

4.1

FUSE安装:

wget http://sourceforge.net/projects/fuse/files/fuse-2.X/2.9.3/fuse-2.9.3.tar.gz/download

tar zxf fuse-2.9.3.tar.gz

cd fuse-2.9.3

./configure

make && make install

echo 'export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH' >>/etc/profile

source /etc/profile

lsmod |grep fuse #检查fuse是否加载到内核,若没有,执行下面命令

modprobe fuse&&lsmod |grep fuse  #若将下列mfsmount挂载操作加入开机自启动,一定将modprobe fuse也加入开机自启

注:

一定要将fuse环境变量配置ok,否则安装mfsmount会装不上

若将下列mfsmount挂载操作加入开机自启动,一定将modprobe fuse也加入开机自启,且在其执行之前执行。

4.2 MFSMount安装:

useradd mfs -s /sbin/nologin

wget http://sourceforge.net/projects/moosefs/files/moosefs/1.6.27/mfs-1.6.27-1.tar.gz/download

tar zxvf mfs-1.6.27-1.tar.gz

cd mfs-1.6.27-1/

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

make;make install

4.3 挂载MFS

mkdir /mnt/mfs /mnt/mfsmeta  #创建挂载点

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

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

5.MFS集群的启动与关闭

5.1 安全启动MooseFS 集群:

启动mfsmaster 进程

启动所有的mfschunkserver 进程

启动mfsmetalogger 进程(如果配置了mfsmetalogger)

当所有的chunkservers 连接到MooseFS master 后,任何数目的客户端可以利用mfsmount 去挂接被export 的文件系统。(可以通过检查master 的日志或是CGI 监视器来查看是否所有的chunkserver被连接)。

5.2安全的停止MooseFS 集群:

在所有的客户端卸载MooseFS 文件系统

用mfschunkserver stop 命令停止chunkserver 进程

用mfsmetalogger stop 命令停止metalogger 进程

用mfsmaster stop 命令停止master 进程

1.冗余goal设置

目标(goal),是指文件被拷贝的份数,设定了拷贝的份数后是可以通过mfsgetgoal 命令来证实的,也可以通过mfsrsetgoal 来改变设定。

/usr/local/mfs/bin/mfssetgoal 3 /mnt/mfs/test1    设置文件/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

时间的单位是秒。就像文件被存储的份数一样, 为一个目录设定存放时间是要被新创建的文件和目录所继承的。数字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)。

4. MFS chunkservers 的维护

若每个文件的goal(目标)都不小于2,并且没有under-goal 文件(这些可以用mfsgetgoal –r和mfsdirinfo 命令来检查),那么一个单一的chunkserver 在任何时刻都可能做停止或者是重新启动。以后每当需要做停止或者是重新启动另一个chunkserver 的时候,要确定之前的chunkserver 被连接,而且要没有under-goal chunks。

5.MFS元数据备份与恢复

通常元数据有两部分的数据:

主要元数据文件metadata.mfs,当mfsmaster 运行的时候会被命名为metadata.mfs.back

元数据改变日志changelog.*.mfs,存储了过去的N 小时的文件改变(N 的数值是由BACK_LOGS参数设置的,参数的设置在mfschunkserver.cfg 配置文件中)。

主要的元数据文件需要定期备份,备份的频率取决于取决于多少小时changelogs 储存。元数据changelogs 实时的自动复制。1.6版本中这个工作都由metalogger完成。

5.1 MFS Master的恢复

一旦mfsmaster 崩溃(例如因为主机或电源失败),需要最后一个元数据日志changelog 并入主要的metadata 中。这个操作时通过mfsmetarestore 工具做的,最简单的方法是:

/usr/local/mfs/bin/mfsmetarestore -a

如果master 数据被存储在MooseFS 编译指定地点外的路径,则要利用-d 参数指定使用:

/usr/local/mfs/bin/mfsmetarestore -a -d /opt/mfsmaster

5.2 从MetaLogger中恢复Master

找回metadata.mfs.back 文件,可以从备份中找,也可以中metalogger 主机中找(如果启动了metalogger 服务),然后把metadata.mfs.back 放入data 目录,一般为{prefix}/var/mfs

从在master 宕掉之前的任何运行metalogger 服务的服务器上拷贝最后metadata 文件,然后放入mfsmaster 的数据目录。

利用mfsmetarestore 命令合并元数据changelogs,可以用自动恢复模式mfsmetarestore –a,也可以利用非自动化恢复模式:

mfsmetarestore -m metadata.mfs.back -o metadata.mfs changelog_ml.*.mfs

或者强制使用metadata.mfs.back创建metadata.mfs,可以启动master,但丢失的数据暂无法确定。

mfs java_mFS文件系统 - java学者 - OSCHINA - 中文开源技术交流社区相关推荐

  1. leveldb java实例_EZDB首页、文档和下载 - LevelDB 的 Java 封装 - OSCHINA - 中文开源技术交流社区...

    EZDB 为 LevelDB 提供一个很好的 Java 封装. 功能包括:Key/value 查询 Hash/range 查询 (类似 Amazon 的 DynamoDB) 可插入式的序列化 可插入式 ...

  2. java io流拒绝访问_JAVA IO流 - 张宏良的个人空间 - OSCHINA - 中文开源技术交流社区...

    IO流 一.File类的使用 java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关 File能新建.删除.重命名文件和目录,但File不能访问文件内容本身.如果需要访问文件内容本身 ...

  3. java同一包protect_Java基础知识 - 欢迎来到夜故事,一个人的故事 - OSCHINA - 中文开源技术交流社区...

    1.public.protect.private以及不声明私有性之间区别? 私有性 当前类 同一包下 子孙类 其他类 public √ √ √ √ protect √ √ √ × friendly √ ...

  4. 每天学习java一小时_java再学感受 - 编程一小时的个人空间 - OSCHINA - 中文开源技术交流社区...

    首先的是,我买了一本新的有关于java的书,刚开始看,其实在此之前我已经学了一本java语法的书本,现在我买的这本书是我用来提升自己的java认知水平的,首先是对这本书的第一印象吧,里面的内容比较详细 ...

  5. java实现gdal栅格矢量化_gdal栅格矢量化 - osc_lfs4vsih的个人空间 - OSCHINA - 中文开源技术交流社区...

    #include "gdal_alg.h" 栅格矢量化功能用于将栅格数据生成矢量数据,通常用于分类图像.GDAL库中使用函数GDALPolygonize()或者函数GDALFPol ...

  6. weka+em算法+java使用_WEKA学习笔记2 - lyle_5的个人页面 - OSCHINA - 中文开源技术交流社区...

    昨天老大布置任务后,我浏览了WEKA的Home Page,文档和WIKI等,当时想慢慢踏实的整理资料和文档,于是边看边翻译WekaManual.pdf,今天中午老大来检查任务时,表示我进度太慢,他需要 ...

  7. java 羽化_JAVA10来了 - 羽化布凉的个人空间 - OSCHINA - 中文开源技术交流社区

    Java 9才发布几个月,很多玩意都没整明白,现在Java 10又要来了. 这时候我真想说:线上用的JDK 7,甚至JDK 6,而JDK 8 还没用熟,JDK 9 才发布不久不知道啥玩意,JDK 10 ...

  8. java SNS网络系统_JEESNS首页、文档和下载 - Java 开源 SNS 社区系统 - OSCHINA - 中文开源技术交流社区...

    温馨提示:该项目已开放源码,未经购买授权,任何组织和个人都不得用于商业用途,并且不得修改代码和去除底部的版权信息. JEESNS 开发语言:JAVA 数据库:MYSQL 开发框架:Spring MVC ...

  9. java 原子量_Java原子量 - Rickxue的个人空间 - OSCHINA - 中文开源技术交流社区

    所谓的原子量即操作变量的操作是"原子的",该操作不可再分,因此是线程安全的. 为何要使用原子变量呢,原因是多个线程对单个变量操作也会引起一些问题.在Java5之前,可以通过vola ...

  10. java 嵌套类 继承_Java嵌套类 - 爱吃苹果的搬运工的个人空间 - OSCHINA - 中文开源技术交流社区...

    在Java中可以创建几种不同类型的嵌套类: 静态嵌套类: 静态内部类可以独立于外部类被实例化,无法访问外部类中的非静态属性和方法,只能外部类的实例来访问外部类的非静态变量 public class O ...

最新文章

  1. python flask表单语法_Flask框架如何使用表单
  2. 双向口和准双向口操作的不同!
  3. 在vs2010或者vs2008中配置PC-lint9.0版
  4. Hibernate之Session解析
  5. 转json_Java对象转JSON时如何动态的增删改查属性
  6. linux下源码安装nginx
  7. Spring Boot——@ConfigurationProperties与@Value的区别
  8. ubantu Wine QQ
  9. python 1+2+3+4+5+6+7+8+9累加求和_求1!+2!+3!+4!+5!+6!+7!+8!+9!+10!+...+N! N阶阶乘求和算法 JAVA C Python...
  10. 十步教你如何接手别人的代码!
  11. python怎么导入模块-Python中如何引入第三方模块
  12. matlab对图像处理差分,MATLAB图像处理实例详解
  13. MapReduce作业提交流程
  14. 提高新股中签率的技巧|新股中签技巧
  15. Unity鼠标拖拽旋转拉远拉近场景
  16. Linux红帽8.2系统中引导过程及引导修复
  17. QQ邮箱授权码和二代密保
  18. Python笔记_07_列表的相关操作_列表相关函数_深浅拷贝_字典相关函数_集合相关函数_冰冻集合
  19. 下载各省疫情历史数据
  20. 【电脑系统】制作U盘启动盘(适用win)

热门文章

  1. 阿里云存储OSS之九大使用技巧
  2. The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals
  3. [Life] search torrent engineer
  4. Python编程:根据经纬度生成并调用地图
  5. 南京信息工程大学计算机考研怎么样,南京信息工程大学就业怎么样,考研好不好?...
  6. win10备份(win10备份的系统怎么还原)
  7. 转神经网络压缩提升方法
  8. IceWarp邮件监控功能
  9. SQL Server中关于跟踪(Trace)那点事
  10. 海丽宾雅水疗服务App技术支持