MooseFS文件系统
官网地址: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】提高随机读或写效率和海量小文件的读写效率。
MFS的组件:
【1】Master:(元数据服务器)
负责各数据存储服务器的管理,文件读写调度,文件空间回收以及恢复,多节点拷贝。
【2】Metalogger:(元数据日志服务器)
负责备份Master服务器的changelog。文件类型为 changelog.*.mfs ,以便在Master出问题时接替其工作.
【3】Chunk:(数据存储服务器)
负责连接Master,听从Master调度,提供存储空间,并为客户端提供数据传输.
【4】Client:(客户端挂载)
通过FUSE内核接口挂载远程管理服务器(master)上所管理的数据存储服务器,使用起来和本地文件系统一样。
【1】首先client客户端访问主服务器master,获取文件实体的位置等相关信息;
【2】主服务器master查询缓存记录,把文件实体的位置等相关信息发给client客户端;
【3】Client客户端根据拿到的信息去访问对应的存储实体数据的服务器(data servers或者 chunk servers);
【4】存储实体数据的服务器(data servers或者 chunk servers)把对应的数据返回给Client客户端。
【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监控页面:
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
这时可以在监控页面看到了:
有空间。
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
上一篇: 存储控制器和SDRAM 实验
下一篇: 08:白细胞计数