linux中的mfs文件系统

MFS

1.什么是MFS文件系统:

  • MooseFS是一个具有容错性的网络分布式文件系统。它把数据分散存放在多个物理服务器上,而呈现给用户的则是一个统一的资源。

2.MooseFS文件系统结构包括一下四种角色:

  • (1)管理服务器master
    管理服务器:负责各个数据存储服务的管理文件读写调度,文件空间回收以及恢复,多节点拷贝
  • (2)元数据日志服务器:
    负责备份master服务器的变化日志文件,文件类型为changelog_ml.*.mfs,以便于在master server出现问题的时候解体器 进行工作
  • (3)数据存储服务器data server(chunk servers)
    真正存储用户数据的服务器存储文件时,首先把文件分成块,然后这些块在数据服务器chunkserver之间赋值(复制份数可以手工指定,建议设置副本数为数据服务器可以为多个,并且数据越多,可使用的“磁盘空间越大,”可靠性也越高
  • (4)客户端挂载使用client computers
    使用MFS文件系统来存储和访问的主机名称为MFS的客户端,成功挂载MFS系统以后,就可以像以前NFS一样共享这个虚拟性的存储了。

3.MFS特性:

   Free(GPL)
   通用文件系统,不需要修改上层应用就可以使用
   可以在线扩容,体系架构可伸缩性极强。
   部署简单。
   高可用,可设置任意的文件冗余程度
   可回收在指定时间内删除的文件
   提供netapp,emc,ibm等商业存储的snapshot特性
   google filesystem的一个c实现。
   提供web gui监控接口。
   提高随机读或写的效率
   提高海量小文件的读写效率

 MFS的读数据过程:
    client当需要一个数据时,首先向master server发起查询请求;
   管理服务器检索自己的数据,获取到数据所在的可用数据服务器位置ip|port|chunkid;
   管理服务器将数据服务器的地址发送给客户端;
   客户端向具体的数据服务器发起数据获取请求;
   数据服务器将数据发送给客户端;
 MFS的写数据过程:
   当客户端有数据写需求时,首先向管理服务器提供文件元数据信息请求存储地址(元数据信息如:文件名|大小|份数等);
   管理服务器根据写文件的元数据信息,到数据服务器创建新的数据块;
   数据服务器返回创建成功的消息;
   管理服务器将数据服务器的地址返回给客户端(chunkIP|port|chunkid);
   客户端向数据服务器写数据;
   数据服务器返回给客户端写成功的消息;
   客户端将此次写完成结束信号和一些信息发送到管理服务器来更新文件的长度和最后修改时间
MFS的删除文件过程:
   客户端有删除操作时,首先向Master发送删除信息;
   Master定位到相应元数据信息进行删除,并将chunk server上块的删除操作加入队列异步清理;
   响应客户端删除成功的信号
MFS修改文件内容的过程:
   客户端有修改文件内容时,首先向Master发送操作信息;
   Master申请新的块给.swp文件,
   客户端关闭文件后,会向Master发送关闭信息;
   Master会检测内容是否有更新,若有,则申请新的块存放更改后的文件,删除原有块和.swp文件块;
   若无,则直接删除.swp文件块。
MFS重命名文件的过程:
   客户端重命名文件时,会向Master发送操作信息;
   Master直接修改元数据信息中的文件名;返回重命名完成信息; 

MFS文件系统的配置:

配置主节点:

1.在server1安装master和web图形界面

  [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-master-3.0.103-1.rhsystemd.x86_64.rpm

2.做主节点解析

[root@server1 3.0.103]# vim /etc/hosts
172.25.26.1    server1 mfsmaster

3.打开服务并查看端口

[root@server1 ~]# systemctl start moosefs-master
[root@server1 mfs]# netstat -ntlp


9419 metalogger 监听的端口地址(默认是9419),和源数据日志结合。定期和master端同步数据
9420 用于chunkserver 连接的端口地址(默认是9420),通信节点
9421 用于客户端对外连接的端口地址(默认是9421)

在这里插入图片描述
4. 打开图形处理工具

[root@server1 ~]# systemctl start moosefs-cgiserv
[root@server1 ~]# netstat -ntlp

在这里插入图片描述
测试:
浏览器浏览http://172.25.26.1:9425
在这里插入图片描述

配置从节点,在sevrer2和server3中

1.安装MFS的客户端软件

[root@server2 3.0.103]# rpm -ivh moosefs-chunkserver-3.0.103-1.rhsystemd.x86_64.rpm
[root@server3 3.0.103]# rpm -ivh moosefs-chunkserver-3.0.103-1.rhsystemd.x86_64.rpm

2.添加解析

[root@server3 3.0.103]# vim /etc/hosts
172.25.26.1    server1 mfsmaster
[root@server2 3.0.103]# vim /etc/hosts
172.25.26.1    server1 mfsmaster
[root@server2 mfs]# mkdir /mnt/chunk1

3.编辑客户端的配置文件

[root@server2 ~]# vim /etc/mfs/mfshdd.cfg
最后一行添加: /mnt/chunk1               #存储位置
[root@server3 ~]# vim /etc/mfs/mfshdd.cfg
/mnt/chunk2

4.建立该目录,修改该挂载目录的所有人和所有组,这样才可以在目录中进行读写操作

[root@server3 ~]# mkdir /mnt/chunk2 
[root@server3 ~]# chown mfs.mfs /mnt/chunk2/

5.在server2中添加硬盘并格式化
在这里插入图片描述

[root@server2 ~]# mkdir /mnt/chunk1 		##创建共享目录
[root@server2 ~]# fdisk -l					##查看添加的虚拟硬盘
[root@server2 ~]# mkfs.xfs /dev/vda			##格式化硬盘
[root@server2 ~]# fdisk /dev/vda			##硬盘分区(这里为了方便,就分一个区)
[root@server2 ~]# mount /dev/vda1 /mnt/chunk1##挂载分区到共享目录上
[root@server2 ~]# chown mfs.mfs /mnt/chunk1/ ##更改目录的所在用户和所在组

6.开启服务

[root@server2 mfs]# systemctl start moosefs-chunkserver 
[root@server3 mfs]# systemctl start moosefs-chunkserver 

7.测试:浏览器测试查看server2和server3的共享分区
##注意info所在的那一行需要选择信息
在这里插入图片描述
搭建客户端(真机)
1.安装客户端软件

[root@foundation26 3.0.103]# yum install -y moosefs-client-3.0.103-1.rhsystemd.x86_64.rpm

2.编辑解析文件

解析很重要,是确定server1的master位置,而且客户端在访问其中的数据时候,是先来master端取得存储数据得元数据,再去server2或server3上取数据

[root@foundation26 ~]# vim /etc/hosts
172.25.26.1   server1 mfsmaster

3.创建在真机挂载数据的目录并编辑配置文件

[root@foundation14 ~]# mkdir /mnt/mfs
[root@foundation14 3.0.103]# vim /etc/mfs/mfsmount.cfg
/mnt/mfs
[root@foundation14 3.0.103]# mfsmount      ##客户端挂载文件系统
mfsmaster accepted connection with parameters: read-write,restricted_ip,admin ; root mapped to root:root

[root@foundation14 3.0.103]# df
Filesystem                         1K-blocks     Used Available Use% Mounted on
/dev/mapper/rhel_foundation14-root 229460512 45379428 184081084  20% /
devtmpfs                             3932872        0   3932872   0% /dev
tmpfs                                3946212      488   3945724   1% /dev/shm
tmpfs                                3946212     9088   3937124   1% /run
tmpfs                                3946212        0   3946212   0% /sys/fs/cgroup
/dev/sda1                            1038336   143396    894940  14% /boot
tmpfs                                 789244       16    789228   1% /run/user/1000
mfsmaster:9421                      35622912  2672640  32950272   8% /mnt/mfs     
^##查看已经挂载上

在浏览器测试查看注意最下面的一栏添加了物理机的ip
在这里插入图片描述
4.在挂载的目录下新建两个目录,并查看数据存储服务器文件备份份数

[root@foundation14 ~]# cd /mnt/mfs
[root@foundation14 mfs]# mkdir dir1
[root@foundation14 mfs]# mkdir dir2
[root@foundation14 mfs]# mfsgetgoal dir1/
dir1/: 2
[root@foundation14 mfs]# mfsgetgoal dir2/
dir2/: 2

5.修改dir1的文件备份份数为1(为了做实验对比)

[root@foundation14 mfs]# mfssetgoal -r 1 dir1/
dir1/:
 inodes with goal changed:                       1
 inodes with goal not changed:                   0
 inodes with permission denied:                  0
[root@foundation14 mfs]# mfsgetgoal dir1/
dir1/: 1

6.测试:
将文件存储到/mnt/mfs/dir中,并查看文件信息

[root@foundation26 mfs]# cp /etc/passwd dir1/
[root@foundation26 mfs]# cp /etc/fstab dir2/
[root@foundation26 mfs]# cd dir1/
[root@foundation26 dir1]# mfsfileinfo passwd 			##默认存储一份
passwd:
	chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
		copy 1: 172.25.26.3:9422 (status:VALID)
[root@foundation26 dir1]# cd ../dir2/
[root@foundation26 dir2]# mfsfileinfo fstab 			##默认存储两份
fstab:
	chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
		copy 1: 172.25.26.2:9422 (status:VALID)
		copy 2: 172.25.26.3:9422 (status:VALID)
[root@foundation26 dir2]# 

存储passwd的chunkserver(server3)关掉

[root@server3 3.0.103]# systemctl stop moosefs-chunkserver
[root@foundation26 dir2]# cd ..
[root@foundation26 mfs]# cd dir1/
[root@foundation26 dir1]# mfsfileinfo passwd 
passwd:
	chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
		no valid copies !!!       ##

##此时已经查看不到passwd的数据,如果此时要打开passwd文件电脑会卡住因为数据已经不在这个主机上存储

[root@foundation26 dir2]# mfsfileinfo fstab   ##对于fatab文件来说不影响,因为备份了两份
fstab:
	chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
		copy 1: 172.25.26.2:9422 (status:VALID)           ####数据存储默认变为1份
[root@server3 3.0.103]# systemctl start moosefs-chunkserver

离散存储

[root@foundation26 dir2]# cd ../dir1
[root@foundation26 dir1]# dd if=/dev/zero of=bigfile bs=1M count=100##在dir1生成一个大文件(这里默认每个节点存储的分布文件最大内存为64M)
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.409607 s, 256 MB/s
[root@foundation26 dir1]# mfsfileinfo bigfile ##这里由于一个分布文件最大为64M,所以100M的文件分成了两份存储
bigfile:
	chunk 0: 0000000000000003_00000001 / (id:3 ver:1)
		copy 1: 172.25.26.2:9422 (status:VALID)
	chunk 1: 0000000000000004_00000001 / (id:4 ver:1)
		copy 1: 172.25.26.3:9422 (status:VALID)
[root@foundation26 dir1]# cd ../dir2/
[root@foundation26 dir2]# dd if=/dev/zero of=bigfile bs=1M count=100
^C100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 3.66969 s, 28.6 MB/s
[root@foundation26 dir2]# mfsfileinfo bigfile ##由于dir2默认备份数为2,所以100M的文件分成了四份备份
bigfile:
	chunk 0: 0000000000000005_00000001 / (id:5 ver:1)
		copy 1: 172.25.26.2:9422 (status:VALID)
		copy 2: 172.25.26.3:9422 (status:VALID)
	chunk 1: 0000000000000006_00000001 / (id:6 ver:1)
		copy 1: 172.25.26.2:9422 (status:VALID)
		copy 2: 172.25.26.3:9422 (status:VALID)
[root@foundation26 dir2]# 

文件恢复

[root@foundation26 dir1]# ls
bigfile  passwd
[root@foundation26 dir1]# rm -fr passwd 
[root@foundation26 dir1]# mkdir /mnt/mfsmeta
[root@foundation26 dir1]# mfsmount -m /mnt/mfsmeta/		##挂载源数据到目录上	
mfsmaster accepted connection with parameters: read-write,restricted_ip
[root@foundation36 dir2]# mount							##这里由于df -h无法查看效果,用mount查看
mfsmaster:9421 on /mnt/mfsmsta type fuse.mfsmeta (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)
[root@foundation26 dir1]# cd /mnt/mfsmeta/
[root@foundation26 mfsmeta]# ls
sustained  trash
[root@foundation26 mfsmeta]# cd trash/					##切换到源数据的回收站
[root@foundation26 trash]# find -name *passwd*			##查找删除的文件所在目录
./004/00000004|dir1|passwd
[root@foundation26 trash]# mv ./004/00000004\|dir1\|passwd undel/		##还原删除的文件
[root@foundation26 trash]# ls /mnt/mfs/dir1/
bigfile  passwd

mfs服务的开启与关闭
1.正常开启与关闭

[root@server1 ~]# systemctl stop moosefs-master
[root@server1 ~]# systemctl start moosefs-master

2.kill进程后开启mfs的方法

[root@server1 ~]# ps ax
11838 ?        S<     0:00 /usr/sbin/mfsmaster start
[root@server1 ~]# kill -9 11838

此时用systemctl开启进程失败
[root@server1 ~]# systemctl start moosefs-master
Job for moosefs-master.service failed because the control process exited with error code. See "systemctl status moosefs-master.service" and "journalctl -xe" for details.

查看状态,使用mfsmaster -a 可以成功开启

[root@server1 ~]# mfsmaster start
can't find metadata.mfs - try using option '-a'
[root@server1 ~]# mfsmaster -a           ##开启成功

若还想用原来的systemctl的方式,则需要修改配置文件

[root@server1 ~]# vim /usr/lib/systemd/system/moosefs-master.service
8 ExecStart=/usr/sbin/mfsmaster -a

[root@server1 ~]# ps ax
11869 ?        S<     0:30 mfsmaster -a
[root@server1 ~]# kill -9 11869
[root@server1 ~]# systemctl start moosefs-master    ##测试开启成功

猜你喜欢

转载自blog.csdn.net/qwqq233/article/details/90446204