一.MFS概述
MooseFS是一个分布式存储的框架,其具有如下特性:
(1)通用文件系统,不需要修改上层应用就可以使用(那些需要专门api的dfs很麻烦!)。
(2)可以在线扩容,体系架构可伸缩性极强。(官方的case可以扩到70台了!)
(3)部署简单。
(4)高可用,可设置任意的文件冗余程度(提供比raid1+0更高的冗余级别,而绝对不会影响读或者写的性能,只会加速!)
(5)可回收在指定时间内删除的文件(“回收站”提供的是系统级别的服务,不怕误操作了,提供类似oralce 的闪回等高级dbms的即时回滚特性!)
(6)提供netapp,emc,ibm等商业存储的snapshot特性。(可以对整个文件甚至在正在写入的文件创建文件的快照)
(7)google filesystem的一个c实现。
(8)提供web gui监控接口。
# 读写原理
1.MFS的读数据过程
(1) client当需要一个数据时,首先向master server发起查询请求;
(2)管理服务器检索自己的数据,获取到数据所在的可用数据服务器位置ip|port|chunkid;
(3)管理服务器将数据服务器的地址发送给客户端;
(4)客户端向具体的数据服务器发起数据获取请求;
(5)数据服务器将数据发送给客户端;
2.MFS的写数据过程
(1)当客户端有数据写需求时,首先向管理服务器提供文件元数据信息请求存储地址(元数据信息如:文件名|大小|份数等);
(2)管理服务器根据写文件的元数据信息,到数据服务器创建新的数据块;
(3)数据服务器返回创建成功的消息;
(4)管理服务器将数据服务器的地址返回给客户端(chunkIP|port|chunkid);
(5)客户端向数据服务器写数据;
(6)数据服务器返回给客户端写成功的消息;
(7)客户端将此次写完成结束信号和一些信息发送到管理服务器来更新文件的长度和最后修改时间
环境:rhel7.3
base2 | 172.25.78.12 | mfsmaster节点 |
---|---|---|
bzse3 | 172.25.78.13 | chunkserver |
base4 | 172.25.78.14 | chunkserver |
base5 | 172.25.78.15 | 高可用 |
foundation78 | 172.25.78.254 | 客户端 |
9421 # 对外的连接端口
9420 # 用于chunkserver 连接的端口地址
9419 # metalogger 监听的端口地址
这个软件可以记录元数据日志,定期同步master数据日志,防止master挂掉
MFS元数据日志服务器(moosefs-metalogger-3.0.97-1.rhsysv.x86_64.rpm)
元数据日志守护进程是在安装master server 时一同安装的,
最小的要求并不比master 本身大,可以被运行在任何机器上(例如任一台
chunkserver),但是最好是放置在MooseFS master 的备份机上,备份master
服务器的变化日志文件,文件类型为changelog_ml.*.mfs。因为主要的master server 一旦失效,
可能就会将这台metalogger 机器取代而作为master server
二.MFS的安装、部署、配置
1.安装部署mfs
- mfsmaster端
[root@base2 ~]# ls
moosefs-cgi-3.0.103-1.rhsystemd.x86_64.rpm
moosefs-cgiserv-3.0.103-1.rhsystemd.x86_64.rpm
moosefs-cli-3.0.103-1.rhsystemd.x86_64.rpm
moosefs-master-3.0.103-1.rhsystemd.x86_64.rpm
[root@base2 ~]# yim install -y *.rpm
[root@base2 ~]# vim /etc/hosts # 写解析,不然启动不起来
172.25.78.12 base2 mfsmaster
[root@base2 ~]# systemctl start moosefs-master
[root@base2 ~]# netstat -antlp
[root@base2 ~]# ll /var/lib/mfs/ # 数据目录
[root@base2 ~]# ll /etc/mfs/ # 主配置文件目录
[root@base2 ~]# systemctl start moosefs-cgiserv # 打开web图形处理工具
- 配置chunkserver
[root@base3 ~]# yum install -y moosefs-chunkserver-3.0.103-1.rhsystemd.x86_64.rpm
[root@base3 ~]# vim /etc/hosts # 从节点也必须写解析
172.25.78.12 base2 mfsmaster
[root@base3 ~]# cd /etc/mfs/
[root@base3 mfs]# vim mfshdd.cfg # 定义base3中存储数据的挂载点
/mnt/chunk1
[root@base3 mfs]# mkdir /mnt/chunk1 # 创建挂载点
[root@base3 mfs]# chown mfs.mfs /mnt/chunk1 # 改该挂载目录的所有人和所有组,这样才可以在目录中进行读写操作
[root@base3 mfs]# systemctl start moosefs-chunkserver # 开启服务
[root@base4 ~]# yum install -y moosefs-chunkserver-3.0.103-1.rhsystemd.x86_64.rpm
[root@base4 ~]# vim /etc/hosts
172.25.78.12 base2 mfsmaster
[root@base4 ~]# cd /etc/mfs/
[root@base4 mfs]# vim mfshdd.cfg
[root@base4 mfs]# mkdir /mnt/chunk2
[root@base4 mfs]# chown mfs.mfs /mnt/chunk2
[root@base4 mfs]# systemctl start moosefs-chunkserver
- 浏览器访问,从节点添加成功
2.客户端测试分布式存储
- 配置客户端
[root@foundation78 3.0.103]# rpm -ivh moosefs-client-3.0.103-1.rhsystemd.x86_64.rpm # 安装客户端软件
[root@foundation78 mfs]# cd /etc/mfs/
[root@foundation78 mfs]# vim mfsmount.cfg # 确定挂载数据的目录
/mnt/mfs
[root@foundation78 mfs]# mkdir /mnt/mfs # 创建挂载数据的目录
[root@foundation78 mfs]# vim /etc/hosts # 编辑解析文件
172.25.78.12 base2 mfsmaster
[root@foundation78 mfs]# cd /mnt/mfs
[root@foundation78 mfs]# mfsmount # 自动读取后端文件进行挂载
[root@foundation78 mnt]# df
[root@foundation78 mfs]# mkdir dir1
[root@foundation78 mfs]# mkdir dir2
[root@foundation78 mfs]# ls
dir1 dir2
[root@foundation78 mfs]# mfsgetgoal dir1 # 默认的文件副本是2份
dir1: 2
[root@foundation78 mfs]# mfsgetgoal dir2
dir2: 2
[root@foundation78 mfs]# mfssetgoal -r 1 dir1 # 修改dir1的文件备份份数为1