mfs官网:https://www.mfs.com;https://moosefs.com/
一、初始MFS
1、MFS简介
分布式文件系统是指文件系统管理的物理存储资源通过计算机网络与各节点相连。简单讲,就是把一些分散的共享文件夹,集合到一个文件夹内。对于用户来说,只 需要打开该虚拟文件夹,就可以使用这些分散的文件夹进行数据读写。分布式文件系统的好处在于集中访问、简化操作、冗余防灾、读写迅速。
MFS是一个具有容错性的网络分布式文件系统,它把数据分散存放在多个物理服务器上,而呈现给用户的则是一个统一的资源。由元数据服务器master、元数据日志服务器metalogger、数据存储服务器chunk server和客户端client四个组件组成。如图,chunk seerver可以存在多个,可以及时添加,为MFS扩展容量。
2、MFS文件系统的特性
MooseFS是一个分布式存储的框架,其具有如下特性:
(1)通用文件系统,不需要修改上层应用就可以使用(那些需要专门api的dfs很麻烦!)。
(2)可以在线扩容,体系架构可伸缩性极强。(官方的case可以扩到70台了!)
(3)部署简单。
(4)高可用,可设置任意的文件冗余程度(提供比raid1+0更高的冗余级别,而绝对不会影响读或者写的性能,只会加速!)
(5)可回收在指定时间内删除的文件(“回收站”提供的是系统级别的服务,不怕误操作了,提供类似oralce 的闪回等高级dbms的即时回滚特性!)
(6)提供netapp,emc,ibm等商业存储的snapshot特性。(可以对整个文件甚至在正在写入的文件创建文件的快照)
(7)google filesystem的一个实现。
(8)提供web gui监控接口。
3、MFS文件系统的组成
元数据服务器(master):负责各个数据存储服务的管理文件读写调度,文件空间回收以及恢复,多节点拷贝。
元数据日志服务器(MetaLogger):负责备份master服务器的变化日志文件,文件类型为changelog_ml.*.mfs,以便于在master server出现问题的时候解体器 进行工作。
数据存储服务器(Chunk Server):真正存储用户数据的服务器存储文件时,首先把文件分成块,然后这些块在数据服务器chunkserver之间赋值(复制份数可以手工指定,建议设置副本数为数据服务器可以为多个,并且数据越多,可使用的“磁盘空间越大,”可靠性也越高。
客户端(client):使用MFS文件系统来存储和访问的主机名称为MFS的客户端,成功挂载MFS系统以后,就可以像以前NFS一样共享这个虚拟性的存储了。。
4、MFS读取数据的处理过程。
MFS读取数据的过程:
- 首先客户端向master发送请求
- master把所需的数据存放位置告诉给客户端(chunk server的ip地址和chunk编号)
- 客户端向chunk server发送请求数据
- chunk server给客户端发送所需的数据
5、MFS写入数据的处理过程。
MFS写数据的过程:
- 客户端向master发送请求
- master与chunk server进行交互,但是master只对某些chunk server创建新的分块chunks,创建成功后chunk server会给master反馈
- master告诉客户端,在上一过程指定的chunk server写入数据
- 客户端开始写入数据
- 写入数据的chunk server将这些数据与其他的chunk server进行同步,同步完成反馈结果给客户端。客户端再反馈给master,这时,整个过程结束。
二、实验环境(rhel7.3版本)
1、selinux和firewalld状态为disabled
2、各主机信息如下:
主机 | ip |
---|---|
server1(mfsmaster) | 172.25.83.1 |
server2(mfschunkserever1) | 172.25.83.2 |
server3(mfschunkserever2) | 172.25.83.3 |
物理机(client) | 172.25.83.83/172.25.254.83 |
三、mfs分布式文件系统的安装与部署
配置server1(mfsmaster):
1、下载moosefs压缩包到root用户家目录,并进行解压
[root@server1 ~]# ls
moosefs-3.0.80-1.tar.gz
[root@server1 ~]# tar zxf moosefs-3.0.80-1.tar.gz
2、将moosefs-3.0.80-1.tar.gz压缩包做软链接为moose-3.0.80.tar.gz(这是因为,有时不能识别-1 )。否则后续在执行rpmbuild命令生成rpm包时会报错。
[root@server1 ~]# ln -s moosefs-3.0.80-1.tar.gz moosefs-3.0.80.tar.gz
[root@server1 ~]# ll
total 1080
drwxr-xr-x 20 501 games 4096 Jul 13 2016 moosefs-3.0.80
-rw-r--r-- 1 root root 1097759 Apr 4 20:07 moosefs-3.0.80-1.tar.gz
lrwxrwxrwx 1 root root 23 Apr 4 22:34 moosefs-3.0.80.tar.gz -> moosefs-3.0.80-1.tar.gz
3、在网上下载rpm包:libpcap-1.5.3-9.el7.x86_64.rpm和libpcap-devel-1.5.3-9.el7.x86_64.rpm。利用rpmbuild命令生成moosefs相应的rpm包,便于部署
[root@server1 ~]# ls
libpcap-1.5.3-9.el7.x86_64.rpm moosefs-3.0.80 moosefs-3.0.80.tar.gz
libpcap-devel-1.5.3-9.el7.x86_64.rpm moosefs-3.0.80-1.tar.gz
[root@server1 ~]# yum install rpm-build -y #安装rpm-build软件,以提供rpmbuild命令
[root@server1 ~]# rpmbuild -tb moosefs-3.0.80.tar.gz #报错,缺少依赖包
error: Failed build dependencies:
fuse-devel is needed by moosefs-3.0.80-1.x86_64
zlib-devel is needed by moosefs-3.0.80-1.x86_64
libpcap-devel is needed by moosefs-3.0.80-1.x86_64
[root@server1 ~]# yum install fuse-devel zlib-devel -y #安装依赖包
[root@server1 ~]# yum install libpcap-1.5.3-9.el7.x86_64.rpm libpcap-devel-1.5.3-9.el7.x86_64.rpm -y #安装依赖包
[root@server1 ~]# yum install gcc make -y
[root@server1 ~]# rpmbuild -tb moosefs-3.0.80.tar.gz #报错,你有些文件没有在spec文件中没有被包含,但是又被安装
error: Installed (but unpackaged) file(s) found:
/usr/lib/systemd/system/moosefs-cgiserv.service
/usr/lib/systemd/system/moosefs-chunkserver.service
/usr/lib/systemd/system/moosefs-master.service
/usr/lib/systemd/system/moosefs-metalogger.service
RPM build errors:
Installed (but unpackaged) file(s) found:
/usr/lib/systemd/system/moosefs-cgiserv.service
/usr/lib/systemd/system/moosefs-chunkserver.service
/usr/lib/systemd/system/moosefs-master.service
/usr/lib/systemd/system/moosefs-metalogger.service
[root@server1 ~]# vim /usr/lib/rpm/macros #将377行注释掉,再次重新编译
377 #%__check_files %{_rpmconfigdir}/check-files %{buildroot}
[root@server1 ~]# rpmbuild -tb moosefs-3.0.80.tar.gz #没有报错,在rpmbuild/RPMS/x86_64目录下生成相应的rpm包
[root@server1 ~]# cd rpmbuild/RPMS/x86_64/
[root@server1 x86_64]# ls
moosefs-cgi-3.0.80-1.x86_64.rpm moosefs-debuginfo-3.0.80-1.x86_64.rpm
moosefs-cgiserv-3.0.80-1.x86_64.rpm moosefs-master-3.0.80-1.x86_64.rpm
moosefs-chunkserver-3.0.80-1.x86_64.rpm moosefs-metalogger-3.0.80-1.x86_64.rpm
moosefs-cli-3.0.80-1.x86_64.rpm moosefs-netdump-3.0.80-1.x86_64.rpm
moosefs-client-3.0.80-1.x86_64.rpm
4、安装master端需要的软件
[root@server1 x86_64]# pwd
/root/rpmbuild/RPMS/x86_64
[root@server1 x86_64]# yum install moosefs-cgiserv-3.0.80-1.x86_64.rpm moosefs-cgi-3.0.80-1.x86_64.rpm moosefs-master-3.0.80-1.x86_64.rpm -y
5、做域名解析(该域名解析必须是mfsmaster。)
[root@server1 ~]# vim /etc/hosts
172.25.83.1 server1 mfsmaster
6、开启服务并查看端口
[root@server1 ~]# mfs #利用两次tan键查看mfs的命令
mfscgiserv mfsmetadump mfsstatsdump
mfsmaster mfsmetarestore
[root@server1 ~]# mfscgiserv #启动mfscgiserv服务,开启访问web界面的端口9425(在哪个目录下执行该命令都可以)
lockfile created and locked
starting simple cgi server (host: any , port: 9425 , rootpath: /usr/share/mfscgi)
[root@server1 ~]# mfsmaster #启动mfsmaster服务,开启端口9419,9420,9421(在哪个目录下执行该命令都可以)
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 ...
metadata file has been loaded
no charts data file - initializing empty charts
master <-> metaloggers module: listen on *:9419
master <-> chunkservers module: listen on *:9420
main master server module: listen on *:9421
mfsmaster daemon initialized properly
[root@server1 ~]# netstat -antulpe
tcp 0 0 0.0.0.0:9419 0.0.0.0:* LISTEN 994 820552 11500/mfsmaster
tcp 0 0 0.0.0.0:9420 0.0.0.0:* LISTEN 994 820553 11500/mfsmaster
tcp 0 0 0.0.0.0:9421 0.0.0.0:* LISTEN 994 820554 11500/mfsmaster
tcp 0 0 0.0.0.0:9425 0.0.0.0:* LISTEN 0 818445 11280/python
用于 chunkserver 连接的端口地址(默认是 9420)
metalogger 监听的端口地址(默认是 9419)
用于客户端挂接连接的端口地址(默认是 9421)
MFS master web 界面监听端口,查看整体运行状态(默认是 9425)
此时可以在客户端的浏览器中访问:172.25.83.1:9425
配置server2和:(mfschunkserever1和mfschunkserver2)
1、从server1端拷贝moosefs-chunkserver对应的rpm包,并进行安装
[root@server1 x86_64]# scp moosefs-chunkserver-3.0.80-1.x86_64.rpm server2:
[root@server2 ~]# ls
moosefs-chunkserver-3.0.80-1.x86_64.rpm
[root@server2 ~]# yum install moosefs-chunkserver-3.0.80-1.x86_64.rpm -y
#server3端操作同server2
2、做域名解析(该域名解析必须是mfsmaster。)
[root@server2 ~]# vim /etc/hosts
172.25.83.1 server1 mfsmaster
#server3端操作同server2
- 其中域名解析必须写为mfsmaster的原因是由配置文件(/etc/mfs/mfschunkserver.cfg)决定的
3、建立需要作为chunkserver的目录,并修改所有人,所有组
实验中我们将/mnt/mfs/作为chunkserver,使用根空间,实际生产环境下应该创建目录后,将磁盘挂载在该目录下
[root@server2 ~]# mkdir /mnt/chunk1 #该目录随意建在哪个目录下,并且该目录的名字随意给
[root@server2 ~]# chown mfs.mfs /mnt/chunk1/ -R #其中mfs用户和组是安装完软件之后,自动创建的,不需要我们手动建立。
[root@server3 ~]# mkdir /mnt/chunk2 #该目录随意建在哪个目录下,并且该目录的名字随意给
[root@server3 ~]# chown mfs.mfs /mnt/chunk2 -R
4、在配置文件中注明作为chunkserver的目录
[root@server2 ~]# vim /etc/mfs/mfshdd.cfg #在文件的最后一行,添加如下的内容
35
36 /mnt/chunk1
[root@server3 ~]# vim /etc/mfs/mfshdd.cfg #在文件的最后一行,添加如下的内容
35
36 /mnt/chunk2
5、开启服务,并查看端口
[root@server2 ~]# mfsc #利用两次tab键补全查看mfs的命令
mfschunkserver mfschunktool mfscsstatsdump
[root@server2 ~]# mfschunkserver #开启mfschunkserver服务(在哪个目录下执行该命令都可以)
open files limit has been set to: 16384
working directory: /var/lib/mfs
lockfile created and locked
setting glibc malloc arena max to 8
setting glibc malloc arena test to 1
initializing mfschunkserver modules ...
hdd space manager: path to scan: /mnt/chunk1/
hdd space manager: start background hdd scanning (searching for available chunks)
main server module: listen on *:9422
no charts data file - initializing empty charts
mfschunkserver daemon initialized properly
[root@server2 ~]# netstat -antulpe
tcp 0 0 0.0.0.0:9422 0.0.0.0:* LISTEN 997 23528 2073/mfschunkserver
[root@server3 ~]# mfschunkserver #开启mfschunkserver服务(在哪个目录下执行该命令都可以)
open files limit has been set to: 16384
working directory: /var/lib/mfs
lockfile created and locked
setting glibc malloc arena max to 8
setting glibc malloc arena test to 1
initializing mfschunkserver modules ...
hdd space manager: path to scan: /mnt/chunk2/
hdd space manager: start background hdd scanning (searching for available chunks)
main server module: listen on *:9422
no charts data file - initializing empty charts
mfschunkserver daemon initialized properly
[root@server3 ~]# netstat -antulpe
tcp 0 0 0.0.0.0:9422 0.0.0.0:* LISTEN 997 23245 2067/mfschunkserver
#在server1端查看server2端(chunkserver)和server3端(chunkserver)与server1端的9420端口建立的连接
[root@server1 mfs]# netstat -antulpe
tcp 0 0 172.25.83.1:9420 172.25.83.2:59820 ESTABLISHED 994 65552 5699/mfsmaster
tcp 0 0 172.25.83.1:9420 172.25.83.3:35740 ESTABLISHED 994 66189 5699/mfsmaster
- 开启moosefs-chunkserver服务之后,server2端会在/mnt/chunk1下生成256个目录,用来存放客户端的数据(server3端同理)
此时浏览器刷新页面:
应该可以看见这个 MooseFS 系统的全部信息,包括主控 master 和存储服务 chunkserver
配置物理机(client):
1、从server1端拷贝moosefs-client对应的rpm包,并进行安装
[root@server1 x86_64]# scp moosefs-client-3.0.80-1.x86_64.rpm root@172.25.83.83:
[root@foundation83 ~]# yum install moosefs-client-3.0.80-1.x86_64.rpm -y
[root@server1 ~]# netstat -antulpe #在server1端(mfsmaster)查看客户端与mfsmaster端的9421端口建立的连接
tcp 0 0 172.25.83.1:9421 172.25.83.83:35564 ESTABLISHED 994 71576 5699/mfsmaster
2、做域名解析(该域名解析必须是mfsmaster。)
[root@foundation83 ~]# vim /etc/hosts
172.25.83.1 mfsmaster
3、在配置文件中指明挂载点
[root@foundation83 ~]# cd /etc/mfs/
[root@foundation83 mfs]# vim mfsmount.cfg #在文件的最后添加17行写的内容
14 # Example:
15 #
16 # /mnt/mfs
17 /mnt/mfs
4、建立挂载目录,并进行挂载
[root@foundation83 ~]# mkdir /mnt/mfs #建立挂载目录
[root@foundation83 ~]# mfsmount #执行mfsmount命令,可以直接挂载(在哪个目录下执行该命令都可以)
mfsmaster accepted connection with parameters: read-write,restricted_ip,admin ; root mapped to root:root
[root@foundation83 ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
mfsmaster:9421 35622912 3039936 32582976 9% /mnt/mfs
5、建立文件测试
在 MFS 挂载点下创建两个目录,并设置其文件存储份数
[root@foundation83 ~]# cd /mnt/mfs/
[root@foundation83 mfs]# ls
[root@foundation83 mfs]# mkdir dir1 #必须在挂载目录中(这里是/mnt/mfs)建立
[root@foundation83 mfs]# mkdir dir2 #必须在挂载目录中(这里是/mnt/mfs)建立
[root@foundation83 mfs]# mfs #利用两次tab键补全查看mfs的命令
mfsappendchunks mfsdirinfo mfslistsclass mfsseteattr
mfscheckfile mfsfileinfo mfsmakesnapshot mfssetgoal
mfscopyeattr mfsfilepaths mfsmount mfssetquota
mfscopygoal mfsfilerepair mfsrgetgoal mfssetsclass
mfscopyquota mfsgeteattr mfsrgettrashtime mfssettrashtime
mfscopysclass mfsgetgoal mfsrmsnapshot mfstools
mfscopytrashtime mfsgetquota mfsrsetgoal mfsxchgsclass
mfsdeleattr mfsgetsclass mfsrsettrashtime
mfsdelquota mfsgettrashtime mfsscadmin
[root@foundation83 mfs]# mfsgetgoal dir1 #获取dir1目录中文件存储份数
dir1: 2
[root@foundation83 mfs]# mfsgetgoal dir2 #获取dir2目录中文件存储份数
dir2: 2
[root@foundation83 mfs]# mfssetgoal -r 1 dir1 #设置在dir1目录中文件存储份数为一个(以示区分),默认是两个。
dir1:
inodes with goal changed: 1
inodes with goal not changed: 0
inodes with permission denied: 0
注意:对一个目录设定 “goal”,此目录下的新创建文件和子目录均会继承此目录的设定,但不会改变已经存在的文件及目录的 copy 份数。但使用-r 选项可以更改已经存在的 copy 份数。(这就是mfsgetgobal dir1与mfsgetgobal -r dir1的区别)
#拷贝/etc/passwd这份文件分别到两个目录上
[root@foundation83 mfs]# cp /etc/passwd dir1/
[root@foundation83 mfs]# cp /etc/passwd dir2/
[root@foundation83 mfs]# mfsfileinfo dir1/passwd #查看dir1目录下的passwd文件信息,可以看到dir1目录下的文件存储份数是1。
dir1/passwd:
chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
copy 1: 172.25.83.2:9422 (status:VALID)
[root@foundation83 mfs]# mfsfileinfo dir2/passwd #查看dir2目录下的passwd文件信息,可以看到dir2目录下的文件存储份数是2。
dir2/passwd:
chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
copy 1: 172.25.83.2:9422 (status:VALID)
copy 2: 172.25.83.3:9422 (status:VALID)
#验证mfs分布式文件系统中一个block的大小为64M
[root@foundation83 mfs]# dd if=/dev/zero of=dir1/bigfile bs=1M count=65
65+0 records in
65+0 records out
68157440 bytes (68 MB) copied, 0.644724 s, 106 MB/s
[root@foundation83 mfs]# mfsfileinfo dir1/bigfile
dir1/bigfile:
chunk 0: 0000000000000005_00000001 / (id:5 ver:1)
copy 1: 172.25.83.2:9422 (status:VALID)
chunk 1: 0000000000000006_00000001 / (id:6 ver:1)
copy 1: 172.25.83.3:9422 (status:VALID)
[root@foundation83 mfs]# dd if=/dev/zero of=dir1/bigfile2 bs=1M count=64
64+0 records in
64+0 records out
67108864 bytes (67 MB) copied, 0.59636 s, 113 MB/s
[root@foundation83 mfs]# mfsfileinfo dir1/bigfile2
dir1/bigfile2:
chunk 0: 0000000000000007_00000001 / (id:7 ver:1)
copy 1: 172.25.83.2:9422 (status:VALID)
#演示其中一个mfschunkserver服务挂掉的情况(这里演示server2挂掉的情况。dir1/passwd存储在server2端,dir2/passwd存储在server2端和server3端)
[root@server2 ~]# mfschunkserver stop #停掉server2端的mfschunkserver服务。此时在server2端查看端口,已经看不到9422端口。在server1端查看端口,已经看不到server2和server1的9420端口建立的连接
sending SIGTERM to lock owner (pid:2294)
waiting for termination terminated
[root@foundation83 mfs]# mfsfileinfo dir1/passwd #我们可以看到dir1/passwd文件的存储收到了影响,而dir2/passwd文件的存储并没有收到任何影响
dir1/passwd:
chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
no valid copies !!!
[root@foundation83 mfs]# mfsfileinfo dir2/passwd
dir2/passwd:
chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
copy 1: 172.25.83.3:9422 (status:VALID)
[root@server2 ~]# mfschunkserver #启动mfschunkserver服务,以免影响后续的实验
6、恢复垃圾箱文件
[root@foundation83 mfs]# rm -rf dir1/passwd
[root@foundation83 mfs]# mfsgettrashtime dir1 #文件删除后存放在"垃圾箱"中的时间称为隔离时间,这个时间可以用"mfsgettrashtime"命令来查看,用"mfssettrashtime"命令来设置,单位为秒,默认为 86400秒。
dir1: 86400
#86400s这个时间是有mfsmaster的配置文件决定的
[root@server1 ~]# cd /etc/mfs/
[root@server1 mfs]# ls
mfsexports.cfg mfsexports.cfg.sample mfsmaster.cfg mfsmaster.cfg.sample mfstopology.cfg mfstopology.cfg.sample
[root@server1 mfs]# vim mfsexports.cfg
41 # 86400 = 86400 seconds = 1 day
[root@foundation83 mfs]# mkdir /mnt/mfsmeta #该目录的位置随意给,该目录的名字也随意给
[root@foundation83 mfs]# mfsmount -m /mnt/mfsmeta #挂载MFSMETA文件系统,它包含目录trash (包含仍然可以被还原的删除文件的信息)和trash/undel(用于获取文件)。把删除的文件,移到trash/undel 下,就可以恢复此文件。
mfsmaster accepted connection with parameters: read-write,restricted_ip
[root@foundation83 mfs]# mount #该挂载信息,通过df命令是看不到的,只能通过mount命令查看
mfsmaster:9421 on /mnt/mfsmeta type fuse.mfsmeta (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)
[root@foundation83 mfs]# cd /mnt/mfsmeta/
[root@foundation83 mfsmeta]# ls
sustained trash
[root@foundation83 mfsmeta]# cd trash/ #进入trash目录,该目录下有很多文件
[root@foundation83 trash]# find -name *passwd* #查看要查找的文件passwd所在的位置
./006/00000006|dir1|passwd
[root@foundation83 trash]# cd 006
[root@foundation83 006]# ls
00000006|dir1|passwd undel
[root@foundation83 006]# mv 00000006\|dir1\|passwd undel/ #将需要恢复的文件移动到undel目录下,注意书写格式
成功恢复
[root@foundation83 006]# cd /mnt/mfs/dir1/
[root@foundation83 dir1]# ls
bigfile bigfile2 passwd
至此MFS分布式文件系统的安装与部署也就完成了。
下面演示server1端(mfsmaster端)的mfsmaster服务挂掉之后,如何恢复的案例?
1、正常关闭mfsmaster服务(利用stop命令)
[root@server1 ~]# mfsmaster stop #在server1端使用stop命令正常关闭mfsmaster服务
sending SIGTERM to lock owner (pid:5699)
waiting for termination terminated
[root@foundation83 ~]# df #此时客户端使用df命令会一直处于卡顿状态,除非mfsmaster服务开启(同理只要访问/mnt/mfs目录以及/mnt/mfs目录中的文件,就会出现卡顿状态)
[root@server1 ~]# mfsmaster #在server1端开启mfsmaster服务
[root@foundation83 ~]# df #此时客户端使用df命令,会出现相应的结果,不会再卡顿
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/rhel_foundation84-root 111491904 80716440 30775464 73% /
devtmpfs 2828156 0 2828156 0% /dev
tmpfs 2841788 552 2841236 1% /dev/shm
tmpfs 2841788 9112 2832676 1% /run
tmpfs 2841788 0 2841788 0% /sys/fs/cgroup
/dev/sda2 1038336 143980 894356 14% /boot
/dev/loop0 3654720 3654720 0 100% /var/www/html/rhel7.0
tmpfs 568360 36 568324 1% /run/user/1000
mfsmaster:9421 17811456 1551424 16260032 9% /mnt/mfs
2、非正常关闭mfsmaster服务(利用kill命令)
#在使用kill命令杀掉mfsmaster服务对应的进程之前,我们先来了解下面的内容
[root@server1 ~]# cd /var/lib/mfs/ #当mfsmaster服务开启时,/var/lib/mfs目录中的内容如下
[root@server1 mfs]# ll
total 3620
-rw-r----- 1 mfs mfs 26 Apr 8 16:57 changelog.1.mfs
-rw-r----- 1 mfs mfs 1716 Apr 8 16:52 changelog.3.mfs
-rw-r----- 1 mfs mfs 2407 Apr 8 15:58 changelog.4.mfs
-rw-r----- 1 mfs mfs 180 Apr 8 12:45 changelog.7.mfs
-rw-r----- 1 mfs mfs 317 Apr 5 00:41 changelog.8.mfs
-rw-r----- 1 mfs mfs 3994 Apr 8 17:00 metadata.mfs.back
-rw-r----- 1 mfs mfs 3994 Apr 8 16:56 metadata.mfs.back.1
-rw-r--r-- 1 mfs mfs 8 Apr 4 23:44 metadata.mfs.empty
-rw-r----- 1 mfs mfs 3672832 Apr 8 16:56 stats.mfs
[root@server1 mfs]# mfsmaster stop #关闭mfsmaster服务
sending SIGTERM to lock owner (pid:28798)
waiting for termination
[root@server1 mfs]# ll #当mfsmaster服务关闭时,/var/lib/mfs目录中的内容如下(有metadata.mfs这个文件,这个文件是开启mfsmaster服务时,必备的文件。如果没有该文件,那么mfsmaster服务也就起不来了)
total 3620
-rw-r----- 1 mfs mfs 26 Apr 8 16:57 changelog.2.mfs
-rw-r----- 1 mfs mfs 1716 Apr 8 16:52 changelog.4.mfs
-rw-r----- 1 mfs mfs 2407 Apr 8 15:58 changelog.5.mfs
-rw-r----- 1 mfs mfs 180 Apr 8 12:45 changelog.8.mfs
-rw-r----- 1 mfs mfs 317 Apr 5 00:41 changelog.9.mfs
-rw-r----- 1 mfs mfs 3994 Apr 8 17:00 metadata.mfs
-rw-r----- 1 mfs mfs 3994 Apr 8 17:00 metadata.mfs.back.1
-rw-r--r-- 1 mfs mfs 8 Apr 4 23:44 metadata.mfs.empty
-rw-r----- 1 mfs mfs 3672832 Apr 8 17:00 stats.mfs
[root@server1 mfs]# mfsmaster #开启mfsmaster服务
[root@server1 mfs]# mfsmaster status
mfsmaster pid: 29364
[root@server1 mfs]# kill -9 29364 #杀掉mfsmaster服务对应的进程号29364
[root@server1 mfs]# ll #因为是非正常关闭mfsmaster服务,所以/var/lib/mfs目录下,不会生成用于启动mfsmaster服务的文件metadata.mfs
total 3620
-rw-r----- 1 mfs mfs 26 Apr 8 16:57 changelog.2.mfs
-rw-r----- 1 mfs mfs 1716 Apr 8 16:52 changelog.4.mfs
-rw-r----- 1 mfs mfs 2407 Apr 8 15:58 changelog.5.mfs
-rw-r----- 1 mfs mfs 180 Apr 8 12:45 changelog.8.mfs
-rw-r----- 1 mfs mfs 317 Apr 5 00:41 changelog.9.mfs
-rw-r----- 1 mfs mfs 3994 Apr 8 17:00 metadata.mfs.back
-rw-r----- 1 mfs mfs 3994 Apr 8 17:00 metadata.mfs.back.1
-rw-r--r-- 1 mfs mfs 8 Apr 4 23:44 metadata.mfs.empty
-rw-r----- 1 mfs mfs 3672832 Apr 8 17:00 stats.mfs
[root@server1 mfs]# mfsmaster #此时启动mfsmaster服务,会报错
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
[root@server1 mfs]# mfsmaster -a #根据提示,使用-a选项
[root@server1 mfs]# mfsmaster status #此时mfsmaster服务的状态是running
mfsmaster pid: 29612
[root@server1 mfs]# netstat -antulpe #同理,相应的端口也已经打开
tcp 0 0 0.0.0.0:9419 0.0.0.0:* LISTEN 994 284571 29612/mfsmaster
tcp 0 0 0.0.0.0:9420 0.0.0.0:* LISTEN 994 284572 29612/mfsmaster
tcp 0 0 0.0.0.0:9421 0.0.0.0:* LISTEN 994 284573 29612/mfsmaster
tcp 0 0 0.0.0.0:9425 0.0.0.0:* LISTEN 0 58780 5656/python