- 基本概念
1.MooseFS是一个具有容错性的网络分布式文件系统。它把数据分散存放在多个物理服务器上,而呈现给用户的则是一个统一的资源
2.MooseFS文件系统结构包括以下四种角色
(1)管理服务器master
管理服务器:负责各个数据存储服务的管理文件读写调度,文件空间回收以及恢复,多节点拷贝
(2)数据存储服务器data server(chunk servers)
真正存储用户数据的服务器存储文件时,首先把文件分成块,然后这些块在数据服务器chunkserver之间赋值(复制份数可以手工指定,建议设置副本数为数据服务器可以为多个,并且数据越多,可使用的“磁盘空间越大,”可靠性也越高
(3)元数据日志服务器:
负责备份master服务器的变化日志文件,文件类型为changelog_ml.*.mfs,以便于在master server出现问题的时候解体器 进行工作
(4)客户端挂载使用client computers
使用MFS文件系统来存储和访问的主机名称为MFS的客户端,成功挂载MFS系统以后,就可以像以前NFS一样共享这个虚拟性的存储了
3.MFS特性
(1)通用文件系统,不需要修改上层应用就可以使用
(2)可以在线扩容,体系架构可伸缩性极强
(3)部署简单
(4)高可用,可设置任意的文件冗余程度
(5)可回收在指定时间内删除的文件
(6)提供netapp,emc,ibm等商业存储的snapshot特性
(7)google filesystem的一个c实现
(8)提供web gui监控接口
(9)提高随机读或写的效率
(10) 提高海量小文件的读写效率
4.MFS的读数据过程
- client当需要一个数据时,首先向master server发起查询请求;
- 管理服务器检索自己的数据,获取到数据所在的可用数据服务器位置ip|port|chunkid;
- 管理服务器将数据服务器的地址发送给客户端;
- 客户端向具体的数据服务器发起数据获取请求;
- 数据服务器将数据发送给客户端;
5.MFS的写数据过程
- 当客户端有数据写需求时,首先向管理服务器提供文件元数据信息请求存储地址(元数据信息如:文件名|大小|份数等);
- 管理服务器根据写文件的元数据信息,到数据服务器创建新的数据块;
- 数据服务器返回创建成功的消息;
- 管理服务器将数据服务器的地址返回给客户端(chunkIP|port|chunkid);
- 客户端向数据服务器写数据;
- 数据服务器返回给客户端写成功的消息;
- 客户端将此次写完成结束信号和一些信息发送到管理服务器来更新文件的长度和最后修改时间
6.MFS的删除文件过程
- 客户端有删除操作时,首先向Master发送删除信息;
- Master定位到相应元数据信息进行删除,并将chunk server上块的删除操作加入队列异步清理;
- 响应客户端删除成功的信号
7. MFS修改文件内容的过程
- 客户端有修改文件内容时,首先向Master发送操作信息;
- Master申请新的块给.swp文件,
- 客户端关闭文件后,会向Master发送关闭信息;
- Master会检测内容是否有更新,若有,则申请新的块存放更改后的文件,删除原有块和.swp文件块;
- 若无,则直接删除.swp文件块
8.MFS重命名文件的过程
- 客户端重命名文件时,会向Master发送操作信息;
- Master直接修改元数据信息中的文件名;返回重命名完成信息;
一、搭建mfs分布式文件系统的步骤:
1.server1作为master节点
(1)添加地址解析
[root@server1 ~]# vim /etc/hosts
172.25.19.1 server1 mfsmaster
(2)安装软件
[root@server1 ~]# cd 3.0.103/
[root@server1 3.0.103]# ls
[root@server1 3.0.103]# yum install -y
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
(3)开启moosefs-master服务
[root@server1 3.0.103]# cd /etc/mfs
[root@server1 mfs]# systemctl start moosefs-master
[root@server1 mfs]# netstat -atnlp
开启了9419-9421端口
(4)开启moosefs-cgiserv服务,使用的是9425端口
[root@server1 mfs]# systemctl start moosefs-cgiserv
[root@server1 mfs]# netstat -atnlp
(5)打开浏览器访问172.25.19.1:9425,可以看到web界面
将chunkserver的安装包传给server2
[root@server1 3.0.103]# scp moosefs-chunkserver-3.0.103-1.rhsystemd.x86_64.rpm server2:
2.server2 作为chunkserver节点
(1)安装软件包
[root@server2 ~]# ls
moosefs-chunkserver-3.0.103-1.rhsystemd.x86_64.rpm
[root@server2 ~]# rpm -ivh moosefs-chunkserver-3.0.103-1.rhsystemd.x86_64.rpm
(2)添加地址解析
[root@server2 ~]# vim /etc/hosts
(3)查看/etc/mfs目录
[root@server2 ~]# cd /etc/mfs
[root@server2 mfs]# ls
mfschunkserver.cfg mfshdd.cfg
mfschunkserver.cfg.sample mfshdd.cfg.sample
(4)创建一个挂载目录
[root@server2 mfs]# mkdir /mnt/chunk1
(5)给server2添加一个虚拟硬盘
在虚拟机图形管理器中添加
可以看到磁盘设备中出现了/dev/vda
[root@server2 ~]# fdisk -l
划分分区,将所有的都划分为一个分区
[root@server2 mfs]# fdisk /dev/vda
再次查看分区情况
[root@server2 mfs]# fdisk -l
(6)格式化
[root@server2 mfs]# mkfs.xfs /dev/vda1
(7)挂载设备
[root@server2 mfs]# mount /dev/vda1 /mnt/chunk1/
[root@server2 mfs]# df
(8)将挂载目录写入配置文件
[root@server2 mfs]# ls
mfschunkserver.cfg mfshdd.cfg
mfschunkserver.cfg.sample mfshdd.cfg.sample
[root@server2 mfs]# vim mfshdd.cfg
(9)修改挂载目录的所有人所有组
[root@server2 mfs]# ll -d /mnt/chunk1
drwxr-xr-x 2 root root 6 May 18 10:25 /mnt/chunk1
[root@server2 mfs]# ls /mnt/chunk1/
[root@server2 mfs]# chown mfs.mfs /mnt/chunk1/
[root@server2 mfs]# df
(10)开启chunkserver服务
[root@server2 mfs]# systemctl start moosefs-chunkserver
(11)浏览器中查看到信息
将安装包传给server3
[root@server2 ~]# scp moosefs-chunkserver-3.0.103-1.rhsystemd.x86_64.rpm server3:
3.server3:作为另一个chunkserver节点
(1)安装软件包
[root@server3 ~]# rpm -ivh moosefs-chunkserver-3.0.103-1.rhsystemd.x86_64.rpm
warning: moosefs-chunkserver-3.0.103-1.rhsystemd.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID cf82adba: NOKEY
Preparing... (1################################# [100%]
Updating / installing...
1:moosefs-chunkserver-3.0.103-1.rhs ( ################################# [100%]
(2)创建挂载目录
[root@server3 ~]# mkdir /mnt/chunk2
(3)修改所有人所有组
[root@server3 ~]# chown mfs.mfs /mnt/chunk2/
(4)添加地址解析
[root@server3 ~]# vim /etc/hosts
(5)编辑配置文件,开启服务
[root@server3 ~]# vim /etc/mfs/mfshdd.cfg
[root@server3 ~]# systemctl start moosefs-chunkserver
(6)浏览器中可以查看到
注意:当前节点没有添加磁盘划分分区,默认是挂载到/下
4.物理机作为客户端client节点
(1)安装软件包
[root@foundation19 ~]# cd 3.0.103/
[root@foundation19 3.0.103]# ls
[root@foundation19 3.0.103]# yum install -y moosefs-client-3.0.103-1.rhsystemd.x86_64.rpm
(2)创建挂载目录,编辑配置文件
[root@foundation19 3.0.103]# mkdir /mnt/mfs
[root@foundation19 3.0.103]# vim /etc/mfs/mfsmount.cfg
(3)添加地址解析
[root@foundation19 3.0.103]# vim /etc/hosts
(4)挂载
[root@foundation19 3.0.103]# mfsmount
[root@foundation19 3.0.103]# df
-
默认是64块
减小寻址时间 -
整个分布式文件系统的元数据都在master节点上
-
对于master来说
内存大小决定了可存放的文件数量 -
当master节点挂掉之后,千万不要df
二、离散存储
1.在客户机的挂载目录下新建两个目录,查看数据存储服务器的个数(默认有几个chunk节点,就备份几份)
[root@foundation19 ~]# cd /mnt/mfs
[root@foundation19 mfs]# ls
[root@foundation19 mfs]# mkdir dir1
[root@foundation19 mfs]# mkdir dir2
[root@foundation19 mfs]# ls
dir1 dir2
[root@foundation19 mfs]# mfsgetgoal dir1
dir1: 2
[root@foundation19 mfs]# mfsgetgoal dir2
dir2: 2
2.更改dir1的存储服务器的个数,再次查看
[root@foundation19 mfs]# mfssetgoal -r 1 dir1
dir1:
inodes with goal changed: 1
inodes with goal not changed: 0
inodes with permission denied: 0
[root@foundation19 mfs]#
[root@foundation19 mfs]# mfsgetgoal dir1
dir1: 1
[root@foundation19 mfs]# mfsgetgoal dir2
dir2: 2
3.复制/etc/passwd文件到dir1目录下,查看信息 ,他在server2上存储
[root@foundation19 mfs]# cp /etc/passwd dir1
[root@foundation19 mfs]# cd dir1
[root@foundation19 dir1]# mfsfileinfo passwd
passwd:
chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
copy 1: 172.25.19.2:9422 (status:VALID)
4.将/etc/fstab文件复制到dir2下,查看信息,他备份了两份
[root@foundation19 dir1]# cd ../dir2
[root@foundation19 dir2]# ls
[root@foundation19 dir2]# cp /etc/fstab .
[root@foundation19 dir2]# ls
fstab
[root@foundation19 dir2]# mfsfileinfo fstab
fstab:
chunk 0: 0000000000000003_00000001 / (id:3 ver:1)
copy 1: 172.25.19.2:9422 (status:VALID)
copy 2: 172.25.19.3:9422 (status:VALID)
5.在dir1下划分一个bigfile,查看bigfile的信息,也是只备份了一份,但由于文件太大所以分成了四块备份
[root@foundation19 dir2]# cd ../dir1
[root@foundation19 dir1]# ls
passwd
[root@foundation19 dir1]# dd if=/dev/zero of=bigfile bs=1M count=200
[root@foundation19 dir1]# mfsfileinfo bigfile
[root@foundation19 dir1]# ls
bigfile passwd
6.在dir2下再划分一个bigfile2 ,查看信息,备份了两份
[root@foundation19 dir1]# cd ../dir2
[root@foundation19 dir2]# dd if=/dev/zero of=bigfile2 bs=1M count=200
[root@foundation19 dir2]# ls
bigfile2 fstab
[root@foundation19 dir2]# mfsfileinfo bigfile2
7.现在关闭server2的chunkserver服务,在客户机上查看几个文件的信息
[root@server2 ~]# systemctl stop moosefs-chunkserver
可以看到dir2中的文件只剩一份,但是dir1中的文件都无法访问,注意这个时候如果vim打开文件会卡死
[root@foundation19 dir2]# mfsfileinfo bigfile2
[root@foundation19 dir2]# cd ../dir1
[root@foundation19 dir1]# mfsfileinfo bigfile
[root@foundation19 dir1]# mfsfileinfo passwd
8.再次开启server2的chunkserver服务,客户机中查看文件信息又恢复正常
[root@server2 ~]# systemctl start moosefs-chunkserver
[root@foundation19 dir1]# mfsfileinfo bigfile
[root@foundation19 dir1]# mfsfileinfo passwd
[root@foundation19 dir1]# cd ../dir2
[root@foundation19 dir2]# mfsfileinfo bigfile2
三、master结点的开启与关闭
当master节点开启时/var/lib/mfs/metadata.mfs文件会变成.bak形式,当master节点关闭时他又会变回.mfs形式
1.切换到 metadata.mfs.back目录,可以看到的当前没有.mfs文件
[root@server1 3.0.103]# cd /var/lib/mfs
[root@server1 mfs]# ls
2.master节点使用的是单进程,将master进程kill掉
现在查看目录中的文件,发现.back文件并没有变成.mfs文件,这是因为刚刚的关闭是非正常关闭,有数据没有保存,再次启动服务的时候会出问题
[root@server1 mfs]# ps ax
[root@server1 mfs]# kill -9 11513
[root@server1 mfs]# ls
注意: 当master节点宕掉之后客户机千万不要df查看挂载情况,否则会卡死
3.开启master服务,报错
[root@server1 mfs]# mfsmaster start
按照提示添加参数,开启成功
[root@server1 mfs]# mfsmaster -a
4.正常关闭服务,查看发现没有了.bak文件
[root@server1 mfs]# mfsmaster stop
[root@server1 mfs]# ls
5.再次开启,又出现了.back文件
[root@server1 mfs]# mfsmaster start
[root@server1 mfs]# ls
四、恢复删除文件
1.客户机删除dir1下的passwd文件,查看过期时间
[root@foundation19 dir1]# ls
bigfile passwd
[root@foundation19 dir1]# rm -f passwd
[root@foundation19 dir1]# mfsgettrashtime .
.: 86400
2.创建元数据挂载目录,这个目录必须是空的,挂载目录
[root@foundation19 ~]# mkdir /mnt/mfsmeta
[root@foundation19 ~]# cd /mnt/mfsmeta/
[root@foundation19 mfsmeta]# ls
[root@foundation19 mfsmeta]# cd
[root@foundation19 ~]# mfsmount -m /mnt/mfsmeta/
mfsmaster accepted connection with parameters: read-write,restricted_ip
挂载之后df无法查看,但是mount可以查看到
[root@foundation19 ~]# df
[root@foundation19 ~]# mount
3.切换到挂载目录,查看发现有一个trash目录,这里面存放的就是删除的文件
找到passwd的位置
[root@foundation19 ~]# cd /mnt/mfsmeta/
[root@foundation19 mfsmeta]# ls
sustained trash
[root@foundation19 mfsmeta]# cd trash/
[root@foundation19 trash]# ls
[root@foundation19 trash]# ls | wc -l
4097
[root@foundation19 trash]# find -name *passwd*
./004/00000004|dir1|passwd
./005/00000005|dir1|passwd
这里有两个是因为我之前还删除过一次,我们只恢复一个即可
4.切换到005目录,将00000005|dir1|passwd复制到undel目录下
[root@foundation19 trash]# cd 005/
[root@foundation19 005]# ls
00000005|dir1|passwd undel
[root@foundation19 005]# mv 00000005\|dir1\|passwd undel/ //移动到undel目录下才会恢复
5.切换到dir1目录下查看到passwd文件已经恢复
[root@foundation19 005]# cd /mnt/mfs/dir1
[root@foundation19 dir1]# ls
bigfile passwd