MooseFS的介绍集群部署和高可用

版权声明:爱辉弟-aihuidila版权所有 https://blog.csdn.net/weixin_43822878/article/details/87882739

(1)分布式原理分布式文件系统( Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。简单来说,就是把一些分散的(分布在局域网内各个计算机上)共享文件夹,集合到一个文件夹内(虚拟共享文件夹)。对于用户来说,要访问这些共享文件夹时,只要打开这个虚拟共享文件夹,就可以看到所有链接到虚拟共享文件夹内的共享文件夹,用户感觉不到这些共享文件
是分散于各个计算机上的。分布式文件系统的好处是集中访问、简化操作、数据容灾,以及提高文件的存取性能。
(2)MFS原理MFS是一个具有容错性的网络分布式文件系统,它把数据分散存放在多个物理服务器上,而呈现给用户的则是一个统一的资源。

2)MFS读取数据的处理过程客户端向元数据服务器发出读请求。
元数据服务器把所需数据存放的位置( Chunk Server的P地址和 Chunk编号)告知客户端。
客户端向已知的 Chunk server请求发送数据
Chunk Server向客户端发送数据。
3)MFS写入数据的处理过程客户端向元数据服务器发送写入请求
元数据服务器与 Chunk Server进行交互(只有当所需的分块 Chunks存在的时候才进行这个交互),但元数据服务器只在某些服务器创建新的分块Chunks,创建成功后由 Chunk servers告知元数据服务器操作成功。
元数据服务器告知客户端,可以在哪个 Chunk Server的哪些 Chunks写入数据。
客户端向指定的 Chunk server写入数据。
该 Chunk Server与其他 Chunk Server进行数据同步,同步成功后 ChunkServer告知客户端数据写入成功
客户端告知元数据服务器本次写入完毕
---------------------案例实验----------------------概述
公司之前的图片服务器采用的是NFS,随着业务量增加,多台服务器通过NFS方式共享一个服务器的存储空间,使得NFS服务器不堪重负,经常出现超时问题。而且NFS存在着单点故障问题,尽管可以rsync同步数据到另外一台服务器上做NFS服务的备份,但这对提高整个系统的性能并无帮助。基于目前的需求,我们需要对NFS服务器进行优化或采取别的解决方案,然而优化并不能应对日益增多的客户端的性能要求,因此选择的解决方案是采用分布式文件系统。采用分布式文件系统后,服务器之间的数据访问不再是一对多的关系,而是多对多的关系,这样可以使性能得到大幅提升。
在当前多种常用的分布式文件系统中,我们采用了MFS( MooseFS)。

分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连,分布式文件系统的实际基于客户机/服务器模式。目前常见的分布式文件系统有很多种,比如Hadoop、Moosefs、HDFS、FastDFS、PNFS(Parallel NFS)、Lustre、TFS、GFS等等一系列。在众多的分布式文件系统解决方案中,MFS是搭建比较简单、使用起来也不需要过多的修改web程序,非常方便。

一、MooseFS是什么

MooseFS(即Moose File System,简称MFS)是一个具有容错性的网络分布式文件系统,它将数据分散存放在多个物理服务器或单独磁盘或分区上,确保一份数据
有多个备份副本,对于访问MFS的客户端或者用户来说,整个分布式网络文件系统集群看起来就像一个资源一样,也就是说呈现给用户的是一个统一的资源。
MooseFS就相当于UNIX的文件系统(类似ext3、ext4、nfs),它是一个分层的目录树结构。

MFS存储支持POSIX标准的文件属性(权限,最后访问和修改时间),支持特殊的文件,如块设备,字符设备,管道、套接字、链接文件(符合链接、硬链接);
MFS支持FUSE(用户空间文件系统Filesystem in Userspace,简称FUSE),客户端挂载后可以作为一个普通的Unix文件系统使用MooseFS。
MFS可支持文件自动备份的功能,提高可用性和高扩展性。MogileFS不支持对一个文件内部的随机或顺序读写,因此只适合做一部分应用,如图片服务,静态HTML服务、
文件服务器等,这些应用在文件写入后基本上不需要对文件进行修改,但是可以生成一个新的文件覆盖原有文件。
二、MooseFS的特性

1)高可靠性,每一份数据可以设置多个备份(多分数据),并可以存储在不同的主机上
2)高可扩展性,可以很轻松的通过增加主机的磁盘容量或增加主机数量来动态扩展整个文件系统的存储量
3)高可容错性,可以通过对mfs进行系统设置,实现当数据文件被删除后的一段时间内,依旧存放于主机的回收站中,以备误删除恢复数据
4)高数据一致性,即使文件被写入、访问时,依然可以轻松完成对文件的一致性快照
5)通用文件系统,不需要修改上层应用就可以使用(那些需要专门api的dfs很麻烦!)。
6)可以在线扩容,体系架构可伸缩性极强。(官方的case可以扩到70台了!)
7)部署简单。(sa们特别高兴,领导们特别happy!)
8)可回收在指定时间内删除的文件,即可以设置删除文件的空间回收时间(“回收站"提供的是系统级别的服务,不怕误操作了,提供类似oralce 的闪回等
高级dbms的即时回滚特性!),命令"mfsgettrashtime filename”
9)提供web gui监控接口。
10)提高随机读或写的效率(有待进一步证明)。
11)提高海量小文件的读写效率(有待进一步证明)
三、MooseFS的优点

1)部署简单,轻量、易配置、易维护
2)易于扩展,支持在线扩容,不影响业务,体系架构可伸缩性极强(官方的case可以扩到70台)
3)通用文件系统,不需要修改上层应用就可以使用(比那些需要专门api的dfs方便多了)。
4)以文件系统方式展示:如存图片,虽然存储在chunkserver上的数据是二进制文件,但是在挂载mfs的client端仍旧以图片文件形式展示,便于数据备份
5)硬盘利用率高。测试需要较大磁盘空间
6)可设置删除的空间回收时间,避免误删除文件丢失就恢复不及时影响业务
7)系统负载,即数据读写分配到所有的服务器上
8)可设置文件备份的副本数量,一般建议3份,未来硬盘容量也要是存储单份的容量的三倍
四、MooseFS的缺点

1)master目前是单点(虽然会把数据信息同步到备份服务器,但是恢复需要时间,因此,会影响上线,针对这个问题,
可以通过DRBD+Keeaplived方案或者DRBD+Inotify方案解决),master和backup之间的同步,类似mysql的主从不同。
2)master服务器对主机的内存要求略高
3)默认metalogger复制元数据时间较长(可调整)
整体的一个架构:
在这里插入图片描述
环境要求,也可根据自己的习惯来
1、使用CentOS7.2部署在兼容性上可以进行部署安装
2、 部署多个节点的集群,并挂载到/mnt/mfs目录下,测试上传,下载,创建目录等功能。
部署6个节点的集群
先做hosts解析
在这里插入图片描述
分享部署所需安装包
链接:https://pan.baidu.com/s/1UwIgpW-gPsjpMyESSbz87Q
提取码:3rtv
链接:https://pan.baidu.com/s/1VNbnBw6ay3-FcAipznlKbw
提取码:mpst

关闭防火墙和selinux
systemctl stop firewalld.service
sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/’ /etc/selinux/config
grep SELINUX=disabled /etc/selinux/config
setenforce 0
下面部署mfsmaster
首先上传mfs的安装包-moosefs-3.0.91-1.tar.gz
在这里插入图片描述
在执行安装到指定目录和用户的时候会报这个错,原因是没有c++编译器环境

在这里插入图片描述
解决办法: yum install gcc gcc-c++ zlib-devel -y
下载完后在执行一遍上一条命令后
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
检查是否成功
在这里插入图片描述
进行编译安装
make && make install
在这里插入图片描述
master服务器需要以下文件:
mfsmaster.cfg 主文件
mfsexports.cfg mfs挂载权限设置,参考NFS文件系统中的exports.cfg
mfstopology.cfg 机架感知
在这里插入图片描述
[root@master mfs]# useradd mfs -s /sbin/nologin 创建mfs用户
在这里插入图片描述
启动mfsmaster
在这里插入图片描述
检查mfsmaster进程和端口
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
master 管理节点的数据存放在 **/usr/local/mfs/var/mfs/**目录下
启动监控界面web
在这里插入图片描述
在这里插入图片描述
下面metalogger元数据日志服务器上操作
在这里插入图片描述
上传moosefs的包解压到解压的目录下
在这里插入图片描述
执行
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
在执行进行编译
make && make install
在这里插入图片描述
[root@metlooger mfs]# vi mfsmetalogger.cfg
在这里插入图片描述
在这里插入图片描述
启动metalogger节点服务
在这里插入图片描述
创建软连接
在这里插入图片描述
在这里插入图片描述
chunkserver数据存储节点上操作
在这里插入图片描述
在这里插入图片描述
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
make && make install
在这里插入图片描述
chunkserver配置文件如下:
mfschunkserver.cfg 这个是mfschunkserver配置文件
mfshdd.cfg 这个是mfschunkserver上的分区,必须是独立分区!
[root@chunkserver1 mfs]# vi mfschunkserver.cfg
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
启动chunkserver服务并检查
在这里插入图片描述
创建软连接
在这里插入图片描述
mfs client客户端上操作
mfs client安装依赖与系统包fuse,通过yum方式安装
[root@cliens2 ~]# yum -y install fuse fuse-devel
[root@cliens2 ~]# useradd mfs -s /sbin/nologin
[root@cliens2 ~]# yum install -y gcc c++ zlib-devel
[root@cliens2 ~]# ll
total 1092
-rw-------. 1 root root 1292 Oct 28 19:48 anaconda-ks.cfg
-rw-r–r--. 1 root root 1110532 Oct 28 22:22 moosefs-3.0.91-1.tar.gz
[root@cliens2 ~]# tar xf moosefs-3.0.91-1.tar.gz
[root@cliens2 ~]# ll
total 1096
-rw-------. 1 root root 1292 Oct 28 19:48 anaconda-ks.cfg
drwxr-xr-x. 20 501 games 4096 Apr 7 2017 moosefs-3.0.91
-rw-r–r--. 1 root root 1110532 Oct 28 22:22 moosefs-3.0.91-1.tar.gz
[root@cliens2 ~]# cd moosefs-3.0.91
[root@cliens2 moosefs-3.0.91]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --enable-mfsmount
[root@cliens2 moosefs-3.0.91]# make && make install
[root@cliens2 moosefs-3.0.91]# mkdir /mnt/mfs 创建挂载的数据目录
[root@cliens2 moosefs-3.0.91]# mkdir /mnt/mfsmeta 创建挂载的回收站目录
[root@cliens2 moosefs-3.0.91]# /usr/local/mfs/bin/mfsmount /mnt/mfs -H 192.168.200.180 挂载mfs文件系统的根目录到本机的/mnt/mfs下
[root@cliens2 moosefs-3.0.91]# /usr/local/mfs/bin/mfsmount -m /mnt/mfsmeta/ -H 192.168.200.180 挂载MFS文件系统的mfsmeta,使用回收站功能
进行查看
在这里插入图片描述
在这里插入图片描述
到挂载目录/mnt/mfs下,就可以查看到MFS文件系统根目录下的内容了
在这里插入图片描述
在这里插入图片描述
卸载的话,直接使用命令
在这里插入图片描述
卸载完后在到客户机上的挂载的目录下就什么内容都查看不到了
在这里插入图片描述
测试回收站功能
[root@cliens2 mfs]# echo “qwertyu” >dddd 首先创建一个文件并存放数据
[root@cliens2 mfs]# ll
total 1
-rw-r–r--. 1 root root 0 Oct 28 22:38 111.txt
-rw-r–r--. 1 root root 0 Oct 28 22:31 aihuidi.txt
-rw-r–r--. 1 root root 8 Oct 28 22:38 dddd
[root@cliens2 mfs]# /usr/local/mfs/bin/mfsrgettrashtime /mnt/mfs
mfs/ mfsmeta/
[root@cliens2 mfs]# /usr/local/mfs/bin/mfsrgettrashtime /mnt/mfs
mfs/ mfsmeta/
[root@cliens2 mfs]# /usr/local/mfs/bin/mfsrgettrashtime /mnt/mfs/
111.txt aihuidi.txt dddd
[root@cliens2 mfs]# /usr/local/mfs/bin/mfsrgettrashtime /mnt/mfs/
111.txt aihuidi.txt dddd
[root@cliens2 mfs]# /usr/local/mfs/bin/mfsrgettrashtime /mnt/mfs/dddd
deprecated tool - use “mfsgettrashtime -r”
/mnt/mfs/dddd:
files with trashtime 86400 : 1 确认回收站存放时间为24小时
[root@cliens2 mfs]# rm -rf dddd 删除文件
[root@cliens2 mfs]# find /mnt/mfsmeta/trash/ -name “dddd” 在回收站里面找到被删除的文件
/mnt/mfsmeta/trash/004/00000004|dddd
[root@cliens2 mfs]# cat ‘/mnt/mfsmeta/trash/004/00000004|dddd’ 看到了就是我刚才删除的那个文件名
dddd
[root@cliens2 mfs]# cd /mnt/mfsmeta/trash/004 从回收站里恢复已删除的文件
[root@cliens2 004]# ls
00000004|dddd undel
[root@cliens2 004]# mv 00000004|dddd ./undel/ 进行恢复命令
[root@cliens2 004]# cat /mnt/mfs/dddd 发现dddd文件已经恢复了
qwertyu
[root@cliens2 004]#
为垃圾箱设定隔离时间
就是删除文件存放在垃圾箱(trash bin)的时间就是隔离时间,即一个删除文件能够存放在一个垃圾箱的时间
设置的时间是按照小时计算的,设置的单位是秒,不满一小时就按一小时算
[root@cliens2 004]# /usr/local/mfs/bin/mfssettrashtime 600 /mnt/mfs/
/mnt/mfs/: 600
上面设置为600秒,即10分钟,不满一小时,算作一小时,所有查看结果是3600秒即一小时
[root@cliens2 004]# /usr/local/mfs/bin/mfsrgettrashtime /mnt/mfs
deprecated tool - use “mfsgettrashtime -r”
/mnt/mfs:
files with trashtime 86400 : 3
directories with trashtime 3600 : 1 查看这一个行结果
在设置6000秒
[root@cliens2 004]# /usr/local/mfs/bin/mfssettrashtime 6000 /mnt/mfs/
/mnt/mfs/: 6000
设置6000秒,多余1小时,但不满2小时,所以结果算作2小时
[root@cliens2 004]# /usr/local/mfs/bin/mfsrgettrashtime /mnt/mfs
deprecated tool - use “mfsgettrashtime -r”
/mnt/mfs:
files with trashtime 86400 : 3
directories with trashtime 7200 : 1
若把时间设置为0,说明文件执行删除命令后,就会立即删除,不可能在恢复,不进入回收站
[root@cliens2 004]# /usr/local/mfs/bin/mfssettrashtime 0 /mnt/mfs/
/mnt/mfs/: 0
[root@cliens2 004]# /usr/local/mfs/bin/mfsrgettrashtime /mnt/mfs
deprecated tool - use “mfsgettrashtime -r”
/mnt/mfs:
files with trashtime 86400 : 3
directories with trashtime 0 : 1
mfssettrashtime -r 是对目录进行递归赋值的,为一个目录设定存放时间后,在此目录下的新创建的文件和目录就可以继承这个设置了
[root@cliens2 004]# /usr/local/mfs/bin/mfssettrashtime -r 6000 /mnt/mfs/
/mnt/mfs/:
inodes with trashtime changed: 4
inodes with trashtime not changed: 0
inodes with permission denied: 0
[root@cliens2 004]# /usr/local/mfs/bin/mfsrgettrashtime /mnt/mfs/
deprecated tool - use “mfsgettrashtime -r”
/mnt/mfs/:
files with trashtime 7200 : 3
directories with trashtime 7200 : 1
[root@cliens2 004]# /usr/local/mfs/bin/mfsrgettrashtime /mnt/mfs/aihuidi.txt
deprecated tool - use “mfsgettrashtime -r”
/mnt/mfs/aihuidi.txt:
files with trashtime 7200 : 1
设定存储副本数
目标(goal),是指文件被拷贝的份数,设定了拷贝的份数后是可以通过mfsgetgoal 命令来证实的,也可以通过mfsrsetgoal 来改变设定
设置mfs文件系统中文件的副本个数,设置2份:
[root@cliens2 ~]# /usr/local/mfs/bin/mfsgetgoal /mnt/mfs/aihuidi.txt
/mnt/mfs/aihuidi.txt: 2
查看文件份数
[root@cliens2 ~]# /usr/local/mfs/bin/mfsgetgoal /mnt/mfs/aihuidi.txt
/mnt/mfs/aihuidi.txt: 2
根据测试即拷贝份数要不能多余chunkserver的节点数量
目录设置与文件设置操作一致,给目录设置goal,之后在该目录下创建的文件将会继承该goal,但不会影响到已经存在的文件
[root@cliens2 ~]# /usr/local/mfs/bin/mfssetgoal 2 /mnt/mfs
/mnt/mfs: goal: 2
[root@cliens2 ~]# /usr/local/mfs/bin/mfsgetgoal /mnt/mfs
/mnt/mfs: 2
若要使该命令递归到目录下的所有文件,添加 -r 参数
[root@cliens2 ~]# /usr/local/mfs/bin/mfssetgoal -r 2 /mnt/mfs
/mnt/mfs:
inodes with goal changed: 0
inodes with goal not changed: 4
inodes with permission denied: 0
[root@cliens2 ~]# /usr/local/mfs/bin/mfsgetgoal -r /m
media/ mnt/
[root@cliens2 ~]# /usr/local/mfs/bin/mfsgetgoal -r /mnt/mfs
/mnt/mfs:
files with goal 2 : 3
directories with goal 2 : 1
[root@cliens2 ~]# /usr/local/mfs/bin/mfsgetgoal /mnt/mfs
/mnt/mfs: 2
goal设置为2,只要两个chunkserver有一个能够正常运行,数据就能保证完整性
注意下面几个特殊情况:
1)一个不包含数据的零长度的文件,尽管没有设置为非零的目标,但用mfscheckfile命令查询将返回一个空的结果;将文件填充内容后,其会根据设置的goal创建副本;
这时再将文件清空,其副本依然作为空文件存在。
2)假如改变一个已经存在的文件的拷贝个数,那么文件的拷贝份数将会被扩大或者被删除,这个过程会有延时。可以通过mfscheckfile 命令来证实。
3)对一个目录设定“目标”,此目录下的新创建文件和子目录均会继承此目录的设定,但不会改变已经存在的文件及目录的拷贝份数。可以通过mfsdirinfo来查看整个目录树的信息摘要
[root@cliens2 ~]# touch /mnt/mfs/aihuidila
[root@cliens2 ~]# /usr/local/mfs/bin/mfscheckfile /mnt/mfs/aihuidila
/mnt/mfs/aihuidila: 虽然有文件(虽然没有设置为非零目标,the noo-zero goal),但是是一个空文件,所以mfscheckfile是为空的结果
[root@cliens2 ~]# /usr/local/mfs/bin/mfsfileinfo /mnt/mfs/aihuidila
/mnt/mfs/aihuidila:
no chunks - empty file
[root@cliens2 ~]# echo “iidfioisdhi” > /mnt/mfs/aihuidila 往测试文件里写入数据
[root@cliens2 ~]# /usr/local/mfs/bin/mfscheckfile /mnt/mfs/aihuidila
/mnt/mfs/aihuidila:
chunks with 2 copies: 1
[root@cliens2 ~]# /usr/local/mfs/bin/mfsfileinfo /mnt/mfs/aihuidila
/mnt/mfs/aihuidila:
chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
copy 1: 192.168.200.182:9422 (status:VALID)
copy 2: 192.168.200.183:9422 (status:VALID) 由于上面对/mnt/mfs目录进行递归设置拷贝的份数是2,所以这里显示的副本数正好是2
下面测试文件的副本数为3或者大于3的副本数
[root@cliens2 ~]# /usr/local/mfs/bin/mfssetgoal 3 /mnt/mfs/aihuidila
/mnt/mfs/aihuidila: goal: 3
[root@cliens2 ~]# /usr/local/mfs/bin/mfsgetgoal /mnt/mfs/aihuidila
/mnt/mfs/aihuidila: 3
[root@cliens2 ~]# echo “123456” > /mnt/mfs/aihuidila
[root@cliens2 ~]# /usr/local/mfs/bin/mfscheckfile /mnt/mfs/aihuidila
/mnt/mfs/aihuidila:
chunks with 2 copies: 1
[root@cliens2 ~]# /usr/local/mfs/bin/mfsfileinfo /mnt/mfs/aihuidila
/mnt/mfs/aihuidila:
chunk 0: 0000000000000003_00000001 / (id:3 ver:1)
copy 1: 192.168.200.182:9422 (status:VALID)
copy 2: 192.168.200.183:9422 (status:VALID)
[root@cliens2 ~]#
以上结果可知,虽然将文件的副本数设置为3,理论上应该是复制3份副本,但是这里的chunkserver只有2台,所以copy也就为2了。
因此得出结论,goal number不能超过chunkserver number,要小于或等于chunkserver的数量。
mfsdirinfo
整个目录树的内容需要通过一个功能增强、等同于“du -s”的命令mfsdirinfo来显示。mfsdirinfo可以显示MFS的具体信息,查看目录树的内容摘要:
在这里插入图片描述
其中:
1)length 表示文件大小的总和
2)size 表示块长度总和
3)realsize 表示磁盘空间的使用,包括所有的副本
快照功能
MFS系统可以利用mfsmakesnapshot工具给文件或者目录做快照 (snapshot)
下面将mfs文件系统下的aihuidila文件做快照
[root@cliens2 ~]# cd /mnt/mfs
[root@cliens2 mfs]# ls
111.txt aihuidila aihuidi.txt dddd
[root@cliens2 mfs]# /usr/local/mfs/bin/mfsmakesnapshot aihuidila /opt/aihuidila-snapshot
(/opt/aihuidila-snapshot,aihuidila): both elements must be on the same device
[root@cliens2 mfs]# /usr/local/mfs/bin/mfsmakesnapshot aihuidila aihuidila-snapshot
[root@cliens2 mfs]# ll
total 2
-rw-r–r--. 1 root root 0 Oct 28 22:38 111.txt
-rw-r–r--. 1 root root 7 Oct 28 23:36 aihuidila
-rw-r–r--. 1 root root 7 Oct 28 23:36 aihuidila-snapshot
-rw-r–r--. 1 root root 0 Oct 28 22:31 aihuidi.txt
-rw-r–r--. 1 root root 8 Oct 28 22:38 dddd
特别要注意的是:
不能将快照放到MFS文件系统之外的其他文件系统下,快照文件和源文件必须要在同一个MFS文件系统下(即路径一致)
[root@cliens2 mfs]# /usr/local/mfs/bin/mfsfileinfo aihuidila-snapshot
aihuidila-snapshot:
chunk 0: 0000000000000003_00000001 / (id:3 ver:1)
copy 1: 192.168.200.182:9422 (status:VALID)
copy 2: 192.168.200.183:9422 (status:VALID)
[root@cliens2 mfs]# /usr/local/mfs/bin/mfsfileinfo aihuidila
aihuidila:
chunk 0: 0000000000000003_00000001 / (id:3 ver:1)
copy 1: 192.168.200.182:9422 (status:VALID)
copy 2: 192.168.200.183:9422 (status:VALID)
得出结论:
通过mfsfileinfo命令可以查看创建出来的文件快照,它只占用了一个inode,并不占用磁盘空间,就像ln命令创建硬链接类似
mfsmakesnapshot是一次执行中整合了一个或者一组文件的副本,而且对这些文件的源文件进行任何修改都不会影响源文件的快照,就是说任何对源文件的操作,如写入操作,将会不修改副本
mfsmakesnapshot可以实现这个快照功能,当有多个源文件时,他们的快照会被加入到同一个目标文件中,通过对比快照的测试,可以发现快照的本质:
1)一个MFS系统下的文件做快照后,查看两个文件的块信息,他们是同一个块。接着,把原文件删除,删除源文件后(最初会留在回收站上,但过一段时间后回收站的文件也删除了),快照
文件仍然存储,并且可以访问。使用mfsfileinfo查看,发现还是原来的块。
2)对一个文件做快照后,查看两个文件的块信息,发现是同一个块。把原文件修改后,发现原文件的使用块信息变了,即使用了一个新块。而快照文件仍然使用原来的块,保持文件内容不变
测试MooseFS存储空间扩容
[root@cliens2 ~]# ll
total 71716
-rw-------. 1 root root 1292 Oct 28 19:48 anaconda-ks.cfg
drwxr-xr-x. 20 501 games 4096 Oct 28 22:23 moosefs-3.0.91
-rw-r–r--. 1 root root 1110532 Oct 28 22:22 moosefs-3.0.91-1.tar.gz
-rw-r–r--. 1 root root 72311136 Oct 28 23:56 YNote.exe
[root@cliens2 ~]# cp -r YNote.exe /mnt/mfs
[root@cliens2 ~]# du -sh /mnt/mfs
71M /mnt/mfs
[root@cliens2 ~]# du -sh /mnt/mfs/YNote.exe
69M /mnt/mfs/YNote.exe
[root@cliens2 ~]# cd /mnt/mfs
[root@cliens2 mfs]# ll
total 70618
-rw-r–r--. 1 root root 0 Oct 28 22:38 111.txt
-rw-r–r--. 1 root root 7 Oct 28 23:36 aihuidila
-rw-r–r--. 1 root root 7 Oct 28 23:36 aihuidila-snapshot
-rw-r–r--. 1 root root 0 Oct 28 22:31 aihuidi.txt
-rw-r–r--. 1 root root 8 Oct 28 22:38 dddd
-rw-r–r--. 1 root root 72311136 Oct 28 23:57 YNote.exe
[root@cliens2 mfs]# /usr/local/mfs/bin/mfsgetgoal /mnt/mfs/YNote.exe
/mnt/mfs/YNote.exe: 2
[root@cliens2 mfs]# /usr/local/mfs/bin/mfsfileinfo /mnt/mfs/YNote.exe
/mnt/mfs/YNote.exe:
chunk 0: 0000000000000004_00000001 / (id:4 ver:1)
copy 1: 192.168.200.182:9422 (status:VALID)
copy 2: 192.168.200.183:9422 (status:VALID)
chunk 1: 0000000000000005_00000001 / (id:5 ver:1)
copy 1: 192.168.200.182:9422 (status:VALID)
copy 2: 192.168.200.183:9422 (status:VALID)
这时候在新增加一台chunkserver节点
调整goal副本数
[root@cliens2 mfs]# /usr/local/mfs/bin/mfssetgoal 3 /mnt/mfs/YNote.exe
/mnt/mfs/YNote.exe: goal: 3
[root@cliens2 mfs]# /usr/local/mfs/bin/mfsgetgoal /mnt/mfs/YNote.exe
/mnt/mfs/YNote.exe: 3
再次查看副本数据,可以看到数据进行重新平衡
[root@cliens2 mfs]# /usr/local/mfs/bin/mfsfileinfo /mnt/mfs/YNote.exe
/mnt/mfs/YNote.exe:
chunk 0: 0000000000000004_00000001 / (id:4 ver:1)
copy 1: 192.168.200.182:9422 (status:VALID)
copy 2: 192.168.200.183:9422 (status:VALID)
copy 3: 192.168.200.186:9422 (status:VALID)
chunk 1: 0000000000000005_00000001 / (id:5 ver:1)
copy 1: 192.168.200.182:9422 (status:VALID)
copy 2: 192.168.200.183:9422 (status:VALID)
copy 3: 192.168.200.186:9422 (status:VALID)
[root@cliens2 mfs]#
上面是最终重新平衡的效果
简单解决Master单点故障的瓶颈
当master管理节点(即元数据服务器)出现故障导致元数据损坏后,可以通过Metalogger元数据日志服务器上的备份数据进行恢复!
通常元数据有两部分的数据:
1)主要元数据文件metadata.mfs,当mfsmaster运行的时候会被命名为metadata.mfs.back
2)元数据改变日志changelog.*.mfs,存储了过去的N小时的文件改变。主要的元数据文件需要定期备份,备份的频率取决于取决于多少小时changelogs储存。
元数据changelogs应该实时的自动复制。自从MooseFS 1.6.5,这两项任务是由mfsmetalogger守护进程做的。

元数据损坏是指由于各种原因导致master上的metadata.mfs数据文件不可用。一旦元数据损坏,所有的存储在moosefs上的文件都不可使用。

一旦master管理节点出现崩溃(比如因为主机或电源失败),需要最后一个元数据日志changelog并入主要的metadata中。
这个操作时通过mfsmetarestore工具做的,最简单的方法是:

/usr/local/mfs/sbin/mfsmetarestore -a

如果master数据被存储在MooseFS编译指定地点外的路径,则要利用-d参数指定使用,比如:

/usr/local/mfs/sbin/mfsmetarestore -a -d /storage/mfsmaster

下面模拟一个元数据损坏后的恢复操作
[root@mfsmaster ~]# #/usr/local/mfs/sbin/mfsmaster stop
[root@mfsmaster ~]# cd /usr/local/mfs/var/mfs/
[root@mfsmaster mfs]# ls
192.168.200.186 changelog.2.mfs changelog.4.mfs metadata.mfs.back.1 stats.mfs
changelog.1.mfs changelog.3.mfs metadata.mfs metadata.mfs.empty
[root@mfsmaster mfs]# rm -rf *
然后重新启动master发现会报错
[root@mfsmaster mfs]# /usr/local/mfs/sbin/mfsmaster start
open files limit has been set to: 16384
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmaster modules …
exports file has been loaded
topology file has been loaded
loading metadata …
can’t find metadata.mfs - try using option ‘-a’
init: metadata manager failed !!!
error occurred during initialization - exiting
现在进行元数据恢复
到metalogger元数据日志服务器上吧最新的一份metadata_ml.mfs.back及changelog_ml.0.mfs复制到master元数据服务器的的数据目录下,并注意文件属主属组为mfs(或者可以拷贝全部数据到Master元数据服务器上,这个没验证)
先到metalogger元数据日志服务器上进行查看
[root@metlooger mfs]# cd /usr/local/mfs/var/mfs/
[root@metlooger mfs]# ls
changelog_ml.0.mfs changelog_ml.2.mfs changelog_ml_back.1.mfs metadata.mfs.empty
changelog_ml.1.mfs changelog_ml_back.0.mfs metadata.mfs metadata_ml.tmp
使用rsync命令推到master服务器上
[root@metlooger mfs]# rsync -e “ssh -p22” -acpgolr metadata_ml.tmp changelog_ml.0.mfs 192.168.200.180:/usr/local/mfs/var/mfs/
到master服务器上
[root@mfsmaster mfs]# ll
total 8
-rw-r-----. 1 mfs mfs 238 Oct 29 00:23 changelog_ml.0.mfs
-rw-r-----. 1 mfs mfs 8 Oct 28 21:21 metadata_ml.tmp
[root@mfsmaster mfs]# chown -R mfs.mfs ./*
启动master服务
[root@mfsmaster mfs]# /usr/local/mfs/sbin/mfsmaster start
open files limit has been set to: 16384
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmaster modules …
exports file has been loaded
topology file has been loaded
loading metadata …
can’t find metadata.mfs - try using option ‘-a’
init: metadata manager failed !!!
error occurred during initialization - exiting
发现启动还是报错
mfs的操作日志都记录到changelog.0.mfs里面。changelog.0.mfs每小时合并一次到metadata.mfs中
此时应该利用mfsmetarestore命令合并元数据changelogs,可以用自动恢复模式命令"mfsmetarestore –a"
[root@mfsmaster mfs]# /usr/local/mfs/sbin/mfsmetarestore -a
mfsmetarestore has been removed in version 1.7, use mfsmaster -a instead
然后需要以-a的方式启动master
[root@mfsmaster mfs]# /usr/local/mfs/sbin/mfsmaster -a
open files limit has been set to: 16384
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmaster modules …
exports file has been loaded
topology file has been loaded
loading metadata …
changelog_ml.0.mfs:124: operation (1540742855|RELEASE(4,7)
) error: 32 (Data mismatch)
error applying changelogs - fix changelogs manually or use ‘-i’ flag
init: metadata manager failed !!!
error occurred during initialization - exiting ---- 意思是初始化失败
解决办法:
[root@mfsmaster mfs]# cd /usr/local/mfs/var/mfs/
[root@mfsmaster mfs]# mv metadata_ml.tmp
changelog_ml.0.mfs metadata_ml.tmp .mfscgiserv.lock .mfsmaster.lock
[root@mfsmaster mfs]# mv metadata_ml.tmp metadata.mfs
再次启动master服务
[root@mfsmaster mfs]# /usr/local/mfs/sbin/mfsmaster start
open files limit has been set to: 16384
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmaster modules …
exports file has been loaded
topology file has been loaded
loading metadata …
metadata file has been loaded
no charts data file - initializing empty charts
master <-> metaloggers module: listen on *:9419
master <-> chunkservers module: listen on *:9420
main master server module: listen on *:9421
mfsmaster daemon initialized properly
检查
在这里插入图片描述
MFS集群维护
启动MFS集群
安全的启动MooseFS 集群(避免任何读或写的错误数据或类似的问题)的方式是按照以下命令步骤:

启动mfsmaster 进程
启动所有的mfschunkserver 进程
启动mfsmetalogger 进程(如果配置了mfsmetalogger)
当所有的chunkservers 连接到MooseFS master 后,任何数目的客户端可以利用mfsmount 去挂接被export 的文件系统。(可以通过检查master 的日志或是CGI 监视器来查看是否所有的chunkserver被连接)。
停止MFS集群
安全的停止MooseFS 集群:

在所有的客户端卸载MooseFS 文件系统(用umount 命令或者是其它等效的命令)
用mfschunkserver stop 命令停止chunkserver 进程
用mfsmetalogger stop 命令停止metalogger 进程
用mfsmaster stop 命令停止master 进程
master高可用部署与测试:
整个流程架构图:
在这里插入图片描述
安装keepalived服务 主备节点都执行
安装依赖包
yum install gcc*
yum -y install openssl-devel
yum install popt-devel
下载Keepalived-1.2.2的tar
wget http://www.keepalived.org/software/keepalived-1.2.2.tar.gz
tar zxvf keepalived-1.2.2.tar.gz 解压
cd keepalived-1.2.2
./configure --prefix=/
make
make install

主master节点配置文件
[root@master ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
router_id master
}

vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.66/24 dev eth0 label eth0:1
}
}
启动命令:
/etc/init.d/keepalived start
停止命令:
/etc/init.d/keepalived stop
查看是否有VIP地址信息
在这里插入图片描述
备backup节点配置文件
[root@backup ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
router_id backup
}

vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.66/24 dev eth0 label eth0:1
}
}
启动:
/etc/init.d/keepalived start
2、然后更改所有chunkserver服务配置文件都要进行替换
在这里插入图片描述
3、重新启动chunkserver
4、客户端挂载直接挂载VIP地址信息
在这里插入图片描述
还需下载 yum -y install rsync
VIP漂移后自动执行数据恢复脚本

[root@backup ~]# vim master.sh 
# Version: V1.0
# Author: aihuidi
# Organization: www.aihuidi.com 
# Created Time : 2018-11-2 18:41:02
# Description:
##############################################################
master节点监控脚本
#process=`ps aux|grep mfs|wc -l`
#port=`netstat -lntup|grep mfs|wc -l`
[ $process -eq 2 ]   || exit
[ $port -eq 3 ]  || exit
if [ `ps -C mfsmaster --no-header | wc -l ` -ne 1 ];then
    /usr/local/mfs/sbin/mfscgiserv stop
      /etc/init.d/keepalived stop
fi
数据恢复脚本
VIP=`ip addr|grep 10.0.0.66|awk -F" " '{print $2}'|cut -d"/" -f1`
if [ $VIP == 10.0.0.66 ];then
        /usr/local/mfs/sbin/mfsmaster stop
        /bin/rm -f /usr/local/mfs/var/mfs/*
        /usr/bin/rsync -avz -e "ssh -p 22" [email protected]:/usr/local/mfs/var/mfs/* /usr/local/mfs/var/mfs/
        /usr/local/mfs/sbin/mfsmetarestore -m
        /usr/local/mfs/sbin/mfsmaster -a
sleep 3
   echo "this server has become the master of MFS"
if [ $VIP = 10.0.0.66 ]
then
         echo "mfsmaster set-yes"
else
        echo "mfsmaster setup-no"
fi
fi

祝你成功
技术qq:3091143899
欢迎!!!

猜你喜欢

转载自blog.csdn.net/weixin_43822878/article/details/87882739