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直接修改元数据信息中的文件名;返回重命名完成信息;
配置主节点
[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
[root@server1 3.0.103]# vim /etc/hosts
172.25.14.1 server1 mfsmaster
[root@server1 ~]# systemctl start moosefs-master
[root@server1 mfs]# netstat -antlp
[root@server1 ~]# systemctl start moosefs-cgiserv
[root@server1 ~]# netstat -antlp
6. 浏览器访问 http://172.25.14.1:9425
配置从节点,在sevrer2和server3中
[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
[root@server3 3.0.103]# vim /etc/hosts
172.25.14.1 server1 mfsmaster
[root@server2 3.0.103]# vim /etc/hosts
172.25.14.1 server1 mfsmaster
[root@server2 mfs]# mkdir /mnt/chunk1
[root@server2 ~]# vim /etc/mfs/mfshdd.cfg
最后一行添加: /mnt/chunk1 #存储位置
[root@server3 ~]# vim /etc/mfs/mfshdd.cfg
/mnt/chunk2
[root@server2 ~]# mkdir /mnt/chunk1
[root@server2 ~]# chown mfs.mfs /mnt/chunk1/
[root@server3 ~]# mkdir /mnt/chunk2
[root@server3 ~]# chown mfs.mfs /mnt/chunk2/
[root@server2 mfs]# systemctl start moosefs-chunkserver
[root@server3 mfs]# systemctl start moosefs-chunkserver
搭建客户端(真机)
[root@foundation14 3.0.103]# yum install -y moosefs-client-3.0.103-1.rhsystemd.x86_64.rpm
[root@foundation79 ~]# vim /etc/hosts
172.25.79.1 server1 mfsmaster
[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 ##查看已经挂载上
[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
[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.测试:
[root@foundation14 mfs]# cp /etc/passwd dir1/
[root@foundation14 mfs]# cp /etc/fstab dir2/
[root@foundation14 mfs]# cd dir1/
[root@foundation14 dir1]# mfsfileinfo passwd ##数据存储默认为1份
passwd:
chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
copy 1: 172.25.14.3:9422 (status:VALID) ##存储passwd的chunkserver为server3
[root@foundation14 dir1]# cd ..
[root@foundation14 mfs]# cd dir2
[root@foundation14 dir2]# mfsfileinfo fstab
fstab:
chunk 0: 0000000000000002_00000001 / (id:2 ver:1) ##数据存储默认为两份
copy 1: 172.25.14.2:9422 (status:VALID)
copy 2: 172.25.14.3:9422 (status:VALID)
[root@server3 3.0.103]# systemctl stop moosefs-chunkserver
[root@foundation14 dir2]# cd ..
[root@foundation14 mfs]# cd dir1/
[root@foundation14 dir1]# mfsfileinfo passwd
passwd:
chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
no valid copies !!! ##
##此时已经查看不到passwd的数据,如果此时要打开passwd文件电脑会卡住因为数据已经不在这个主机上存储
[root@foundation14 dir2]# mfsfileinfo fstab ##对于fatab文件来说不影响,因为备份了两份
fstab:
chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
copy 1: 172.25.14.2:9422 (status:VALID) ####数据存储默认变为1份
[root@server3 3.0.103]# systemctl start moosefs-chunkserver
离散存储
[root@foundation14 dir1]# dd if=/dev/zero of=bigfile bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.532317 s, 197 MB/s
[root@foundation14 dir1]# mfsfileinfo bigfile
bigfile:
chunk 0: 0000000000000003_00000001 / (id:3 ver:1)
copy 1: 172.25.14.2:9422 (status:VALID)
chunk 1: 0000000000000004_00000001 / (id:4 ver:1)
copy 1: 172.25.14.3:9422 (status:VALID)
[root@foundation14 dir1]# cd ../dir2/
[root@foundation14 dir2]# dd if=/dev/zero of=bigfile bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.568865 s, 184 MB/s
[root@foundation14 dir2]# mfsfileinfo bigfile
bigfile:
chunk 0: 0000000000000005_00000001 / (id:5 ver:1)
copy 1: 172.25.14.2:9422 (status:VALID)
copy 2: 172.25.14.3:9422 (status:VALID)
chunk 1: 0000000000000006_00000001 / (id:6 ver:1)
copy 1: 172.25.14.2:9422 (status:VALID)
copy 2: 172.25.14.3:9422 (status:VALID)
数据恢复
[root@foundation14 dir1]# ls
bigfile passwd
[root@foundation14 dir1]# rm -fr passwd
文件删除后存放在 “ 垃圾箱 ” 中的时间称为隔离时间, 这个时间可以用 mfsgettrashtime 命令来查看,用 mfssettrashtime 命令来设置,单位为秒,默认为 86400 秒
[root@foundation14 dir1]# mfsgettrashtime .
.: 86400
[root@foundation14 ~]# mkdir /mnt/mfsmeta
[root@foundation14 ~]# mfsmount -m /mnt/mfsmeta
mfsmaster accepted connection with parameters: read-write,restricted_ip
[root@foundation14 ~]# cd /mnt/mfsmeta/
[root@foundation14 mfsmeta]# ls
sustained trash
[root@foundation14 mfsmeta]# cd trash/ #进入trash,该目录下有很多文件
[root@foundation14 trash]# find -name *passwd* #查找要恢复的文件
./004/00000004|dir1|passwd
[root@foundation79 trash]# mv ./004/00000004\|dir1\|passwd undel/ ##注意要加反斜线
[root@foundation79 trash]# cd /mnt/mfs/dir1
[root@foundation79 dir1]# ls
file1 passwd #查看删除的文件被找回来了
mfs服务的开启与关闭
[root@server1 ~]# systemctl stop moosefs-master
[root@server1 ~]# systemctl start moosefs-master
[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.
[root@server1 ~]# systemctl status moosefs-master
Apr 05 12:00:00 server1 mfsmaster[11849]: can't find metadata.mfs - try using option '-a'
[root@server1 ~]# moosefs-master -a ##开启成功
[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 ##测试开启成功