欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MooseFS文件系统

程序员文章站 2022-04-03 22:41:17
...

官网地址:https://moosefs.com/

MooseFS是一个具备冗余容错功能的分布式网络文件系统,它将数据分别存放在多个物理服务器单独磁盘或分区上,确保一份数据有多个备份副本。对于访问的客户端或者用户来说,整个分布式网络文件系统集群看起来就像一个资源一样。

实际上相当于局域网内的RAID1。

独有特性:
【1】高可靠性
每一份数据可以设置多个副本(多份数据),并可以存储在不同的主机上。
【2】高可扩展性
可以很轻松的通过增加主机磁盘容量或增加主机数量来动态扩展整个文件系统的存储量.
【3】高可容错性
通过对mfs进行系统设置,实现当数据文件被删除后的一段时间内,依然存放于主机的回收站中,以备误删恢复数据。
【4】高数据一致性
即便文件被写入/访问时,依然可以完成对文件的一致性快照。
优点:
【1】MFS是基于GPL发布的,完全免费,并且开发和社区都很活跃,资料也非常丰富;
【2】轻量、易部署、易配置、易维护;
【3】通用文件系统,不需要修改上层应用就可以使用;
【4】扩容成本低、支持在线扩容,不影响业务,体系架构可伸缩性极强;
【5】体系架构高可用,所有组件无单点故障;
【6】文件对象高可用,可设置任意的文件冗余程度(提供比Raid10更高的冗余级别);
【7】提供系统负载,将数据读写分配到所有的服务器上,加速读写性能;
【8】提供诸多高级特性,比如类似Windows的回收站功能;
【9】MooseFS是Google Filesystem的一个c实现;
【10】自带Web Gui的监控接口;
【11】提高随机读或写效率和海量小文件的读写效率。

MooseFS文件系统
MFS的组件:
【1】Master:(元数据服务器)
负责各数据存储服务器的管理,文件读写调度,文件空间回收以及恢复,多节点拷贝。
【2】Metalogger:(元数据日志服务器)
负责备份Master服务器的changelog。文件类型为 changelog.*.mfs ,以便在Master出问题时接替其工作.
【3】Chunk:(数据存储服务器)
负责连接Master,听从Master调度,提供存储空间,并为客户端提供数据传输.
【4】Client:(客户端挂载)
通过FUSE内核接口挂载远程管理服务器(master)上所管理的数据存储服务器,使用起来和本地文件系统一样。

MooseFS文件系统
【1】首先client客户端访问主服务器master,获取文件实体的位置等相关信息;
【2】主服务器master查询缓存记录,把文件实体的位置等相关信息发给client客户端;
【3】Client客户端根据拿到的信息去访问对应的存储实体数据的服务器(data servers或者 chunk servers);
【4】存储实体数据的服务器(data servers或者 chunk servers)把对应的数据返回给Client客户端。

MooseFS文件系统【1】Client客户端访问主服务器master,请求写入数据;
【2】主服务器master查询缓存记录,如果是新文件,则会联系后面的数据服务器创建对应的chunk对象准备存放文件;
【3】数据服务器返回创建对应的chunk对象成功给主服务器;
【4】主服务器master把文件实体的位置等相关信息发给client客户端;
【5】Client客户端访问对应的数据服务器写数据;
【6】数据服务器之间进行数据同步,互相确认成功;
【7】数据服务器返回成功写入信息给Client客户端;
【8】Client客户端回报给主服务器master写入结束。

部署:

172.16.12.70 mfs-master
172.16.12.71 chunk1
172.16.12.72 chunk2
172.16.12.73 chunk3
172.16.12.81 logger
172.16.12.2 client

首先写主机名和hosts文件,并且确认都能ping通畅。

[aaa@qq.commfs-master ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.12.70 mfs-master
172.16.12.71 chunk1
172.16.12.72 chunk2
172.16.12.73 chunk3
172.16.12.81 logger
172.16.12.2  client

1、添加用户,安装依赖工具软件
所有节点都要添加:

[aaa@qq.commfs-master ~]# useradd -s /sbin/nologin mfs
[aaa@qq.comchunk1 ~]# useradd -s /sbin/nologin mfs
[aaa@qq.comchunk2 ~]# useradd -s /sbin/nologin mfs
[aaa@qq.comchunk2 ~]# useradd -s /sbin/nologin mfs
[aaa@qq.comlogger ~]# useradd -s /sbin/nologin mfs
[aaa@qq.comclient ~]# useradd -s /sbin/nologin mfs

安装这几个软件
# yum install -y zlib-devel make gcc gcc-c++

2、配置master:官网下包,我用的包就比较旧
mfs-1.6.20-2.tar.gz

master是管理这些分布式系统的节点。

[aaa@qq.commfs-master ~]# tar xf mfs-1.6.20-2.tar.gz
[aaa@qq.commfs-master ~]# cd mfs-1.6.20-2/

[aaa@qq.commfs-master mfs-1.6.20-2]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount
	--disable-mfschunkserver	不安装成chunkserver
	--disable-mfsmount			不安装成client
	
[aaa@qq.commfs-master mfs-1.6.20-2]# make && make install

[aaa@qq.commfs-master mfs-1.6.20-2]# cd /usr/local/mfs/
[aaa@qq.commfs-master mfs]# ls
etc  sbin  share  var

配置:

[aaa@qq.commfs-master mfs]# cd etc/
	##mfs下的etc就是配置文件目录
	
[aaa@qq.commfs-master etc]# cp mfsmaster.cfg.dist mfsmaster.cfg
	##将样例文件做成配置文件   mfsmaster.cfg是master的主配置文件
	
[aaa@qq.commfs-master etc]# cp mfsexports.cfg.dist mfsexports.cfg
	##mfsexports.cfg是导出目录的配置文件

[aaa@qq.commfs-master var]# cd /usr/local/mfs/var/mfs/

[aaa@qq.commfs-master mfs]# ls
metadata.mfs.empty

[aaa@qq.commfs-master mfs]# cp metadata.mfs.empty metadata.mfs
	##metadata.mfs   元数据配置文件	
	
[aaa@qq.commfs-master mfs]# ls
metadata.mfs  metadata.mfs.empty

启动master:

[aaa@qq.commfs-master mfs]# /usr/local/mfs/sbin/mfsmaster start

最好写绝对路径

working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmaster modules ...
loading sessions ... file not found
if it is not fresh installation then you have to restart all active mounts !!!
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     <--logger的端口
master <-> chunkservers module: listen on *:9420	<--chunk连的端口
main master server module: listen on *:9421	<--master的端口
mfsmaster daemon initialized properly

[aaa@qq.commfs-master mfs]# netstat -antlup | grep mfs
tcp        0      0 0.0.0.0:9419            0.0.0.0:*               LISTEN      5684/mfsmaster      
tcp        0      0 0.0.0.0:9420            0.0.0.0:*               LISTEN      5684/mfsmaster      
tcp        0      0 0.0.0.0:9421            0.0.0.0:*               LISTEN      5684/mfsmaster

开机自启
[aaa@qq.commfs-master mfs]# echo "/usr/local/mfs/sbin/mfsmaster start" >> /etc/rc.local 
[aaa@qq.commfs-master mfs]# chmod +x /etc/rc.d/rc.local 

启动master的web监控服务:

[aaa@qq.commfs-master mfs]# /usr/local/mfs/sbin/mfscgiserv 

starting simple cgi server (host: any , port: 9425 , rootpath: /usr/local/mfs/share/mfscgi)

[aaa@qq.commfs-master mfs]# echo "/usr/local/mfs/sbin/mfscgiserv " >> /etc/rc.local 

这个服务端口是9425.

然后在浏览器中输入:http:// IP :9425
看到mfs监控页面:

MooseFS文件系统
3、配置logger:
类似于mysql的二进制日志,如果master出现问题,可以根据这个节点恢复数据。

[aaa@qq.comlogger ~]# tar xf mfs-1.6.20-2.tar.gz 
[aaa@qq.comlogger ~]# cd mfs-1.6.20-2/
[aaa@qq.comlogger mfs-1.6.20-2]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount

[aaa@qq.comlogger mfs-1.6.20-2]# make && make install
[aaa@qq.comlogger mfs-1.6.20-2]# cd /usr/local/mfs/etc/

[aaa@qq.comlogger etc]# cp mfsmetalogger.cfg.dist mfsmetalogger.cfg

这个是logger的主配置文件
[aaa@qq.comlogger etc]# vim mfsmetalogger.cfg
 14 MASTER_HOST = mfs-master
修改这一行,变为自己的主机名,要能ping通的,或者写IP

启动
[aaa@qq.comlogger etc]# /usr/local/mfs/sbin/mfsmetalogger start
[aaa@qq.comlogger etc]# netstat -antp | grep logger
tcp        0      0 172.16.12.81:39044      172.16.12.70:9419       ESTABLISHED 5581/mfsmetalogger

开机自启
[aaa@qq.comlogger etc]# echo "/usr/local/mfs/sbin/mfsmetalogger start" >> /etc/rc.local 
[aaa@qq.comlogger etc]# chmod +x /etc/rc.d/rc.local 

4、配置chunkserver 1 2 3
chunk是真正存储的节点,硬盘空间可以大一些。

准备存储,我做了LV,多加了 一块硬盘。

[aaa@qq.comchunk1 ~]# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.
[aaa@qq.comchunk1 ~]# vgcreate vgchunk1 /dev/sdb 
  Volume group "vgchunk1" successfully created
[aaa@qq.comchunk1 ~]# lvcreate -L 10G -n lvchunk1 vgchunk1 
  Logical volume "lvchunk1" created.
[aaa@qq.comchunk1 ~]# lsblk 
NAME                MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                   8:0    0  200G  0 disk 
├─sda1                8:1    0    4G  0 part /boot
└─sda2                8:2    0   74G  0 part 
  ├─centos-root     253:0    0   20G  0 lvm  /
  ├─centos-swap     253:1    0    4G  0 lvm  [SWAP]
  └─centos-tmp      253:2    0   50G  0 lvm  /tmp
sdb                   8:16   0  100G  0 disk 
└─vgchunk1-lvchunk1 253:3    0   10G  0 lvm     <---10G的LV
sr0                  11:0    1 1024M  0 rom

格式化
[aaa@qq.comchunk1 ~]# mkfs.xfs /dev/vgchunk1/lvchunk1 
挂载
[aaa@qq.comchunk1 ~]# mkdir /data 
[aaa@qq.comchunk1 ~]# mount /dev/vgchunk1/lvchunk1 /data/
开机自动挂载
[aaa@qq.comchunk1 ~]# echo "mount /dev/vgchunk1/lvchunk1 /data/" >> /etc/rc.local 
[aaa@qq.comchunk1 ~]# chmod +x /etc/rc.d/rc.local

开机自动挂载的另一种方法:
[aaa@qq.comchunk1 ~]# vim /etc/fstab
/dev/mapper/vgmfs-lvmfs /data   xfs defaults    0 0

其他两个节点类似,都这样准备。

[aaa@qq.comchunk1 ~]# tar xf mfs-1.6.20-2.tar.gz 
[aaa@qq.comchunk1 ~]# cd mfs-1.6.20-2/

注意这个编译安装时的配置,./configure,节点都不一样

[aaa@qq.comchunk1 mfs-1.6.20-2]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfsmount

[aaa@qq.comchunk1 mfs-1.6.20-2]# make && make install

配置:
主配置文件:

[aaa@qq.comchunk1 mfs-1.6.20-2]# cd /usr/local/mfs/etc/

[aaa@qq.comchunk1 etc]# cp mfschunkserver.cfg.dist mfschunkserver.cfg
[aaa@qq.comchunk1 etc]# vim mfschunkserver.cfg

 12 MASTER_HOST = mfs-master

依旧是改主机名。

存储配置文件

[aaa@qq.comchunk1 etc]# cp mfshdd.cfg.dist mfshdd.cfg
[aaa@qq.comchunk1 etc]# vim mfshdd.cfg
/data

在这里直接写挂载点就好了。
3个chunk都改。

然后给权限:否则权限不足,服务起不来

[aaa@qq.comchunk1 etc]# chown -R mfs:mfs /data/

启动服务:

[aaa@qq.comchunk1 etc]# /usr/local/mfs/sbin/mfschunkserver start
端口
[aaa@qq.comchunk1 etc]# netstat -antlup | grep mfs
tcp        0      0 0.0.0.0:9422            0.0.0.0:*               LISTEN      14986/mfschunkserve 
tcp        0      0 172.16.12.71:38882      172.16.12.70:9420       ESTABLISHED 14986/mfschunkserve 

开机自启
[aaa@qq.comchunk1 etc]# echo "/usr/local/mfs/sbin/mfschunkserver start" >> /etc/rc.local 
[aaa@qq.comchunk1 etc]# chmod +x /etc/rc.d/rc.local 

5、配置client:

[aaa@qq.comclient ~]# tar xf mfs-1.6.20-2.tar.gz 
[aaa@qq.comclient ~]# cd mfs-1.6.20-2/
装几个软件
[aaa@qq.comclient mfs-1.6.20-2]# yum install -y zlib-devel make gcc gcc-c++ fuse fuse-libs fuse-devel


[aaa@qq.comclient mfs-1.6.20-2]#  ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver


[aaa@qq.comclient mfs-1.6.20-2]# make && make install 

这时可以在监控页面看到了:

MooseFS文件系统
MooseFS文件系统
有空间。

6、使用mfs存储

[aaa@qq.comclient etc]# vim /etc/profile
配置环境变量

PATH=/usr/local/mfs/bin:$PATH

[aaa@qq.comclient etc]# . /etc/profile


[aaa@qq.comclient etc]# echo $PATH
/usr/local/mfs/sbin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin:/root/bin
[aaa@qq.comclient etc]# mfs
mfsappendchunks   mfsdirinfo        mfsgetgoal        mfsrgetgoal       mfsseteattr       mfstools
mfscgiserv        mfsfileinfo       mfsgettrashtime   mfsrgettrashtime  mfssetgoal        
mfscheckfile      mfsfilerepair     mfsmakesnapshot   mfsrsetgoal       mfssettrashtime   
mfsdeleattr       mfsgeteattr       mfsmount          mfsrsettrashtime  mfssnapshot       
[aaa@qq.comclient etc]# mfstools -h
mfs multi tool

usage:
	mfstools create - create symlinks (mfs<toolname> -> mfstools)

mfsgetgoal	查看文件的副本数,默认是1个
	mfssetgoal	设定......
	mfsgettrashtime	查看回收站的保存时间,默认1天
	mfssettrashtime	设置
	mfscheckfile	检查文件
	mfsfileinfo		查看文件信息
	mfsappendchunks
	mfsdirinfo		查看目录信息
	mfsfilerepair	修复文件
	mfsmakesnapshot	创建快照
	mfsgeteattr		查看权限
	mfsseteattr		设置权限
	mfsdeleattr		删除权限

deprecated tools:	递归设置
	mfsrgetgoal = mfsgetgoal -r
	mfsrsetgoal = mfssetgoal -r
	mfsrgettrashtime = mfsgettreshtime -r
	mfsrsettrashtime = mfssettreshtime -r

看到这些就成功了。

[aaa@qq.comclient etc]# mkdir /mnt/mfs

[aaa@qq.comclient mnt]# mfsmount /mnt/mfs/ -H 172.16.12.70
挂载

[aaa@qq.comclient mnt]# mount | grep 172
172.16.12.70:9421 on /mnt/mfs type fuse.mfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other)

测试使用:

[aaa@qq.comclient /mnt/mfs]# mkdir dir1 dir2

[aaa@qq.comclient /mnt/mfs]# mfssetgoal -r 2 dir2
	将dir2下的文件,保存为2个副本

[aaa@qq.comclient /mnt/mfs]# cp /etc/passwd dir1/
[aaa@qq.comclient /mnt/mfs]# cp /etc/passwd dir2/
[aaa@qq.comclient /mnt/mfs]# mfsfileinfo dir1/passwd 
dir1/passwd:
	chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
		copy 1: 172.16.12.73:9422
[aaa@qq.comclient /mnt/mfs]# mfsfileinfo dir2/passwd 
dir2/passwd:
	chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
		copy 1: 172.16.12.71:9422
		copy 2: 172.16.12.72:9422

关掉 73   71

结果:
dir1/下的文件不可用
dir2/下的文件可用

使用回收站:

[aaa@qq.comclient1 /mnt/mfs]# rm -f dir1/passwd 

[aaa@qq.comclient1 /mnt/mfs]# mfsgettrashtime dir1
dir1: 86400
这个是保存时间,秒,换算过来1
[aaa@qq.comclient1 /mnt]# mkdir meta
[aaa@qq.comclient1 /mnt]# mfsmount -m /mnt/meta/ -H 172.16.12.70
[aaa@qq.comclient1 meta]# cd trash/

[aaa@qq.comclient1 /mnt/meta/trash]# ls
00000004|dir1|passwd  undel

[aaa@qq.comclient1 /mnt/meta/trash]# mv 00000004\|dir1\|passwd undel/

直接移动就好了。然后就发现恢复了

其他操作:

1、 关闭

(1)client卸载使用
(2)停止chunkserver
[aaa@qq.comchunk1 ~]# /usr/local/mfs/sbin/mfschunkserver -s
(3)停止logger
[aaa@qq.comlogger ~]# /usr/local/mfs/sbin/mfsmetalogger -s
(4)停止master
[aaa@qq.commaster ~]# /usr/local/mfs/sbin/mfsmaster -s

2、 开启,设置了开机自启动

(1)master
(2)logger
(3)chunkserver
(4)client

MFS瓶颈就是master
HA 集中存储

下边这些是资源需要集中存储的

[aaa@qq.commfs-master ~]# cd /usr/local/mfs/var/mfs/
[aaa@qq.commfs-master mfs]# ls
changelog.0.mfs  metadata.mfs.back  metadata.mfs.empty  sessions.mfs  stats.mfs
相关标签: 存储