什么是MFS分布式文件系统
MooseFS是一个具有容错性的网络分布式文件系统。它把数据分散存放在多个物理服务器上,而呈现给用户的则是一个统一的资源。
常规特征:
对标准的文件操作来说,mfs用起来跟其它的类unix系统类似:
1、分层次的结构(目录树)
2、存储POSIX文件属性(权限、最后访问和修改时间)
3、支持特殊文件(块和字符设备、管道以及套接字)
4、符号连接和硬连接
5、对文件系统的访问可以通过IP地址和(或者)密码进行限制
独有特征:
1、高可靠(数据的多个拷贝被存储在不同的计算机上)
2、通过附加新的计算机或者硬盘可以实现容量的动态扩展
3、删除的文件可以根据一个可配置的时间周期进行保留(一个文件系统级别的回收站)
4、不受访问和写入影响的文件连贯快照
体系机构:
1、管理服务器(master server)
一台管理整个文件系统的独立主机,存储着每个文件的元数据(文件的大小、属性、位置信息,包括所有非常规文件的所有信息,例如目录、套接字、管道以及设备文件)
2、数据服务器群(chunk servers)
任意数目的商用服务器,用来存储文件数据并在彼此之间同步(如果某个文件有超过一个备份的话)
3、元数据备份服务器(metalogger server)
任意数量的服务器,用来存储元数据变化日志并周期性下载主要元数据文件,以便用于管理服务器意外停止时好接替其位置。
4、访问mfs的客户端
任意数量的主机,可以通过mfsmount进程与管理服务器(接收和更改元数据)和数据服务器(改变实际文件数据)进行交流。
MFS文件系统的增删改查过程
MFS的读数据过程:
client当需要一个数据时,首先向master server发起查询请求;管理服务器检索自己的数据,获取到数据所在的可用数据服务器位置ip|port|chunkid;管理服务器将数据服务器的地址发送给客户端;客户端向具体的数据服务器发起数据获取请求;
MFS的写数据过程:
当客户端有数据写需求时,首先向管理服务器提供文件元数据信息请求存储地址(元数据信息如:文件名|大小|份数等);
管理服务器根据写文件的元数据信息,到数据服务器创建新的数据块;
数据服务器返回创建成功的消息;
管理服务器将数据服务器的地址返回给客户端(chunkIP|port|chunkid);
客户端向数据服务器写数据;
数据服务器返回给客户端写成功的消息;
MFS的删除过程:
客户端有删除操作时,首先向Master发送删除信息;
Master定位到相应元数据信息进行删除,并将chunk server上块的删除操作加入队列异步清理;
响应客户端删除成功的信号
MFS修改文件过程:
客户端有修改文件内容时,首先向Master发送操作信息;
Master申请新的块给.swp文件,
客户端关闭文件后,会向Master发送关闭信息;
Master会检测内容是否有更新,若有,则申请新的块存放更改后的文件,删除原有块和.swp文件块;
MFS文件系统的配置
实验环境:
我们在这里为了实验,我们需要大概三台虚拟机
server1作为主节点,server2/3作为两个chunk server,让我们的物理机作client server
配置master主节点
1.获取Moosefs所需要的安装包
2.安装mfsmaster和web图形化界面
3.作主节点的解析
为了后面方便一点,我们在所有的主机上全部做节点的解析,包括chunkserver和clientserver
4.开启服务,查看端口
9419:metalogger监听的端口,默认的,和源数据日志结合。定期和master主机同步数据
9420:用于chunkserver连接的默认端口地址
9421:用于clientserver连接的默认端口
5.打开图形化处理工具
其中9425就是我们的图形化的端口,接下来我们用浏览器去打开它
172.25.66.1:9425
从节点,即chunk server的配置
1.安装mfs chunk server
[root@server2 ~]# rpm -ivh moosefs-chunkserver-3.0.103-1.rhsystemd.x86_64.rpm
[root@server3 ~]# rpm -ivh moosefs-chunkserver-3.0.103-1.rhsystemd.x86_64.rpm
2.添加master的解析
由于我们在之前做了,这里就不用做了
3.编辑chunkserver的配置文件
[root@server2 ~]# vim /etc/mfs/mfshdd.cfg
最后一行添加: /mnt/chunk1 #存储位置
[root@server3 ~]# vim /etc/mfs/mfshdd.cfg
/mnt/chunk2
4.建立刚才的存储目录,并且修改所有人和所有组,因为mfs默认的用户是mfs,而非root用户
[root@server2 mfs]# mkdir /mnt/chunk1
[root@server2 mfs]# chown mfs.mfs /mnt/chunk1/
[root@server3 ~]# mkdir /mnt/chunk2
[root@server3 ~]# chown mfs.mfs /mnt/chunk2/
5.开启服务
[root@server2 mfs]# systemctl start moosefs-chunkserver
[root@server3 ~]# systemctl start moosefs-chunkserver
client server(我们这里是物理机)的配置
1.安装client软件
2.编辑解析文件
3.创建客户端挂在数据目录,并配置配置文件
[root@foundation66 3.0.103]# mkdir /mnt/mfs
[root@foundation66 3.0.103]# vim /etc/mfs/mfsmount.cfg
[root@foundation66 3.0.103]# tail -n 1 /etc/mfs/mfsmount.cfg
/mnt/mfs 挂载目录
[root@foundation66 3.0.103]# mfsmount 客户端挂载文件系统
mfsmaster accepted connection with parameters: read-write,restricted_ip,admin ; root mapped to root:root
[root@foundation66 3.0.103]#
df查看挂载
4.在挂载的目录/mnt/mfs下建立两个子目录并查看数据存储服务器
[root@foundation66 3.0.103]# cd /mnt/mfs/
[root@foundation66 mfs]# mkdir dir1
[root@foundation66 mfs]# mkdir dir2
[root@foundation66 mfs]# mfsgetgoal dir1 查看dir1的文件存储
dir1: 2
[root@foundation66 mfs]# mfsgetgoal dir2
dir2: 2
5.修改dir1的文件备份数为1,与dir2作出对比
[root@foundation66 mfs]# mfssetgoal -r 1 dir1
dir1:
inodes with goal changed: 1
inodes with goal not changed: 0
inodes with permission denied: 0
[root@foundation66 mfs]# mfsgetgoal dir1
dir1: 1
6。进行测试
我们尝试放置两个文件到这两个目录中,看其文件存储状态
我们尝试将server3宕掉,查看其文件
[root@server3 ~]# systemctl stop moosefs-chunkserver
[root@foundation66 dir2]# mfsfileinfo passwd
passwd:
chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
copy 1: 172.25.66.2:9422 (status:VALID) 我们可以发现2只有在一个节点上存储
[root@foundation66 dir2]# cd ../dir1
[root@foundation66 dir1]# mfsfileinfo passwd
passwd:
chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
no valid copies !!! 单个的则无存储,
切忌此时不能打开passwd查看,负责会一直卡住,这是因为我们的存储服务器已经挂掉,那么我们肯定是无法从客户端的挂载上看到其信息的,但是当我们重新打开server3的服务后就可以了,因为我们的master主机有其源文件
[root@server3 ~]# systemctl start moosefs-chunkserver
离散存储
我们的mfs文件系统的存储是以单元格的方式存储的,每个单元格的存储空间都是一定的,那么当我们的文件大小超过单元格大小后就需要多个单元格存储了
[root@foundation66 dir1]# pwd
/mnt/mfs/dir1
[root@foundation66 dir1]# dd if=/dev/zero of=file1 bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.152149 s, 689 MB/s
[root@foundation66 dir1]# mfsfileinfo file1
file1:
chunk 0: 0000000000000003_00000001 / (id:3 ver:1)
copy 1: 172.25.66.3:9422 (status:VALID)
chunk 1: 0000000000000004_00000001 / (id:4 ver:1)
copy 1: 172.25.66.2:9422 (status:VALID)
[root@foundation66 dir1]# cd ../dir2
[root@foundation66 dir2]# dd if=/dev/zero of=file2 bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.296364 s, 354 MB/s
[root@foundation66 dir2]# mfsfileinfo file2
file2:
chunk 0: 0000000000000005_00000001 / (id:5 ver:1)
copy 1: 172.25.66.2:9422 (status:VALID)
copy 2: 172.25.66.3:9422 (status:VALID)
chunk 1: 0000000000000006_00000001 / (id:6 ver:1)
copy 1: 172.25.66.2:9422 (status:VALID)
copy 2: 172.25.66.3:9422 (status:VALID)
数据恢复
我们的mfs系统当用户删除文件后,会将文件放至垃圾箱,垃圾箱有一个清除时间,所以在这个清除时间内的文件是可以恢复的,这个时间可以用命令mfsgettrashtime查看,单位为秒
实现恢复
[root@foundation66 dir2]# rm -fr passwd
[root@foundation66 dir2]# mkdir /mnt/mfsmeta
[root@foundation66 dir2]# mfsmount -m /mnt/mfsmeta/
mfsmaster accepted connection with parameters: read-write,restricted_ip
[root@foundation66 dir2]# cd /mnt/mfsmeta/
[root@foundation66 mfsmeta]# ls
sustained trash
[root@foundation66 mfsmeta]# cd trash/
[root@foundation66 trash]# find -name *passwd*
./005/00000005|dir2|passwd
[root@foundation66 trash]# cd 005/
[root@foundation66 005]# ls
00000005|dir2|passwd undel
[root@foundation66 005]# mv 00000005\|dir2\|passwd undel/
[root@foundation66 005]# cd /mnt/mfs
mfs/ mfsmeta/
[root@foundation66 005]# cd /mnt/mfs/dir2
[root@foundation66 dir2]# ls
file2 passwd
[root@foundation66 dir2]#
mfs master服务的开启和关闭
正常关闭;同其他服务相同,systemctl start/stop即可
异常关闭:
我们发现异常关闭后就无法在开启了,此时我们就只有手动mfsmaster -a脚本开启
那么如果我们还想用之前的方启动,我们可以通过修改systemd的配置文件来修改
我们可以发现这样就可以启用了,其实我们做的也不过是将脚本启动写到了system里而已