• UID25
  • 登录2016-05-02
  • 粉丝8
  • 关注2
  • 发帖80
  • 主页
  • 金币1443枚
社区居民
原创写手
billy 发布于2015-12-07 18:43
0/731

分布式文件系统moosefs安装及配置

楼层直达
我的moosefs安装手记

在服务器较多,且服务器上硬盘剩余空间较大的情况下。为了更充分的利用资源,我们可以使用分布式的文件系统将这些空间整合起来。而在众多的分布的文件系统中,笔者经过反正的比较和尝试最终选择了moosefs(以下简称mfs).

为什么选择mfs而不是其它的什么系统呢?
    1. 安装简单方便(易用性)。这点是其它系统所不及的。你只需要像安装普通的服务那样安装mfs,不需要修改内核!
    2. 扩容方便(高可靠性)mfs群集启动以后,你可以很方便的向群集里添加或者删除服务器而不用停止服务,且不影响服务的正常运行!
    3. 管理方便(可操作性)。你可以很方便的动态调整集群运行参数,即时生效而不用重启服务!
 
现在来看一下mfs系统的组成部分吧:
    1.master master负责在整个系统中管理数据。是整个系统的维护者。但是它有个弱点就是master只有一个!也就是说如果master坏掉,整个系统将停止工作!不过这算不上致命弱点,因为我们做好数据备份以后,恢复master是很简单的事。
    2.chunkserver chunkservermfs系统中的数据存储者。真正的用户数据按照算法被分成chunk,并分发到各个chunkserver上。这样就保存了数据的安全性。
    3.client 。凡是使用mfs文件系统的机器都可以被称为clientclientmfs系统的使用者。当clientmfs文件系统挂载到本机以后,它可以像使用一个普通的磁盘分区一样,来使用mfs.
 
 
安装fuse
    我们首先 安装fuse。为什么要安装fuse呢?因为mfs的客户端是基于fuse写的,编译客户端工具的时候要用到它。所以,如果你打算在这台机器使用mfs的客户端。你必须先安装fuse。另外,笔者在安装mfs的时候,fuse的最新版本为2.8,但是用了最新的版本以后modprobe fuse的时候提示找不到。最后用了2.7的版本才没问题,使用过程中也很正常。所以我们还是基于2.7
    1. 下载
http://jaist.dl.sourceforge.net/project/fuse/fuse-2.X/ 2.7.4 /fuse-2.7.4.tar.gz
2. 解压
tar zxvf fuse- 2.7.4 .tar.gz
3. 编译安装
cd fuse
./configure --prefix=/usr&&make &&make install
解释一下: prefix指定目录,我们安装到/usr下,这样fuse的库文件就自动安装到了/usr/lib,免去了我们手工指定链接库的麻烦。
 
 
安装mfs系统
mfs 系统的软件包,总共才300k,对于一个用来完成分布式文件系统的软件来说只能用短小精悍来形容。
1. 下载
2. 解包
tar zxvf mfs- 1.5.12 .tar.gz
3. 创建用户mfs,默认使用的用户是nobody,同时也不建议使用root用户来运行mfs系统,所以我们添加一个普通用户。
useradd mfs -M -s /sbin/nologin
4. 编译安装
cd mfs- 1.5.12
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --enable-mfsmount&&make&&make install
    解释一下:prefix指定安装的目录;接下来指定的是运行mfs的用户和组;--enable-mfsmount是强制编译mfs的客户端工具mfsmount;用这样的编译参数编出来的mfs系统,master,chunkserver,client三个工具都包含了。笔者个人比较偏好这种方式。当然如果你的服务器分工很明确,master只编译master的包,chunkserver只编译chunkserver的包也可以:
--disabe-mfsmater 这样就禁用了master;
--disable-mfschunkserver 就禁用了chunkserver;
--disable-mfsmount 这样就强制禁用了mfsmount,默认情况下是检测到已经安装fuse才自动安装mfsmount
 
 
配置mfs系统
    mfs 系统配置起来特别简单,下面就由我来向您展示一下mfs的神奇魅力。先简单说一下mfs的目录结构。如果您也和我使用一样的编译参数。那么进入/usr/local/mfs你会发现bin,etc,sbin,share,var几个简洁的目录。
bin:mfs 客户端工具的目录
sbin:mfs 服务端工具目录
etc:mfs 配置文件所在的目录包括masterchunkserver
share: 这个就不用说了,帮助文件目录
var: 数据文件目录。
    嘿嘿,目录给人的感觉就是清析明了。一会儿再配置一下,你就会感觉配置也是so easy。在开始配置以前咱们说下实验环境,省得我们言之无物:
master:192.168.1.247
chunkserver1:192.168.1.248
chunkserver2:192.168.1.249
client: 三台机器哪个都可以了 J
mfs 并不严格要求你说masterchunkserver以及client不能跑在同一台器,而实际情况笔者也确实这样试过没啥问题。但是考虑的系统的安全稳定还是建议master单独跑一台,并做好备份,chunkserverclient就可以看具体需求了。
 
master 配置
    用到的文件etc下的mfsmaster.cfg,用到的工具sbin下的mfsmaster。先来看mfsmaster.cfg
# WORKING_USER = mfs
# WORKING_GROUP = mfs
 
# LOCK_FILE = /var/run/mfs/mfsmaster.pid
# DATA_PATH = /usr/local/mfs/var/mfs
# SYSLOG_IDENT = mfsmaster
 
# BACK_LOGS = 50
 
# REPLICATIONS_DELAY_INIT = 300
# REPLICATIONS_DELAY_DISCONNECT = 3600
 
# MATOCS_LISTEN_HOST = *
# MATOCS_LISTEN_PORT = 9420
 
# MATOCU_LISTEN_HOST = *
# MATOCU_LISTEN_PORT = 9421
 
# CHUNKS_LOOP_TIME = 300
# CHUNKS_DEL_LIMIT = 100
# CHUNKS_REP_LIMIT = 15
选项似乎挺多,其实我们第一次可以只关注一句
# MATOCS_LISTEN_HOST = * 改成MATOCS_LISTEN_HOST = 192.168.1.247
去掉#,*换成masterip,就这么简单,保存,退出就可以了。
这里顺便说一下mfs的配置文件,虽然默认都加着#也就是说不起作用,但是未编辑过的配置文件里记录的参数,也是系统未配置时运行的默认参数,这点注意。
    启动master
[root@lvs etc]#/usr/loca/mfs/sbin/ mfsmaster
就可以了。可以去系统日志看下master的运行情况。
停止master的指令
[root@lvs etc]#/usr/loca/mfs/sbin/ mfsmaster -s
小技巧:如果觉得每次都输这么长的命令麻烦的话,可以把它加入到path:
export PATH=/usr/local/mfs/sbin:/usr/local/mfs/sbin:$PATH
    以后再控制master直接用mfsmaster或者mfsmaster -s是不是很方便?
 
chunkserver 配置
    用到的文件etc下的mfschunkserver.cfgmfshdd.cfg,用到的工具sbin下的mfschunkserver。先来看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 = mfsmaster
# MASTER_PORT = 9420
 
# 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
    嘿嘿,选项比mfsmaster.cfg不少,不过不怕,我们只关心下面一行。
# MASTER_HOST = mfsmaster 改成MASTER_HOST = 192.168.1.247
    再来看mfshdd.cfg。顾名思义就是mfs的硬盘配置。
/mnt/hd1
/mnt/hd2
/mnt/hd3
/mnt/hd4
    把这四行都删除了吧,因为在我们机器上不存在。这里我只写了一行/data,这个分区在我机器上是一块单独的硬盘,专门用来存放数据的。记得重新定义一下/data的权限哟,要不mfs操作不了。
    [root@lvs etc]#chown -R mfs.mfs /data
    启动chunkserver
    [root@lvs etc]#chunkserver
    停止chunkserver
[root@lvs etc]#chunkserver -s
你可以去系统日志看,chunkserver是不是正常起动。(同样的方法配置第二台机器)
OK, 这样的话,我们就成功启动了一个由一个master和两个chunkserver组成的分布式系统。为了达到这个系统的开机启动我们可以把下面这两条加到/etc/rc.local(根据实际情况添哟)
/usr/local/mfs/sbin/mfsmaster
/usr/local/mfs/sbin/mfschunkserver
 
client 配置
    嘿嘿,客户端严格来说,已经算不上配置了,充其量也就是一个应用。客户端可以是任意一台需要使用分布式系统,并且安装了mfsmount的服务器。对于客户端来说mfs只是挂载方式不一样,挂载完了和普通的硬盘分区没啥区别。到底怎么挂载呢?
    用到的命令mfsmount,这个工具位于bin目录下。
[root@web2 etc]# mkdir /mnt/mfs
[root@web2 etc]# /usr/local/mfs/bin/mfsmount -h 192.168.1.247
[root@web2 etc]# mount
/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/dev/sdb1 on /data type ext3 (rw)
MFS on /mnt/mfs type fuse (rw,allow_other,default_permissions)
mfsmount 这个命令常用的参数就两个:
-h 指定服务器。
-w 指定本地挂载目录。默认用/mnt/mfs
 
 
以后就可以对/mnt/mfs这个目录进行正常的读写了,你所写入的任何东东都会分布到其它的机器上,以保证数据的安全性。在/usr/local/mfs/bin目录还有一些其它的工具,帮你了解mfs运行情况,并设定mfs,有时间一定要好好看看哟~

本文出自:rainbird


0人打赏
您需要登录后才可以回帖
发表回复
极贡献
技术问答
专题荟萃
程序人生
视觉设计
Android开发
iOS开发
编程语言
前端开发
后端开发
服务器架构
软件测试
运维方案
创业路上



最热文章墙

  • 60412/343   【精品推荐】200多种Android动画效果的强悍框架,太全了,不看这个,再有动画的问题,不理你了^@^

  • 33622/188   情人节福利,程序员表白的正确姿势:改几行代码就变成自己的表白了

  • 32039/141   省时省力的Android组件群来了,非常棒的原型参考

  • 29311/226   【精品推荐】Android版产品级的音乐播放器源码,功能太强大了,最好的产品原型有木有?

  • 26282/2   超全!整理常用的iOS第三方资源

  • 26140/0   Python爬虫:常用浏览器的useragent

  • 24819/70   原创表白APP,以程序员的姿势备战新年后的7夕,持续完善中!

  • 23128/138   2016抢红包软件及源码

  • 20031/29   麻省理工的一帮疯子,真的实现了随意操控万物!(绝对黑科技)

  • 19868/25   Android工程师面试题大全

  • 19292/27   2016程序员跳槽全攻略

  • 19077/9   GitHub上排名前50的iOS项目:总有一款你用得着

  • 18567/20   码魂:程序员的牛B漫画

  • 16996/149   Android版类似UC浏览器:非常赞,产品级的源码

  • 16916/3   吐槽那些程序员的搞笑牛逼注释

  • 15745/1   iOS 动画总结

  • 15468/10   2016年最全的Android面试考题+答案 精编版

  • 15321/41   一个绚丽的loading动效分析与实现!

  • 14892/73   【持续更新中】Android福利贴(二):资料源码大放送

  • 14851/83   Android小而全的博客源码:非常适合全面掌握开发技巧

  • 14721/10   女程序员的梦,众网友的神回复

  • 14602/44   惊艳的App引导页:背景图片切换加各个页面动画效果

  • 14513/11   年会上现场review代码是怎么样的体验!

  • 14282/23   个人收集的Android 各类功能源代码

  • 14164/5   新一代Android渠道打包工具:1000个渠道包只需要5秒

  • 13346/19   珍藏多年的素材,灵感搜寻网站

  • 13315/53   基于瀑布流的美女图片浏览App,有注释的源代码

  • 12957/17   用JavaScript 来开发iOS和Android 原生应用:React Native开源框架中文版来啦

  • 12848/74   仿京东商城客户端Android最新版,不错的原型和学习资料

  • 12810/15   基于Android支付宝支付设计和开发方案

  • 12587/20   Android福利第三波【Android电子书】

  • 12387/17   什么是真正的黑客:收获12200+Stars,人气远超微软开源VS

  • 12301/94   Android带弹幕的视频播放器源码,来自大名鼎鼎的Bilibili弹幕网站

  • 12246/18   65条最常用正则表达式,你要的都在这里了

  • 12127/70   【精品推荐】类似360安全卫士安Android源码:非常赞的产品原型

  • 11780/7   用程序员的姿势抢过年的火车票

  • 11729/0   iOS中文版资源库,非常全

  • 11716/7   一张图搞定iOS学习路线,非常全面

  • 11693/11   有木有这样一张酷图帮你集齐所有git命令超实用

  • 11210/10   成为Java顶尖程序员 ,看这11本书就够了

  • 10973/18   一张图搞定Android学习路线,非常全面

  • 10883/10   微信支付终于成功了(安卓,iOS),在此分享

  • 10580/44   在线音乐播放器完整版(商用级的源码):非常赞,可听免费高品质专辑

  • 10525/3   基于Node.js的强大爬虫,能直接发布抓取的文章哦

  • 10430/29   【持续更新中】Android福利贴(一):资料源码

  • 10407/0   GitHub iOS 库和框架Top100 

  • 9984/4   46 个非常有用的 PHP 代码片段

  • 9741/3   即时通信第三方库

  • 9712/61   【技巧一】搭配Android Studio,如何实现App远程真机debug?

  • 9545/9   烧了5亿美金,这家神秘的公司即将颠覆人类未来!

  • 9508/8   流媒体视频直播方案

  • 9389/9   B站建开源工作组:APP想支持炫酷弹幕的看过来

  • 9251/18   八个最优秀的Android Studio插件

  • 9197/2   【精品推荐】高质量PHP代码的50个实用技巧:非常值得收藏

  • 9113/9   中国黑客的隐秘江湖:攻守对立,顶尖高手月入千万美元

  • 8682/6   开箱即用!Android四款系统架构工具

  • 8567/3   一张图看清Linux 内核运行原理

  • 8468/10   十大技巧快速提升Android应用开发性能

  • 8448/3   10款GitHub上最火爆的国产开源项目——可以媲美西半球

  • 8136/1   Android性能优化视频,文档以及工具

  • 返回顶部