企业级MooseFS分布式文件系统的安装部署以及(读写操作,存储类操作,处理异常和数据恢复)

企业级MooseFS分布式文件系统的安装部署以及(读写操作,存储类操作,处理异常和数据恢复)

实验环境:

server1   192.168.43.71   #做master主机  管理服务器
server2   192.168.43.72   #chunk服务器
server3	  192.168.43.73   #chunk服务器
server4   192.168.43.74 
server5   192.168.43.75 
server6   192.168.43.76   #客户端

并且在每台主机都做好解析:
vim /etc/hosts

1.MooseFS分布式文件系统的简介

MooseFS是一个容错的分布式文件系统。它将数据分散到多个物理位置(服务器),用户可以将这些位置(服务器)看作一个资源。

比如用户要上传10G的资源,对于用户本身和服务器来说都是不友好的,所以可以把它分成10个1G的资源,这样就方便快捷多了,但实际还是一个资源。系统将这些资源的链接集成到一个共享文件夹内,这样用户就可以在一个文件夹内看到所有的资源了。

对于标准文件操作,MooseFS充当任何其他类似unix的文件系统:

  1. 层次结构(目录树)
  2. 存储POSIX文件属性(权限、最后访问和修改时间)
  3. 支持特殊文件(块和字符设备、管道和套接字)
  4. 符号链接(指向目标文件的文件名,不一定在MooseFS中)和硬链接链接(引用MooseFS上相同数据的文件的不同名称)
  5. 基于IP地址和/或密码,可以限制对文件系统的访问

MooseFS的显著特征是:

  1. 高可靠性(数据的多个副本可以存储在单独的物理机器上)
  2. 容量可以通过添加新的计算机或磁盘实现容量的动态扩展
  3. 已删除的文件将保留一段可配置的时间(文件系统级别的“垃圾桶”)
  4. 文件的一致快照,即使文件正在被写入/访问

MooseFS的组成:

  1. 管理服务器(master server)——在MooseFS one机器中,在MooseFS Pro any中

管理整个文件系统、为每个文件存储元数据(infor-)的机器的数量关于文件大小、属性和文件位置的信息,包括所有不定期的信息文件,即目录、套接字、管道和设备)。

  1. 元数据服务器(chunk server)——存储文件数据并在它们之间进行同步的任意数量的普通服务器(如果某个文件应该存在于多个ecopy中)。
  2. 元数据备份服务器(metalogger服务器)——任意数量的服务器,所有这些服务器都存储元数据更改日志并定期下载主元数据文件。当master损坏是,可以从日志服务器中取得文件进行恢复。

在MooseFS(非pro)中,如果主主机发生故障,则带有金属记录器的机器可以很容易地设置为主机。

  1. 客户端——使用mfsmount进程与管理服务器通信(接收和修改文件元数据)的任意数量的计算机,以及与chunkservers通信(交换实际的文件数据)的计算机。可以像挂载 nfs 一样挂载 mfs

工作原理:

在这里插入图片描述
在这里插入图片描述

2.MooseFS分布式文件系统的安装

在server1上

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

在这里插入图片描述
安装完成之后系统会自动生成mfs用户

并且写好解析:server1/server2/server3
在这里插入图片描述

启动mfs:

systemctl start moosefs-master.service
systemctl start moosefs-cgiserv.service
启动之后,查看端口:
netstat -antlp
master会开启三个端口:
9419端口用于备份日志的监听端口,9420是chunk server的监听端口,9421是和客户端连接的地址
cgi会开启图形界面的端口:9425

在这里插入图片描述

测试
在这里插入图片描述
我们发现,没有chunk servers,这里我们添加server2和server3进去。

在色server2和server3中:

yum install moosefs-chunkserver-3.0.113-1.rhsystemd.x86_64.rpm -y

同样的,会生成mfs用户,他们的uid 和gid都相同。

在server2中:

新加一块10G的硬盘/dev/sda,作为共享硬盘,并且给它分区,10G都给它

在这里插入图片描述
在这里插入图片描述
格式化:
在这里插入图片描述
创建挂载点:

[root@server2 ~]# mkdir /mnt/chunk1                         创建chunk目录
[root@server2 ~]# mount /dev/sdb1 /mnt/chunk1/           	挂载
[root@server2 ~]# chown mfs.mfs /mnt/chunk1/      			修改权限

在配置文件中更改挂载点:

[root@server2 ~]# vim /etc/mfs/mfshdd.cfg

在最后一行添加/mnt/chunk1

最后我们启动chunkserver:

[root@server2 ~]# systemctl start moosefs-chunkserver
[root@server2 ~]# netstat -antlp   			可见,9422端口打开

在这里插入图片描述
此时,在web端,server2已经加入到集群里面去了

在这里插入图片描述

server3中:

刚才我们在server2中添加了新硬盘,在server3 这里我们就用系统文件系统

[root@server3 ~]# df -h
可以看到/分区下的空间还很大,所以这里使用根分区。

[root@server3 ~]# mkdir /mnt/chunk2
[root@server3 ~]# vim /etc/mfs/mfshdd.cfg           里面设置为 /mnt/chunk2
[root@server3 ~]# chown mfs.mfs /mnt/chunk2/
[root@server3 ~]# systemctl start moosefs-chunkserver
[root@server3 ~]# netstat -antlp

在这里插入图片描述
此时,在web端,server3也加入到集群里面去了
在这里插入图片描述

在上面我们已经对mfs文件系统配置完成,下面我们就来在客户端进行测试

测试:

1. 读写

这里我们用server6作为客户端

server6上安装mfs客户端:
[root@server6 ~]# yum install  moosefs-client-3.0.113-1.rhsystemd.x86_64.rpm -y
[root@server6 ~]# vim /etc/hosts             #添加server1  mfsmaster的解析
[root@server6 ~]# mkdir /mnt/mfs             #建立目录   mfs的挂载目录
[root@server6 ~]# vim /etc/mfs/mfsmount.cfg


[root@server6 ~]# mfsmount                   #挂载
mfsmaster accepted connection with parameters: read-write,restricted_ip,admin ; root mapped to root:root

在这里插入图片描述

[root@server6 ~]# cd /mnt/mfs/
[root@server6 mfs]# mkdir dir1 dir2             #建立两个子目录
[root@server6 mfs]# ls
dir1  dir2
[root@server6 mfs]# mfsgetgoal dir1/        
#获取备份数目,因为有server2 和server3两台chunk服务器,所以为2,
这样就会有两份备份,有一台chunk挂掉了,我们还有一台,这样就保证了数据的完整性。
dir1/: 2
[root@server6 mfs]# mfsgetgoal dir2/
dir2/: 2

当然,我们也可以更改:
[root@server6 mfs]# mfssetgoal -r 1 dir1           #表示可以更改数目  -r 1  表示减一
dir1:
 inodes with goal changed:                       1
 inodes with goal not changed:                   0
 inodes with permission denied:                  0
[root@server6 mfs]# mfsgetgoal dir1/
dir1/: 1

在这里插入图片描述
在这里插入图片描述

拷贝一份文件进去(写):

[root@server6 mfs]# cp /etc/passwd dir1
[root@server6 mfs]# cp /etc/group dir2
[root@server6 mfs]# mfsfileinfo dir1/passwd 
dir1/passwd:
	chunk 0: 0000000000000001_00000001 / (id:1 ver:1)     #只有一个备份在server2上
		copy 1: 192.168.43.72:9422 (status:VALID)
[root@server6 mfs]# mfsfileinfo dir2/group 
dir2/group:
	chunk 0: 0000000000000002_00000001 / (id:2 ver:1)      #会有两份备份
		copy 1: 192.168.43.72:9422 (status:VALID)
		copy 2: 192.168.43.73:9422 (status:VALID)


在这里插入图片描述

测试:
首先我们挂掉server2:

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

在server6查看:
[root@server6 mfs]# mfsfileinfo dir1/passwd
dir1/passwd:
	chunk 0: 0000000000000001_00000001 / (id:1 ver:1)   
	   no valid copies !!!
	###################没有数据,因为只用server2中的一份备份###################
	
[root@server6 mfs]# mfsfileinfo dir2/group 
dir2/group:
	chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
		copy 1: 192.168.43.73:9422 (status:VALID)
	####################### 还有server3的一份数据可以查看#######################
[root@server6 mfs]# cat dir2/group            ## 可以正常查看

[root@server6 mfs]# cat dir1/passwd 
^C                   						## 查看的时候就会卡到这里

当我们再次打开server2上的chunk服务就可以看到了

[root@server6 mfs]# cat dir1/passwd     ##可以查看

在这里插入图片描述

2.存储类storage class

存储类里面有两个:storage class和label

存储类是允许您指定应该在哪个Chunkservers上存储文件的副本。存储类是使用标签表达式定义的。即我们可以存放文件在指定标签的chunkservers上。

服务器打标签的要求:

打标签需要先修改配置文件
只能使用 A-Z 这二十六个大写字母来设置 ,每个 chunkserver 可以有多个标签,也就是说可以写多个字母。

LABELS=ABC / A,B,C / A B C
表示一个意思

LABELS=A,B
表示存储在A标签和B标签的chunk上

LABELS=A,*
表示存储在A标签和任意一个标签的chunk上

LABELS=* ,*
表示存储在任意两个chunk服务器上

LABELS=AB,C+D
表示存储在具有AB两个标签的chunk上和具有C或者D标签的服务器上

首先我们先删掉上面的dir1 和dir2的实验,方便下面的实验环境的纯净

打开server4 和server5服务器,配置chunkserver

在server4中:
[root@server4 mnt]# yum install moosefs-chunkserver-3.0.113-1.rhsystemd.x86_64.rpm -y
[root@server4 mnt]# mkdir /mnt/chunk3
[root@server4 mnt]# chown mfs.mfs /mnt/chunk3/
[root@server4 mnt]# vim /etc/mfs/mfshdd.cfg
# 最后一行加上 /mnt/chunk3 
[root@server4 mnt]# systemctl start moosefs-chunkserver

在server2 3 4 5 四台服务器上打标签:
vim /etc/mfs/mfschunkserver.cfg
找到LABELS那一行,打开。

server2:
LABELS = A S                    	A机房 S固态硬盘

server3:
LABELS = B S						B机房 S固态硬盘

server4:
LABELS = A H						A机房 H机械硬盘

server5:
LABELS = B H						B机房  H机械硬盘

systemctl restart moosefs-chunkserver.service         重启服务

在这里插入图片描述
此时在web界面就可以看到标签了

设置四种存储类:

在客户端:
注意:必须在工作目录中进行
[root@server6 mfs]# mfsscadmin create 2A class2A             	#两个都存在A上 
storage class make class2A: ok
[root@server6 mfs]# mfsscadmin create 2B class2B				#两个都存在B上
storage class make class2B: ok
[root@server6 mfs]# mfsscadmin create A,B classAB				#存在A和B 上
storage class make classAB: ok
[root@server6 mfs]# mfsscadmin create AS,BH classASBH			#存在A和S标签 和 B和H标签 的chunk上。
storage class make classASBH: ok
[root@server6 mfs]# mfsscadmin list
1
2
3
4
5
6
7
8
9
class2A
class2B
classAB
classASBH

在这里插入图片描述

[root@server6 mfs]# mkdir dir1 dir2
[root@server6 mfs]# ls
dir1  dir2
[root@server6 mfs]# touch dir1/file1            		## 在里面随便输入一点数据。
[root@server6 mfs]# touch dir2/file1
[root@server6 mfs]# mfsgetgoal dir1/file1
dir1/file1: 2                     						## 默认存储两个
[root@server6 mfs]# mfsgetgoal dir2/file1
dir2/file1: 2
[root@server6 mfs]# mfssetsclass -r class2A dir1        ##将dir1下的存储到A上
dir1:
 inodes with storage class changed:              2 
 inodes with storage class not changed:          0
 inodes with permission denied:                  0
[root@server6 mfs]# mfssetsclass -r class2B dir2         ##dir2下的存储到B上
dir2:
 inodes with storage class changed:              2
 inodes with storage class not changed:          0
 inodes with permission denied:                  0

[root@server6 mfs]# mfsfileinfo dir{1..2}/ *
dir1/file1:
	chunk 0: 0000000000000004_00000001 / (id:4 ver:1)
		copy 1: 192.168.43.72:9422 (status:VALID)        # server2
		copy 2: 192.168.43.74:9422 (status:VALID)        # server4
dir2/file1:
	chunk 0: 0000000000000006_00000001 / (id:6 ver:1)
		copy 1: 192.168.43.73:9422 (status:VALID)        # server3
		copy 2: 192.168.43.75:9422 (status:VALID)        # server5



server2:
LABELS = A S A机房 固态硬盘
server3:
LABELS = B S B机房 固态硬盘
server4:
LABELS = A H A机房 机械硬盘
server5:
LABELS = B H B机房 机械硬盘

在这里插入图片描述
在这里插入图片描述
我们可以看到:

dir1/file1确实存放到了带有A标签的chunk服务器上, 默认是两个副本。
dir2/file1确实存放到了带有B标签的chunk服务器上, 默认是两个副本。

当然了,还可以进行更改

更改一下:

[root@server6 mfs]# mfsxchgsclass -r class2B classAB dir2                   ##更改类
dir2:
 inodes with storage class changed:              2
 inodes with storage class not changed:          0
 inodes with permission denied:                  0
[root@server6 mfs]# mfsfileinfo dir{1..2}/ *
dir1/file1:
	chunk 0: 0000000000000004_00000001 / (id:4 ver:1)
		copy 1: 192.168.43.72:9422 (status:VALID)
		copy 2: 192.168.43.74:9422 (status:VALID)
dir2/file1:
	chunk 0: 0000000000000006_00000001 / (id:6 ver:1)
		copy 1: 192.168.43.72:9422 (status:VALID)     					#随机存储在带有A的里面
		copy 2: 192.168.43.75:9422 (status:VALID)						#随机存储在带有B的里面


在这里插入图片描述

关于存储类我们还可以做一些设定:

比如创建文件的时候可以进行设定

参数:

  1. create 设定文件创建的存储
  2. keep 文件保存的存储设定
  3. archive 指定时间后,文件打包存储的设定
[root@server6 mfs]# mfsscadmin create -C 2A -K AS,BS -A AH,BH  -d 7 important
##-C 表示指定create参数设定 
##-K 表示指定keep参数设定 
##-A 表示指定archive参数设定 
##-d 表示天数      
##important表示文件名
#######上面命令表示在创建文件时在A机房的任意两台服务器上,
保存文件副本的时候,保存在A和B机房的S服务器上,
打包存储时在A和B的H服务器上

在这里插入图片描述
在这里插入图片描述
看到之后,表示我们设定完成!!!!!!!!!!!!!!!!!!!

处理异常

首先在server6取消挂碍client的客户端,不然对这个实验产生影响。
umount -l /mnt/mfs

我们在打开mfs-master时,会产生一个文件:
[root@server1 3.0.113]# cd /var/lib/mfs/
[root@server1 mfs]# ls
changelog.0.mfs  changelog.3.mfs  metadata.crc       metadata.mfs.back.1  stats.mfs
changelog.1.mfs  changelog.4.mfs metadata.mfs.back  metadata.mfs.empty
 #################################产生的就是这个.back 结尾的文件。############################

1.正常关闭时

[root@server1 mfs]# systemctl stop moosefs-master.service 
[root@server1 mfs]# ls
changelog.0.mfs  changelog.3.mfs  metadata.crc  metadata.mfs.back.1  stats.mfs
changelog.1.mfs  changelog.4.mfs  metadata.mfs  metadata.mfs.empty
它就变成了 matadata.mfs 这个文件,去掉了back的结尾

在这里插入图片描述

2.不正常关闭时

[root@server1 mfs]# ps ax |grep mfsmaster
 18807 ?        S<     0:00 /usr/sbin/mfsmaster start
 18808 ?        S<     0:00 mfsmaster (data writer)
 18811 pts/0    S+     0:00 grep --color=auto mfsmaster
[root@server1 mfs]# kill -9 18807
[root@server1 mfs]# ps ax |grep mfsmaster
 18815 pts/0    S+     0:00 grep --color=auto mfsmaster
[root@server1 mfs]# ls
changelog.0.mfs  changelog.4.mfs  changelog.7.mfs    metadata.mfs.back.1
changelog.1.mfs  changelog.5.mfs  metadata.crc       metadata.mfs.empty
changelog.3.mfs  changelog.6.mfs  metadata.mfs.back  stats.mfs
##############它还是以.back结尾的文件,这时我们再次启动mfs-master
[root@server1 mfs]# 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.
##########报错了 ,查看日志

#####################让我们在执行命令的时候加上-a参数############################

[root@server1 mfs]# mfsmaster start -a
[root@server1 mfs]# systemctl status moosefs-master.service
● moosefs-master.service - MooseFS Master server
   Loaded: loaded (/usr/lib/systemd/system/moosefs-master.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Sat 2020-05-23 06:38:27 CST; 4min 25s ago
  Process: 18812 ExecStop=/usr/sbin/mfsmaster stop (code=exited, status=0/SUCCESS)
  Process: 18841 ExecStart=/usr/sbin/mfsmaster start (code=exited, status=1/FAILURE)
 Main PID: 18807 (code=killed, signal=KILL)
...

[root@server1 mfs]# ls
changelog.0.mfs  changelog.4.mfs  changelog.7.mfs    metadata.mfs.back.1
changelog.1.mfs  changelog.5.mfs  metadata.crc       metadata.mfs.empty
changelog.3.mfs  changelog.6.mfs  metadata.mfs.back  stats.mfs
##########我们发现文件metadata.mfs.back还在,于是我们去启动脚本中更改###########

[root@server1 mfs]# vim /usr/lib/systemd/system/moosefs-master.service
ExecStart=/usr/sbin/mfsmaster start -a        # 给这一行后面加上-a 参数

[root@server1 mfs]# systemctl daemon-reload
[root@server1 mfs]# systemctl status moosefs-master
[root@server1 mfs]# systemctl start moosefs-master
[root@server1 mfs]# systemctl status moosefs-master
● moosefs-master.service - MooseFS Master server
   Loaded: loaded (/usr/lib/systemd/system/moosefs-master.service; disabled; vendor preset: disabled)
   Active: active (running) since Sat 2020-05-23 06:56:44 CST; 18s ago
  Process: 18966 ExecStart=/usr/sbin/mfsmaster start -a (code=exited, status=0/SUCCESS)
 Main PID: 18968 (mfsmaster)
   CGroup: /system.slice/moosefs-master.service
           ├─18968 /usr/sbin/mfsmaster start -a
           └─18969 mfsmaster (data writer) t -a

[root@server1 mfs]# systemctl stop moosefs-master.service        # 再次关闭
[root@server1 mfs]# ls
changelog.0.mfs  changelog.3.mfs  metadata.crc  metadata.mfs.back.1  stats.mfs
changelog.1.mfs  changelog.4.mfs  metadata.mfs  metadata.mfs.empty
########################文件就恢复正常了。##################


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这就是异常关闭的处理

数据恢复

开始之前介绍了 mfs 也是支持垃圾箱的, 已删除的文件将保留一段可配置的时间(文件系统级别的“垃圾桶”),所以我们可以根据这一特性进行恢复。

在server6中:

在server6上在重新挂载:
[root@server6 mfs]# mfsmount 
mfsmaster accepted connection with parameters: read-write,restricted_ip,admin ; root mapped to root:root

然后删除一个工作目录中的文件:
[root@server6 mfs]# cd /mnt/mfs/dir1
[root@server6 dir1]# ls
file1
[root@server6 dir1]# rm -fr file1 


然后去从垃圾箱中获取:
[root@server6 dir1]# mfsgettrashtime /mnt/mfs/dir1/       #获取垃圾箱最大存放时间
/mnt/mfs/dir1/: 86400
[root@server6 dir1]# mkdir /mnt/mfsmeta                   #建立恢复目录
[root@server6 dir1]# mfsmount -m /mnt/mfsmeta/            #挂载
mfsmaster accepted connection with parameters: read-write,restricted_ip

#####用df时看不到的,因为是垃圾箱,可以用mount命令查看#####
[root@server6 dir1]# df   
Filesystem            1K-blocks    Used Available Use% Mounted on
/dev/mapper/rhel-root  17811456 1196760  16614696   7% /
devtmpfs                 919432       0    919432   0% /dev
tmpfs                    931596       0    931596   0% /dev/shm
tmpfs                    931596    9704    921892   2% /run
tmpfs                    931596       0    931596   0% /sys/fs/cgroup
/dev/nvme0n1p1          1038336  148708    889628  15% /boot
tmpfs                    186320       0    186320   0% /run/user/0
/dev/sr0                4391278 4391278         0 100% /xuruntian
mfsmaster:9421         63908864 4679168  59229696   8% /mnt/mfs


[root@server6 dir1]# cd /mnt/mfsmeta/
[root@server6 mfsmeta]# ls        #进入我们就可以看到两个目录,我们的文件就存放在trash目录中
sustained  trash
[root@server6 mfsmeta]# cd trash/
[root@server6 trash]# find -name *file1*
./008/00000008|dir1|file1~
./009/00000009|dir2|file1~
./00A/0000000A|dir1|.file1.swp
./00B/0000000B|dir1|.file1.swpx
./00C/0000000C|dir1|.file1.swp
./00E/0000000E|dir1|file1         #这就是我们要恢复的文件
./00F/0000000F|dir2|.file1.swp
./010/00000010|dir2|.file1.swpx
./011/00000011|dir2|.file1.swp
[root@server6 trash]# cd 00E/
[root@server6 00E]# ls
0000000E|dir1|file1  undel
[root@server6 00E]# mv 0000000E\|dir1\|file1 undel/
########把我们的文件放到undel目录中去,就是不删除,相当于windows的恢复###########
[root@server6 00E]# cd /mnt/mfs/dir1/
[root@server6 dir1]# ls
file1
[root@server6 dir1]# cat file1 
hello world
###############我们的文件被恢复了#############

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 1024 设计师: 上身试试
应支付0元
点击重新获取
扫码支付

支付成功即可阅读