Linux运维之MFS文件系统

78 篇文章 3 订阅
70 篇文章 2 订阅

Linux运维之MFS文件系统

  • 什么是MFS

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

对标准的文件操作来说,mfs用起来跟其它的类unix系统类似:
1、分层次的结构(目录树)
2、存储POSIX文件属性(权限、最后访问和修改时间)
3、支持特殊文件(块和字符设备、管道以及套接字)
4、符号连接和硬连接
5、对文件系统的访问可以通过IP地址和(或者)密码进行限制

独有特征:
1、高可靠(数据的多个拷贝被存储在不同的计算机上)
2、通过附加新的计算机或者硬盘可以实现容量的动态扩展
3、删除的文件可以根据一个可配置的时间周期进行保留(一个文件系统级别的回收站)
4、不受访问和写入影响的文件连贯快照

MFS读过程:

客户端向Master发送读请求
Master去缓存的数据库(非MySQL)中搜索客户端所需数据的位置,并告知客户端(Chunk Server IP、Chunk编号)
客户端去指定Chunk Server的对应Chunk编号读取数据
客户端通知Master读取完毕

MFS写过程:

客户端向Master发送写请求
Master通知Chunk Server(谁空闲,如空闲新建Chunk编号),找到后将知道的Chunk Server IP和编号告知客户端
客户端向指定IP和编号存储数据
客户端告知Master写入完毕
Master通知Metalogger有新数据写入(Matelogger纪录新增加文件位置和对应Chunk Server),日志记录完毕后,连接关闭

MooseFS系统特点:
1.轻量 易配置 易维护
2.开发活跃 社区也比较活跃 资料丰富
3.括容成本低 支持在线扩容 不影响业务
4.以文件系统的方式展示
5.磁盘利用率较高
6.可设置删除文件的空间回收时间,避免误删文件丢失及恢复不及时影响业务
7.系统负载,即数据读写分配到所有的服务器上
8.可以设置文件备份的副本数量

数据存储方式:
文件以chunk大小存储,每chunk最大为64M。小于64M的,该chunk的大小即为该文件大小,超过64M的文件将被均分,每一份(chunk)的大小以不超过64M为原则;文件可以有多份copy,即除原始文件以外,该文件还存储的份数。当goal为1时,表示只有一份copy,这份copy会被随机存到一台chunkserver上。当goal的数大于1时,每一份copy会被分别保存到其它chunkserver上。goal的大小不要超过chunkserver的数量,否则多出的copy,不会有chunkserver去存,goal设置再多实际上也就没有意义的。copy的份数,一般设为大于1份,这样如果有一台chunkserver坏掉后,至少还有一份copy,当这台又被加进来后,会将失去的那份copy补回来,始终保持原有的copy数。而如果goal设为1,那么当存储该copy的chunkserver坏掉,之后又重新加入回来,copy数将始终是0,不会恢复到之前的1个copy

chunkserver上的剩余存储空间要大于1GB,新的数据才会被允许写入,否则,你会看到No space left的提示

多个chunker并不影响写的速度,但是能加快读的速度,在原来的基础上增加一个chunker时,数据会自动同步到新增的chunker上以达到数据的平衡和均衡。

  • mfs分布式文件系统的部署安装

实验环境准备:
3台虚拟机实验

##获取mfs安装包,可在官网下载
##server1上做:
##安装mfs所需包

yum install -y moosefs-master-3.0.105-1.rhsystemd.x86_64.rpm
               moosefs-cli-3.0.105-1.rhsystemd.x86_64.rpm
               moosefs-cgi-3.0.105-1.rhsystemd.x86_64.rpm
               moosefs-cgiserv-3.0.105-1.rhsystemd.x86_64.rpm

安装完成后会生成mfs用户

##做本地解析(后面所有节点都要做)

vim /etc/hosts
172.25.0.1	server1 mfsmaster

#这里叫mfsmaster是因为配置文件/etc/mfs/mfsmaster.cfg里面是mfsmaster

##启动master

systemctl start moosefs-master

查看端口发现9419 9420 9421三个端口打开
9419:metalogger监听的端口,默认的,和源数据日志结合。定期和master主机同步数据
9420:用于chunkserver连接的默认端口地址
9421:用于clientserver连接的默认端口

##启动图形

systemctl start moosefs-cgiserv

打开了9425端口

##查看
http://172.25.0.1:9425

点击server的+号,info的-号,可以看到当前没有chunkserver加入,因为还没配置

  • 部署chunkserver

##server2上做:
##安装:

rpm -ivh moosefs-chunkserver-3.0.105-1.rhsystemd.x86_64.rpm

##做解析:

vim /etc/hosts
172.25.0.1	server1 mfsmaster

##添加一块磁盘存放数据: /dev/vdb

##分一个区,并格式化为xfs ##分一个区是因为分区表就算破坏了,也容易恢复

mkfs.xfs /dev/vdb1

##创建挂载点

mkdir /mnt/chunk1

##挂载

mount /dev/vdb1 /mnt/chunk1

##拷贝文件测试

cp /etc/passwd /mnt/chunk1/

##修改目录权限

chown mfs.mfs /mnt/chunk1

##修改配置文件

vim /etc/mfs/mfshdd.cfg
最后一行加上:
/mnt/chunk1

##做解析

vim /etc/hosts
172.25.0.1	server1 mfsmaster

##开启服务

systemctl start moosefs-chunkserver

可以看到开启了9422端口

图形化也可以看到server2加入了server选项

##部署server3,同server2的部署
##安装软件
##做解析
##server3不添加磁盘

#建立目录

mkdir /mnt/chunk2

#修改配置文件

vim /etc/mfs/mfshdd.cfg
最后一行加上:
/mnt/chunk2

##做解析

vim /etc/hosts
172.25.0.1	server1 mfsmaster

##开启服务

systemctl start moosefs-chunkserver

#此处有报错

Jun 12 22:50:09 server3 mfschunkserver: hdd space manager: can't create lock file '/mnt/chunk2/.lock': EACCES (Permission denied)

#解决办法

chown mfs.mfs /mnt/chunk2

图形化也可以看到server3也加入了server选项

  • 配置客户端(物理机做客户端)

##安装客户端

rpm -ivh moosefs-client-3.0.105-1.rhsystemd.x86_64.rpm

##解析

172.25.0.1  server1  server1.example.org  bbs.westos.org  mfsmaster

##创建挂载点

mkdir /mnt/mfs

##编辑配置文件

vim /etc/mfs/mfsmount.cfg
最后一行加上:
/mnt/mfs

##挂载

[root@foundation0 ~]# mfsmount

##查看

[root@foundation0 ~]# df

mfsmaster:9421  38771712   1665280  37106432   5% /mnt/mfs

##建立目录测试

mkdir /mnt/mfs/dir1
mkdir /mnt/mfs/dir2

##查看信息

[root@foundation0 mfs]# mfsgetgoal dir1/
dir1/: 2
[root@foundation0 mfs]# mfsgetgoal dir2/
dir2/: 2		##可以看到两个目录都备份了2份

##改变备份份数

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

##拷贝文件测试

cp /etc/passwd /mnt/mfs/dir1
cp /etc/group /mnt/mfs/dir2

##查看

[root@foundation0 dir1]# mfsfileinfo passwd 
passwd:
	chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
		copy 1: 172.25.0.2:9422 (status:VALID)

[root@foundation0 dir2]# mfsfileinfo group 
group:
	chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
		copy 1: 172.25.0.2:9422 (status:VALID)
		copy 2: 172.25.0.3:9422 (status:VALID)

可以看到passwd备份了一份,在server3上
表示dir1目录中备份一份,dir2两份
###########################################################

tree /mnt/chunk2/
发现客户端上能正常查看到数据。而存储服务器上只能看到文件碎片

###########################################################

##关闭server2测试

[root@server2 ~]# systemctl stop moosefs-chunkserver

[root@foundation0 dir1]# mfsfileinfo passwd 
passwd:
	chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
		no valid copies !!!

[root@foundation0 dir2]# mfsfileinfo group 
group:
	chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
		copy 1: 172.25.0.3:9422 (status:VALID)

dir2目录中还有一份,dir1中没有,这时打开passwd文件虚拟机就会卡住,因为数据不在本机了

  • 客户端离散存储测试

##默认情况下,chunkserver对数据的备份是按块备份的,每块50MB

##在dir1目录

[root@foundation0 dir1]# dd if=/dev/zero of=bigfile bs=1M count=200

##查看

[root@foundation0 dir1]# mfsfileinfo bigfile 
bigfile:
	chunk 0: 0000000000000003_00000001 / (id:3 ver:1)
		copy 1: 172.25.0.2:9422 (status:VALID)
	chunk 1: 0000000000000004_00000001 / (id:4 ver:1)
		copy 1: 172.25.0.3:9422 (status:VALID)
	chunk 2: 0000000000000005_00000001 / (id:5 ver:1)
		copy 1: 172.25.0.2:9422 (status:VALID)
	chunk 3: 0000000000000006_00000001 / (id:6 ver:1)
		copy 1: 172.25.0.3:9422 (status:VALID)

看到文件分为4份,在server2和server3上交叉存储

##在dir2目录

[root@foundation0 dir2]# dd if=/dev/zero of=bigfile1 bs=1M count=200

##查看

[root@foundation0 dir2]# mfsfileinfo bigfile1 
bigfile1:
	chunk 0: 0000000000000007_00000001 / (id:7 ver:1)
		copy 1: 172.25.0.2:9422 (status:VALID)
		copy 2: 172.25.0.3:9422 (status:VALID)
	chunk 1: 0000000000000008_00000001 / (id:8 ver:1)
		copy 1: 172.25.0.2:9422 (status:VALID)
		copy 2: 172.25.0.3:9422 (status:VALID)
	chunk 2: 0000000000000009_00000001 / (id:9 ver:1)
		copy 1: 172.25.0.2:9422 (status:VALID)
		copy 2: 172.25.0.3:9422 (status:VALID)
	chunk 3: 000000000000000A_00000001 / (id:10 ver:1)
		copy 1: 172.25.0.2:9422 (status:VALID)
		copy 2: 172.25.0.3:9422 (status:VALID)

可以看到在每个节点都备份了2份

##关闭server2,dir1中的文件都不可用

[root@server2 ~]# systemctl stop moosefs-chunkserver.service

##查看
[r

oot@foundation0 dir1]# mfsfileinfo bigfile 
bigfile:
	chunk 0: 0000000000000003_00000001 / (id:3 ver:1)
		no valid copies !!!
	chunk 1: 0000000000000004_00000001 / (id:4 ver:1)
		no valid copies !!!
	chunk 2: 0000000000000005_00000001 / (id:5 ver:1)
		no valid copies !!!
	chunk 3: 0000000000000006_00000001 / (id:6 ver:1)
		no valid copies !!!

[root@foundation0 dir2]# mfsfileinfo bigfile1 
bigfile1:
	chunk 0: 0000000000000007_00000001 / (id:7 ver:1)
		copy 1: 172.25.0.3:9422 (status:VALID)
	chunk 1: 0000000000000008_00000001 / (id:8 ver:1)
		copy 1: 172.25.0.3:9422 (status:VALID)
	chunk 2: 0000000000000009_00000001 / (id:9 ver:1)
		copy 1: 172.25.0.3:9422 (status:VALID)
	chunk 3: 000000000000000A_00000001 / (id:10 ver:1)
		copy 1: 172.25.0.3:9422 (status:VALID)

只有server3上的可用

  • moose-master的开启和关闭

##开启
master开启时,默认会在/var/lib/mfs目录中生成metadata.mfs.back文件

##关闭
master关闭时,metadata.mfs.back文件会变为metadata.mfs

做下面实验前,最好先卸载物理机的挂载,关闭chunkserver

##但是如果master异常关闭,就不能通过systemctl start moosefs-master命令来启动

 [root@server1 ~]# ps ax | grep mfsmaster
     1831 ?        S<     0:00 /usr/sbin/mfsmaster start
     1832 ?        S<     0:00 mfsmaster (data writer)
     1860 pts/0    S+     0:00 grep --color=auto mfsmaster

[root@server1 ~]# kill -9 1831

[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.

查看日志发现找不到metadata.mfs

Jun  8 15:09:41 server1 mfsmaster: can't find metadata.mfs - try using option '-a'

##使用命令行也不能开启

[root@server1 ~]# mfsmaster start
open files limit has been set to: 16384
working directory: /var/lib/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

##加上-a参数

[root@server1 ~]# mfsmaster start -a

成功

##要使用systemd方式,可以对启动脚本做修改

[root@server1 ~]# vim /usr/lib/systemd/system/moosefs-master.service

ExecStart=/usr/sbin/mfsmaster start -a

##再次尝试

[root@server1 ~]# systemctl daemon-reload
[root@server1 ~]# systemctl start moosefs-master  #注意:此启动方式不要和前一个 mfsmaster start -a混淆

正常

  • mfs数据恢复

##删除一个文件

[root@foundation0 dir1]# rm -fr passwd

##查看文件在垃圾箱存在时间

[root@foundation0 dir1]# mfsgettrashtime /mnt/mfs/dir1/
/mnt/mfs/dir1/: 86400		##86400s,也就是1天

##创建数据恢复的目录

[root@foundation0 ~]# mkdir /mnt/mfsmeta

##挂载目录

[root@foundation0 ~]# mfsmount -m /mnt/mfsmeta/
mfsmaster accepted connection with parameters: read-write,restricted_ip

‘这个挂载后df命令看不到,mount命令可以看到’ mount -l

##目录里会有两个子目录

[root@foundation0 mfsmeta]# ls
sustained  trash

删除的数据在trash目录里

##查找passwd文件

[root@foundation0 trash]# find -name *passwd*
./004/00000004|dir1|passwd

##恢复文件

[root@foundation0 trash]# cd 004/
[root@foundation0 004]# ls
00000004|dir1|passwd  undel
[root@foundation0 004]# 
[root@foundation0 004]# mv 00000004\|dir1\|passwd undel/

##查看

[root@foundation0 dir1]# ls
bigfile  passwd
[root@foundation0 dir1]# pwd
/mnt/mfs/dir1

成功恢复

END

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值