设为首页 收藏本站
查看: 2543|回复: 0

[经验分享] MFS分布式文件系统

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-11-21 11:24:07 | 显示全部楼层 |阅读模式
                第十一章  MFS分布式文件系统
前言:几台Web服务器通过NFS共享一个存储,在业务功能上满足需求,但在性能与容量上NFS无法胜任更高的要求。MFS即moosefs,可以提供容量FB级别的共享存储,无需昂贵的专业硬件服务器,自身拥有冗余功能及动态扩容功能,保证数据的安全性。本章将介绍MFS分布式文件系统的原理及环境搭建。
一、 工作原理
1、分布式原理
分布式文件系统就是把一些分散在多台计算机上的共享文件夹,集合到一个共享文件夹内,用户要访问这些文件夹的时候,只要打开一个文件夹,就可以的看到所有链接到此文件夹内的共享文件夹。
2、MFS原理
MFS是一个具有容错性的网络分布式文件系统,它把数据分散存放在多个物理服务器上,而呈现给用户的则是一个统一的资源。
1) MFS的组成
元数据服务器(Master):在整个体系中负责管理文件系统,维护元数据,目前不支持高可用。
元数据日志服务器(MetaLogger):备份Master服务器的变化日志文件,当master服务器损坏,可以从日志服务器中取得文件恢复。
数据存储服务器(Chunk Server):真正存储数据的服务器,服务器越多,容量就越大,可靠性越高,性能越好。
客户端(Client): 可以像挂载NFS一样 挂载MFS文件系统
QQ截图20161121112246.png
2)MFS读数据的处理过程
客户端向元数据服务器发出读请求
元数据服务器把所需数据存放的位置(Chunk Server的IP地址和Chunk编号)告知客户端
客户端向已知的Chunk Server请求发送数据
Chunk Server向客户端发送数据
3)写入的过程
客户端向元数据服务器发送写入请求
元数据服务器与Chunk Server进行交互,但元数据服务器只在某些服务器创建新的分块Chunks,创建成功后由ChunkServers告知元数据服务器操作成功
元数据服务器告知客户端,可以在哪个Chunk Server的哪些Chunks写入数据
客户端向指定的Chunk Server写入数据
该Chunk Server与其他Chunk Server进行数据同步,同步成功后Chunk Server告知客户端数据写入成功
客户端告知元数据服务器本次写入完毕
二、 实验环境
QQ截图20161121112258.png
三、 实验步骤
1、 搭建master server
源码包的位置:
http://sourceforge.net/projects/moosefs/files/moosefs/1.6.27/mfs-1.6.27
1)安装支持包
wKioL1gxqQLis-Y_AAAjyY4bCTc872.jpg
2) 创建用户
wKiom1gxqRiwcsO9AAAltuWifXg513.jpg
3) 安装源码包
wKioL1gxqULy-vKcAAA935STf4c873.jpg
--prefix=/usr/local/mfs                     //指定安装目录
--with-default-user=mfs                   //指定程序运行用户
--with-default-group=mfs                //指定程序运行组
--disable-mfschunkserver               //禁用Chunk功能
--disable-mfsmount                         //禁用mfsmount功能
wKioL1gxqWagBjI4AAAls2V5W5E269.jpg
4)复制文件(设置配置文件)
wKioL1gxqabwqR9xAAAzXz-LCKQ042.jpg
[iyunv@centos1 mfs]# cp metadata.mfs.empty  metadata.mfs
此文件存放master的变化信息
5) 配置文件(下面的只是介绍一下,不用修改,默认就好)
需要用到两个配置文件:mfsmaster.cfg(主配置文件)和mfsexport.cfg(被挂载目录及访问权限)
mfsmaster.cfg常用的参数如下,默认全部都是不需要修改的,全文都是以#开头,也就是说都是默认配置
[iyunv@centos1 mfs]# cd /usr/local/mfs/etc/mfs/
[iyunv@centos1 mfs]# vim mfsmaster.cfg
WORKING_USER = mfs                                        //运行masterserver的用户
# WORKING_GROUP = mfs                                //运行masterserver的组
# SYSLOG_IDENT = mfsmaster                        //masterserver在syslog的标示,说明是由masterserver产生的
# LOCK_MEMORY = 0                //是否执行mlokall(),以避免mfsmaster进程溢出默认为0
# NICE_LEVEL = -19                //运行的优先级,进程必须由root启动
# EXPORTS_FILENAME = /usr/local/mfs/etc/mfs/mfsexports.cfg
//被挂载目录及其权限控制文件的存放位置
# TOPOLOGY_FILENAME = /usr/local/mfs/etc/mfs/mfstopology.cfg
# DATA_PATH = /usr/local/mfs/var/mfs                //数据存放路径
# BACK_LOGS = 50                //metadata改变的log文件数目(默认是50)
# BACK_META_KEEP_PREVIOUS = 1        
# REPLICATIONS_DELAY_INIT = 300  //延迟复制的时间(默认300)
# REPLICATIONS_DELAY_DISCONNECT = 3600  //Chunkserver断开复制延迟(默认是3600秒)
# MATOML_LISTEN_HOST = *        //metalogger监听的IP地址默认是所有地址
# MATOML_LISTEN_PORT = 9419        //metalogger监听的端口地址(默认为9419)
# MATOML_LOG_PRESERVE_SECONDS = 600  
# MATOCL_LISTEN_HOST = *                 //用于chunkserver连接的IP地址(默认为*代表所有IP)
# MATOCL_LISTEN_PORT = 9421        //用户客户端挂在的监听端口9421
# CHUNKS_LOOP_MAX_CPS = 100000
# CHUNKS_LOOP_MIN_TIME = 300                //chunks的回环频率(默认300)
# CHUNKS_SOFT_DEL_LIMIT = 10            
# CHUNKS_HARD_DEL_LIMIT = 25
# CHUNKS_WRITE_REP_LIMIT = 2         //在一个循环里复制到另外一个Chunkserver的最大Chunk数
# CHUNKS_READ_REP_LIMIT = 10        //在一个循环里从一个Chunkserver复制的的最大Chunk数
# ACCEPTABLE_DIFFERENCE = 0.1   
# SESSION_SUSTAIN_TIME = 86400
# REJECT_OLD_CLIENTS = 0                //弹出低于1.6.0的客户端挂接(0或1,默认是0)
# deprecated:
# CHUNKS_DEL_LIMIT - use CHUNKS_SOFT_DEL_LIMIT instead
# LOCK_FILE - lock system has been changed, and this option is used onl
y to search for old lockfile

mfsexport.cfg文件参数格式如下
# Allow everything but "meta".
*          /       rw,alldirs,maproot=0
# Allow "meta".
*                       .       rw                          
该文件,每一个条目分为三个部分
        第一部分:客户端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段
目录部分的标示如下
        /标示MFS根
        .表示MFSMETA文件系统
权限部分如下所示
        ro——只读模式共享
        rw——读写模式共享
        alldirs——允许挂载任何指定的子目录
        maproot——映射为root,还是普通用户
        password——指定客户端的密码
        以上就是对mfsmaster.cfg和mfsexport文件的解释,默认就是最好的,不需要做任任何修改。
6) 启动master server
wKioL1gxqp2DWNJLAABKddRCw74944.jpg
7) 查看是否启动
wKiom1gxqrXRzUD3AAClHZhzhSo861.jpg
8)建立防火墙规则
[iyunv@centos1 mfs]# iptables -I INPUT -p tcp --dport 9419 -j ACCEPT
[iyunv@centos1 mfs]# iptables -I INPUT -p tcp --dport 9420 -j ACCEPT
[iyunv@centos1 mfs]# iptables -I INPUT -p tcp --dport 9421 -j ACCEPT
[iyunv@centos1 mfs]# service iptables save
2、 搭建metalogger server
1)安装mfs(同上)
wKioL1gxqu2jbTAuAAAl03lsBEc566.jpg
wKiom1gxq0PTm7k0AAAjIHUzkMU492.jpg
wKiom1gxq1vzNHb4AAA_CnTVcV4325.jpg
2) 复制文件
wKioL1gxq3CBS_hUAAAr7deUQTk465.jpg

3)修改配置文件,添加master服务器的ip地址(注意去掉注释和空格)
wKioL1gxq6GSNLI6AADZTZlxOVE217.jpg
4) 开启服务
wKiom1gxq7igcb7FAAA8w1NVw0s549.jpg
5)查看端口

[iyunv@centos1 mfs]# netstat -anpt | grep 9419
tcp        0      0 192.168.1.2:50929           192.168.1.1:9419            ESTABLISHED 53533/mfsmetalogger
[iyunv@centos1 mfs]# iptables -I INPUT -p tcp --dport 9419 -j ACCEPT
[iyunv@centos1 mfs]# service iptables save

3、 搭建chunk server(二台chunk的搭建步骤相同)
1) 安装mfs(同上)
wKioL1gxq-eyvVRYAAAk5PFAZ-g032.jpg
wKiom1gxq_ywhYEZAAAtdeWSrS8110.jpg
wKiom1gxrCOzboYfAAAk2UzixpM507.jpg
2) 复制文件
wKioL1gxrFTDck9AAAAtHwAPPW8220.jpg
3) 修改配置文件(一共2个)
vim mfschunkserver.cfg
wKiom1gxrHTyova8AAC15d2hVo8579.jpg
vim mfshdd.cfg(添加/data)
wKioL1gxrH_DqOSOAACT02rC99Y031.jpg
4) 建立文件夹并开启服务
wKiom1gxrJST0ZMgAAD0TKy5KiM713.jpg
5) 开启例外端口
[iyunv@centos5 mfs]# ps -ef | grep mfs        //检查是否启动
mfs       56269      1  0 20:54 ?        00:00:00 /usr/local/mfs/sbin/mfschunkserver start
root      56297  48740  0 20:54 pts/0    00:00:00 grep mfs
[iyunv@centos5 mfs]# iptables -I INPUT -p tcp --dport 9422 -j ACCEPT
[iyunv@centos5 mfs]# service iptables save
注意:第二台chunk的配置和上面的配置完全一样,这里就不在赘述了
4、 客户端配置
1) 安装fuseMFS(客户端依赖于FUSE)
wKioL1gxr1vyIgJ7AAAafBP9gaw231.jpg
wKiom1gxr2riBkQ9AAArWbMt0kQ608.jpg
2) 设置环境变量
wKiom1gxr4mTw417AAAWs_TqdXk542.jpg
添加下面这行
export  PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
wKiom1gxr6jCnObNAACgmQ-KB8A454.jpg
wKioL1gxr8PCR4WLAAAX6EH6gmY207.jpg
3) 安装MFS客户端
wKiom1gxsEGyLAobAAAYMXrGunY631.jpg
wKioL1gxsFOj9Jd4AAAiRL_QvpA272.jpg
wKiom1gxsGLwMKgXAAAaX1QA7jo185.jpg

4) 挂载文件系统
创建挂载点并加载到内核
wKioL1gxsHTjyjjHAAAgBeYKa88500.jpg
wKiom1gxsKvxZRsLAAAsfEf3d-Q191.jpg
5)设置文件被复制的份数并测试
MFS客户端安装完毕后,会生成/usr/local/mfs/bin/目录,在这个目录下有很多命令是用户所需的。
mfsgetgoal命令用来查看文件被复制的分数,利用-r命令可以对整个目录进行递归,goal是指文件比复制的分数。
命令mfssetgoal用来设置文件被复制的分数,生产环境下Chunk server节点数量应大于2,文件副本数小于Chunkserver服务器的数量。
由于我有二台Chunk server 我将副本数量设置为1
在vim  /etc/profile文件中增加一行(为了方便执行命令)
wKioL1gxsMyQwdLGAAC-ossdOHM856.jpg
然后source /etc/profile

设置查询文件被复制的份数:
wKioL1gxsTfD6ECoAAAeO_VVGKg333.jpg
wKiom1gxsUqgbyWrAAAjEvjbdik169.jpg
在/mnt/mfs中建立文件
wKiom1gxsWCQPNXtAAAgMx_pImk166.jpg
分别打开两台chunk查看/data下,都产生了加密的数据,说明成功了
QQ截图20161121112312.png
QQ截图20161121112317.png
5、Mfscgiserv是用Python编写的一个web服务器,其监听端口为9425,可以在master上通过命令
/usr/local/mfs/sbin/mfscgiserv来启动用户利用浏览器就可以全面掌握所有客户连接,Chunk server、
master以及客户端操作。

QQ截图20161121112323.png
6、 灾难恢复
MFS维护及灾难恢复
1)MFS集群的启动与停止
MFS集群的启动顺序如下
(1)启动mfsmaster进程
(2)启动所有的mfsChunkserver进程
(3)启动mfsmetalogger进程
(4)在所有客户端上挂载NFS文件系统
MFS集群的停止顺序如下
(1)在所有客户端卸载MFS挂载
(2)停止Chunkserver进程
(3)停止mfsmetalogger进程
(4)停止mfsmaster进程
2)MFS灾难恢复
整个MFS体系中,直接断电只有master server进程有可能无法启动,可以在master上使用命令
/usr/local/mfs/sbin/mfsmetarestore-a修复
启动失败:
[iyunv@centos1 ~]# /usr/local/mfs/sbin/mfsmaster start
init: file system manager failed !!!
error occured during initialization - exiting
修复:
[iyunv@centos1 ~]# /usr/local/mfs/sbin/mfsmetarestore -a
loading objects (files,directories,etc.) ... ok
loading names ... ok
loading deletion timestamps ... ok
loading chunks data ... ok
checking filesystem consistency ... ok
connecting files and chunks ... ok
progress: current change: 0 (first:0 - last:0 - 100% - ETA:finished)
store metadata into file: /usr/local/mfs/var/mfs/metadata.mfs
启动成功
[iyunv@centos1 ~]# /usr/local/mfs/sbin/mfsmaster  start
3) 从MetaLogger中恢复
我们将master server 直接断电(必须运行的时间够20分钟才可以断电,否则数据很有可能直接丢失)
补充说明:MFS元数据通常有两部分的数据,分别如下
(1)主要元数据文件metadata.mfs,当mfsmaster运行时会被命名为metadata.back.mfs。
(2)元数据改变日志 changelog.*.mfs,存储了过去N小时的文件变更。
在Master 发生故障时,可以从MetaLogger中恢复,步骤如下
(1)安装一台mfsmaster,利用同样的配置来配置这台mfsmaster,mfsmaster进程先不要启动
(2)将metalogger上/usr/local/mfs/var/mfs/目录下所有文件复制到mfsmaster相应的目录中。
[iyunv@centos3 mfs]# scp root@192.168.1.1:/usr/local/mfs/var/mfs/* /usr/local/mfs/var/mfs/
利用mfsmetarestore命令合并元数据changelogs
[iyunv@centos3 mfs]# /usr/local/mfs/sbin/mfsmetarestore  -m metadata_ml.mfs.back -o metadata.mfs changelog_ml.*.mfs
loading objects (files,directories,etc.) ... ok
loading names ... ok
loading deletion timestamps ... ok
loading chunks data ... ok
checking filesystem consistency ... ok
connecting files and chunks ... ok
changelog_ml.0.mfs:1: version mismatch
[iyunv@centos3 mfs]# /usr/local/mfs/sbin/mfsmaster  start
[iyunv@centos3 mfs]# ls
Ceshi
注意:如果是全新安装的master,恢复数据后,需要更改metalogger和chunkserver,
配置MASTER_HOST的ip地址,客户端也需要重新挂载mfs目录。
谢谢观看,真心的希望能帮到您!


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-303424-1-1.html 上篇帖子: MFS分布式文件系统 下篇帖子: mfs故障迁移
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表