MFS
什么是MFS文件系统:
MooseFS是一个具有容错性的网络分布式文件系统。它把数据分散存放在多个物理服务器上,而呈现给用户的则是一个统一的资源。
MooseFS文件系统结构包括一下四种角色:
管理服务器master
管理服务器:负责各个数据存储服务的管理文件读写调度,文件空间回收以及恢复,多节点拷贝
元数据日志服务器:
负责备份master服务器的变化日志文件,文件类型为changelog_ml.*.mfs,以便于在master server出现问题的时候解体器 进行工作
数据存储服务器data server(chunk servers)
真正存储用户数据的服务器存储文件时,首先把文件分成块,然后这些块在数据服务器chunkserver之间赋值(复制份数可以手工指定,建议设置副本数为数据服务器可以为多个,并且数据越多,可使用的“磁盘空间越大,”可靠性也越高
客户端挂载使用client computers
使用MFS文件系统来存储和访问的主机名称为MFS的客户端,成功挂载MFS系统以后,就可以像以前NFS一样共享这个虚拟性的存储了。
MFS文件系统的配置:
一、配置主节点
1、server1安装master和web图形界面
[root@server1 3.0.103]# yum install -y moosefs-master-3.0.103-1.rhsystemd.x86_64.rpm moosefs-cli-3.0.103-1.rhsystemd.x86_64.rpm moosefs-cgiserv-3.0.103-1.rhsystemd.x86_64.rpm moosefs-cgi-3.0.103-1.rhsystemd.x86_64.rpm
2、打开服务并查看端口
[root@server1 3.0.103]#systemctl start moosefs-moster
Failed to start moosefs-moster.service: Unit not found.
[root@server1 3.0.103]#systemctl start moosefs-master
[root@server1 3.0.103netstat -antlp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:9419 0.0.0.0:* LISTEN 900/mfsmaster
tcp 0 0 0.0.0.0:9420 0.0.0.0:* LISTEN 900/mfsmaster
tcp 0 0 0.0.0.0:9421 0.0.0.0:* LISTEN 900/mfsmaster
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 531/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 713/master
tcp 0 0 172.25.11.1:22 172.25.11.250:36402 ESTABLISHED 826/sshd: root@pts/
tcp6 0 0 :::22 :::* LISTEN 531/sshd
tcp6 0 0 ::1:25 :::* LISTEN 713/master
- 9419 metalogger 监听的端口地址(默认是9419),和源数据日志结合。定期和master端同步数据
- 9420 用于chunkserver 连接的端口地址(默认是9420),通信节点
- 9421 用于客户端对外连接的端口地址(默认是9421)
3、做主节点解析
[root@server1 3.0.103]# vim /etc/hosts
172.25.11.1 server1 mfsmaster
4、打开图形处理工具
systemctl start moosefs-cgiserv
二、chunk节点配置
1、安装MFS的客户端软件
[root@server1 3.0.103]# scp moosefs-chunkserver-3.0.103-1.rhsystemd.x86_64.rpm root@172.25.11.2:/root
[root@server1 3.0.103]# scp moosefs-chunkserver-3.0.103-1.rhsystemd.x86_64.rpm root@172.25.11.3:/root
[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.11.1 server1 mfsmaster
[root@server2 3.0.103]# vim /etc/hosts
172.25.11.1 server1 mfsmaster
3、编辑客户端的配置文件
[root@server2 ~]# vim /etc/mfs/mfshdd.cfg
最后一行添加: /mnt/chunk1 #存储位置
[root@server3 ~]# vim /etc/mfs/mfshdd.cfg
/mnt/chunk2
4 、建立该目录,修改该挂载目录的所有人和所有组,这样才可以在目录中进行读写操作
root@server2 ~]# mkdir /mnt/chunk1
[root@server2 ~]# 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 mfs]# systemctl start moosefs-chunkserver
三、搭建客户端
1、安装客户端软件
yum install -y moosefs-client-3.0.103-1.rhsystemd.x86_64.rpm
2、编辑解析文件
[root@foundation79 ~]# vim /etc/hosts
172.25.79.1 server1 mfsmaster
3、创建在真机挂载数据的目录并编辑配置文件
[root@foundation11 3.0.103]# mfsmount
mfsmaster accepted connection with parameters: read-write,restricted_ip,admin ; root mapped to root:root
[root@foundation11 3.0.103]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 228287584 72557488 155730096 32% /
devtmpfs 4012764 0 4012764 0% /dev
tmpfs 4027744 156 4027588 1% /dev/shm
tmpfs 4027744 9276 4018468 1% /run
tmpfs 4027744 0 4027744 0% /sys/fs/cgroup
tmpfs 805552 12 805540 1% /run/user/1000
/dev/loop0 3704296 3704296 0 100% /var/www/html/rhel7.3
mfsmaster:9421 41920512 590464 41330048 2% /mnt/mfs
4、在客户端挂在目录(/mnt/mfs)下创建两个目录用来读写数据,因为有两个chunk,所以建立目录后默认有来两个存储端
[root@foundation11 mfs]# mkdir dir1 dir2
[root@foundation11 mfs]# ls
dir1 dir2
[root@foundation11 mfs]# mfsgetgoal dir1/
dir1/: 2
[root@foundation11 mfs]# mfsgetgoal dir2/
dir2/: 2
5、将目录dir1的存储后端改为一个(存一份,具体存在那个chunk由master决定)
[root@foundation11 mfs]# mfssetgoal -r 1 dir1/
dir1/:
inodes with goal changed: 1
inodes with goal not changed: 0
inodes with permission denied: 0
[root@foundation11 mfs]# mfsgetgoal dir1/
dir1/: 1
6、在目录dir1中写入数据
[root@foundation11 mfs]# cd dir1/
[root@foundation11 dir1]# cp /etc/passwd .
[root@foundation11 dir1]# ls
passwd
[root@foundation11 dir1]# mfsfileinfo passwd
passwd:
chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
copy 1: 172.25.11.3:9422 (status:VALID) ##数据在chunk2(172.25.11.3)上存储了一份
7、给目录dir2中写入数据
[root@foundation11 mfs]# cd dir2/
[root@foundation11 dir2]# cp /etc/passwd .
[root@foundation11 dir2]# mfsfileinfo passwd
passwd:
chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
copy 1: 172.25.11.2:9422 (status:VALID) ##数据在chunk1和chunk2都备份了一份
copy 2: 172.25.11.3:9422 (status:VALID)
8、由于文件过小,系统默认一次备份大小为60M,所以现在写入大于60M的数据在dir1中
[root@foundation11 dir1]# dd if=/dev/zero of=bigfile bs=1M count=200
200+0 records in
200+0 records out
209715200 bytes (210 MB) copied, 0.393101 s, 533 MB/s
[root@foundation11 dir1]# ls
bigfile passwd
[root@foundation11 dir1]# mfsfileinfo bigfile
bigfile:
chunk 0: 0000000000000003_00000001 / (id:3 ver:1)
copy 1: 172.25.11.2:9422 (status:VALID)
chunk 1: 0000000000000004_00000001 / (id:4 ver:1)
copy 1: 172.25.11.3:9422 (status:VALID)
chunk 2: 0000000000000005_00000001 / (id:5 ver:1)
copy 1: 172.25.11.2:9422 (status:VALID)
chunk 3: 0000000000000006_00000001 / (id:6 ver:1)
copy 1: 172.25.11.3:9422 (status:VALID) ##由于截取的文件大小为200M,所以存储是分成了4段存储,由于dir1只有一个chunk备份数据,所以每一段只备份了一份
相同的对于dir2而言
[root@foundation11 dir2]# dd if=/dev/zero of=bigfile1 bs=1M count=200
200+0 records in
200+0 records out
209715200 bytes (210 MB) copied, 0.760426 s, 276 MB/s
[root@foundation11 dir2]# ls
bigfile1 passwd
[root@foundation11 dir2]# mfsfileinfo bigfile1
bigfile1:
chunk 0: 0000000000000007_00000001 / (id:7 ver:1)
copy 1: 172.25.11.2:9422 (status:VALID)
copy 2: 172.25.11.3:9422 (status:VALID)
chunk 1: 0000000000000008_00000001 / (id:8 ver:1)
copy 1: 172.25.11.2:9422 (status:VALID)
copy 2: 172.25.11.3:9422 (status:VALID)
chunk 2: 0000000000000009_00000001 / (id:9 ver:1)
copy 1: 172.25.11.2:9422 (status:VALID)
copy 2: 172.25.11.3:9422 (status:VALID)
chunk 3: 000000000000000A_00000001 / (id:10 ver:1)
copy 1: 172.25.11.2:9422 (status:VALID)
copy 2: 172.25.11.3:9422 (status:VALID) ##每一段都存了两份
9、关闭一个chunk分别查看两个目录
[root@server2 ~]# systemctl stop moosefs-chunkserver
[root@foundation11 dir1]# mfsfileinfo bigfile
bigfile:
chunk 0: 0000000000000003_00000001 / (id:3 ver:1)
no valid copies !!!
chunk 1: 0000000000000004_00000001 / (id:4 ver:1)
copy 1: 172.25.11.3:9422 (status:VALID)
chunk 2: 0000000000000005_00000001 / (id:5 ver:1)
no valid copies !!!
chunk 3: 0000000000000006_00000001 / (id:6 ver:1)
copy 1: 172.25.11.3:9422 (status:VALID) ##文件不可读取,若cat查看会卡死
[root@foundation11 dir1]# cd ../dir2/
[root@foundation11 dir2]# ls
bigfile1 passwd
[root@foundation11 dir2]# mfsfileinfo bigfile1
bigfile1:
chunk 0: 0000000000000007_00000001 / (id:7 ver:1)
copy 1: 172.25.11.3:9422 (status:VALID)
chunk 1: 0000000000000008_00000001 / (id:8 ver:1)
copy 1: 172.25.11.3:9422 (status:VALID)
chunk 2: 0000000000000009_00000001 / (id:9 ver:1)
copy 1: 172.25.11.3:9422 (status:VALID)
chunk 3: 000000000000000A_00000001 / (id:10 ver:1)
copy 1: 172.25.11.3:9422 (status:VALID) ##文件可读取
若重新打开chunk文件立即恢复
[root@server2 ~]# systemctl start moosefs-chunkserver
[root@foundation11 dir2]# mfsfileinfo bigfile1
bigfile1:
chunk 0: 0000000000000007_00000001 / (id:7 ver:1)
copy 1: 172.25.11.2:9422 (status:VALID)
copy 2: 172.25.11.3:9422 (status:VALID)
chunk 1: 0000000000000008_00000001 / (id:8 ver:1)
copy 1: 172.25.11.2:9422 (status:VALID)
copy 2: 172.25.11.3:9422 (status:VALID)
chunk 2: 0000000000000009_00000001 / (id:9 ver:1)
copy 1: 172.25.11.2:9422 (status:VALID)
copy 2: 172.25.11.3:9422 (status:VALID)
chunk 3: 000000000000000A_00000001 / (id:10 ver:1)
copy 1: 172.25.11.2:9422 (status:VALID)
copy 2: 172.25.11.3:9422 (status:VALID)
[root@foundation11 dir2]# cd ../dir1/
[root@foundation11 dir1]# mfsfileinfo bigfile
bigfile:
chunk 0: 0000000000000003_00000001 / (id:3 ver:1)
copy 1: 172.25.11.2:9422 (status:VALID)
chunk 1: 0000000000000004_00000001 / (id:4 ver:1)
copy 1: 172.25.11.3:9422 (status:VALID)
chunk 2: 0000000000000005_00000001 / (id:5 ver:1)
copy 1: 172.25.11.2:9422 (status:VALID)
chunk 3: 0000000000000006_00000001 / (id:6 ver:1)
copy 1: 172.25.11.3:9422 (status:VALID)
四、文件恢复
对于master而言,在服务未开启时文件名为metadata.mfs。当开启服务会生成metadata.mfs.back文件
[root@server1 3.0.103]# cd /var/lib/mfs/
[root@server1 mfs]# ll
total 3612
-rw-r----- 1 mfs mfs 2876 May 17 23:55 changelog.0.mfs
-rw-r----- 1 mfs mfs 478 May 17 22:58 changelog.1.mfs
-rw-r----- 1 mfs mfs 120 May 17 23:00 metadata.crc
-rw-r----- 1 mfs mfs 3120 May 17 23:00 metadata.mfs.back
-rw-r--r-- 1 mfs mfs 8 May 17 22:38 metadata.mfs.back.1
-rw-r--r-- 1 mfs mfs 8 Nov 23 07:46 metadata.mfs.empty
-rw-r----- 1 mfs mfs 3672832 May 17 23:00 stats.mfs
若不小心删除了客户端的数据
[root@foundation11 dir1]# rm -fr passwd
root@foundation11 dir1]# rm -fr passwd
[root@foundation11 dir1]# ls
bigfile
恢复数据
[root@foundation11 dir1]# mkdir /mnt/mfsmeta
[root@foundation11 dir1]# cd /mnt/mfsmeta/
[root@foundation11 mfsmeta]# ls
[root@foundation11 mfsmeta]# cd
[root@foundation11 ~]# mfsmount -m /mnt/mfsmeta/ -H mfsmaster
mfsmaster accepted connection with parameters: read-write,restricte
[root@foundation11 mfsmeta]# cd trash/
[root@foundation11 trash]# ls
[root@foundation11 trash]# ls | wc -l
4097
[root@foundation11 trash]# find -name *passwd*
./004/00000004|dir1|passwd
[root@foundation11 trash]# cd 004/
[root@foundation11 004]# ls
00000004|dir1|passwd undel
[root@foundation11 004]# mv 00000004\|dir1\|passwd undel/
[root@foundation11 004]# cd /mnt/mfs
mfs/ mfsmeta/
[root@foundation11 004]# cd /mnt/mfs/
[root@foundation11 mfs]# ls
dir1 dir2
[root@foundation11 mfs]# cd dir1/
[root@foundation11 dir1]# ls
bigfile passwd
[root@foundation11 dir1]# ls ../dir2/
bigfile1 passwd