菜单
本页目录

5 MFS分布式对象存储

一:原理:

1)读取:

1.client向master请求数据位置,master发送数据所在chunk位置

2.client向chunk请求数据,chunk发送数据给client

image-20221206144329200

2)写入:

1.client向master请求数据写入位置

2.master向chunk中根据请求创建存储空间,并标记;chunk创建成功后返回信息给master

3.master返回给client信息:数据写入位置(ip、端口、chunkid)

4.client向chunk中写入数据

5.chunk进行数据备份,成功后返回给client,写入成功的信息

6.client接受写入成功信息后,向master发送写入结束信息

image-20221206144456277

3)修改:

将前面读取、写入结合起来;client先将数据读取出来,再将数据修改后,写入数据

4)MFS特点:

​ 免费、可在线扩容、伸缩性极强、部署简单、数据高可用、有回收站机制、有快照功能

5)设计架构:

master						管理服务器
metalogger					元数据日志服务器:master故障后,仅能通过日志服务器恢复记录,没有从来替换主
																	仅备份master的日志
chunk server				数据存储服务器
client						客户端

6)注意:

1.master记录管理信息:
			文件路径|大小|存储位置|存储份数|时间等
			存储位置包括:ip、port、chunkid
			元数据存于内存中,会定期写入磁盘,定期同步到日志服务器

2.文件以chunk大小存储,每个chunk最大64M(类似于block块)

3.chunkserver剩余空间要大于1G

4.文件可以有多分copy,默认copy两份,最大可以copy数=chunk服务器数

二:实验

1)实验环境及步骤:

虚拟机IP功能步骤
7-1192.168.18.201master部署master
1.安装依赖gcc、zlib-devel
创建服务用户
解压,进入
无chunkserver、无mount的检查: ./config --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount
编译、安装
2.创建命令软链接
生成配置文件:
/usr/local/mfs/etc/mfs:mfsexports.cfg、mfsmaster.cfg、mfstopology.cfg
/usr/local/mfs/var/mfs: metadata.mfs
3.启动master:mfsmaster start
7-2192.168.18.202logger部署日志服务器
1.安装依赖gcc、zlib-devel
创建服务用户
解压,进入,无chunkserver、无mount的检查:./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount
编译,安装
2.创建软链接
生成配置文件:/usr/local/mfs/etc/mfs/mfsmetalogger.cfg
META_DOWNLOAD_FREQ = 24
MASTER_HOST = 192.168.18.201
3.启动logger:mfsmetalogger start
7-6~7-9192.168.18.206~209chunk添加磁盘、部署chunk服务器
1.分区、格式化、挂载
2.安装依赖gcc、zlib-devel
创建服务用户
解压,进入,无master、mount的检查:./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfsmount
编译,安装,创建软链接
3.生成配置文件:/usr/local/mfs/etc/目录下
mfschunkserver.cfg
HDD_CONF_FILENAME = /usr/local/mfs/etc/mfs/mfshdd.cfg
MASTER_HOST = 192.168.18.201
mfshdd.cfg
/chunk_dir
4.设置挂载点权限所有者所属组为mfs
5.启动chunk:mfschunkserver start
7-5192.168.18.205测试机进行测试
1.安装依赖gcc、zlib-devel、fuse、fuse-devel、fuse-libs
创建服务用户
解压,进入,无chunkserver、无master的检查:./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserve
编译,安装,创建命令软链接
2.创建目录,挂载:
mfsmount /mfsdata/ -H 192.168.18.201 #数据目录挂载
mfsmount -m /mfsmeta/ -H 192.168.18.201 #回收站挂载
3.检查master的端口,测试挂载点的写入动态平衡、删除恢复

2)实验步骤详细:

注意:每台机器都用同一个压缩包

1、部署master

(1)安装:

​ yum安装gcc、zlib-devel

​ 创建服务用户mfs

​ 解压、进入、编译安装

./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount
[root@localhost ~]# yum -y install gcc zlib-devel
[root@localhost ~]# useradd -r -s /sbin/nologin mfs
[root@localhost moosefs-3.0.101]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount && make -j 8 && make install

(2)配置文件:

​ 创建命令软链接,方便调用

​ 配置master的配置文件:mfsexports.cfg、mfsmaster.cfg、mfstopology.cfg

​ 配置管理文件: /usr/local/mfs/var/mfs/metadata.mfs

[root@localhost ~]# ln -s /usr/local/mfs/bin/* /usr/local/bin/
[root@localhost ~]# ln -s /usr/local/mfs/sbin/* /usr/local/sbin/
[root@localhost ~]# cd /usr/local/mfs/etc/mfs/
[root@localhost mfs]# cp -a mfsexports.cfg.sample  mfsexports.cfg
[root@localhost mfs]# cp -a mfsmaster.cfg.sample mfsmaster.cfg
[root@localhost mfs]# cp -a mfstopology.cfg.sample mfstopology.cfg
[root@localhost mfs]# mkdir back
[root@localhost mfs]# mv ./*.sample back/
[root@localhost mfs]# ls
back  mfsexports.cfg  mfsmaster.cfg  mfstopology.cfg

#配置管理文件: /usr/local/mfs/var/mfs/metadata.mfs
[root@localhost mfs]# cd /usr/local/mfs/var/mfs/
[root@localhost mfs]# cp -a metadata.mfs.empty metadata.mfs

(3)启动mfsmaster:

[root@localhost mfs]# mfsmaster start
[root@localhost mfs]# netstat -anpt |grep mfs
tcp        0      0 0.0.0.0:9419            0.0.0.0:*               LISTEN      13777/mfsmaster     
tcp        0      0 0.0.0.0:9420            0.0.0.0:*               LISTEN      13777/mfsmaster     
tcp        0      0 0.0.0.0:9421            0.0.0.0:*               LISTEN      13777/mfsmaster

2、部署logger

(1)安装:(和master一样)

​ yum安装gcc、zlib-devel

​ 创建服务用户mfs

​ 解压、进入、编译安装

[root@localhost ~]# yum -y install gcc zlib-devel
[root@localhost ~]# useradd -r -s /sbin/nologin mfs
[root@localhost ~]# tar -xf moosefs-3.0.101-1.tar.gz 
[root@localhost ~]# cd moosefs-3.0.101/
[root@localhost moosefs-3.0.101]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount && make -j 8 && make install

(2)配置文件:

[root@localhost moosefs-3.0.101]# cd /usr/local/mfs/etc/mfs/
[root@localhost mfs]# cp -a mfsmetalogger.cfg.sample mfsmetalogger.cfg
[root@localhost mfs]# mkdir back
[root@localhost mfs]# mv ./*.sample back/
[root@localhost mfs]# ls
back  mfsmetalogger.cfg

[root@localhost mfs]# vim mfsmetalogger.cfg 
[root@localhost mfs]# egrep "^META_DOWNLOAD|^MASTER_HOST" mfsmetalogger.cfg
META_DOWNLOAD_FREQ = 24
MASTER_HOST = 192.168.18.201

(3)logger启动

​ 创建命令软链接方便调用

​ 启动命令: mfsmetalogger start

[root@localhost mfs]# ln -s /usr/local/mfs/bin/* /usr/local/bin/
[root@localhost mfs]# ln -s /usr/local/mfs/sbin/* /usr/local/sbin/

[root@localhost mfs]# mfsmetalogger start
#启动后,master多监听9419端口
[root@localhost mfs]# netstat -anpt |grep mfs
[root@localhost mfs]# netstat -anpt |grep mfs |grep :9419
tcp        0      0 0.0.0.0:9419            0.0.0.0:*               LISTEN      13777/mfsmaster     
tcp        0      0 192.168.18.201:9419     192.168.18.202:49206    ESTABLISHED 13777/mfsmaster

3、4台chunk服务器同步操作

(1)分区

[root@localhost ~]# fdisk /dev/sdb
[root@localhost ~]# mkfs.ext4 /dev/sdb1
[root@localhost ~]# vim /etc/fstab
/dev/sdb1	/chunk_dir	ext4	defaults	0 0
[root@localhost ~]# mount -a
[root@localhost ~]# df -h |grep chunk
/dev/sdb1                 20G   45M   19G    1% /chunk_dir

(2)安装

​ yum安装依赖、创建服务用户

​ 解压、进入、编译(关闭master功能)、安装

​ 创建命令软链接,方便调用

[root@localhost moosefs-3.0.101]# yum -y install gcc zlib-devel
[root@localhost moosefs-3.0.101]# useradd -r -s /sbin/nologin mfs
[root@localhost ~]# tar -xf moosefs-3.0.101-1.tar.gz 
[root@localhost ~]# cd moosefs-3.0.101/
[root@localhost moosefs-3.0.101]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfsmount && make -j 8 && make install
[root@localhost ~]# ln -s /usr/local/mfs/bin/* /usr/local/bin/
[root@localhost ~]# ln -s /usr/local/mfs/sbin/* /usr/local/sbin/

(3)配置文件

[root@localhost ~]# cd /usr/local/mfs/etc/mfs/
mfshdd.cfg.sample
[root@localhost mfs]# cp -a mfschunkserver.cfg.sample mfschunkserver.cfg
[root@localhost mfs]# cp -a mfshdd.cfg.sample mfshdd.cfg
[root@localhost mfs]# mkdir back
[root@localhost mfs]# mv ./*.sample back/
[root@localhost mfs]# ls
back  mfschunkserver.cfg mfshdd.cfg
[root@localhost mfs]# vim mfschunkserver.cfg 			#配置chunk配置文件
[root@localhost mfs]# egrep "^MASTER_HOST|^HDD_CONF_FILENAME" mfschunkserver.cfg
HDD_CONF_FILENAME = /usr/local/mfs/etc/mfs/mfshdd.cfg
MASTER_HOST = 192.168.18.201

[root@localhost mfs]# vim mfshdd.cfg					#指向共享的目录挂载点
[root@localhost mfs]# grep "^\/" mfshdd.cfg 
/chunk_dir

(4)修改挂载点权限

[root@localhost mfs]# chown -R mfs:mfs /chunk_dir/

(5)chunk服务器启动

[root@localhost mfs]# mfschunkserver start

#启动后,master会多监听9420端口
[root@localhost mfs]# netstat -anpt |grep mfs |grep :9420
tcp        0      0 0.0.0.0:9420            0.0.0.0:*               LISTEN      13777/mfsmaster     
tcp        0      0 192.168.18.201:9420     192.168.18.208:47844    ESTABLISHED 13777/mfsmaster     
tcp        0      0 192.168.18.201:9420     192.168.18.209:56146    ESTABLISHED 13777/mfsmaster     
tcp        0      0 192.168.18.201:9420     192.168.18.207:53936    ESTABLISHED 13777/mfsmaster     
tcp        0      0 192.168.18.201:9420     192.168.18.206:41300    ESTABLISHED 13777/mfsmaster

4、配置client

(1)安装

​ yum安装依赖gcc、zlib-devel、fuse、fuse-devel、fuse-libs

​ 创建服务用户mfs

​ 解压、进入、编译(关闭master、chunk)、安装

​ 创建软链接

[root@localhost ~]# yum -y install gcc zlib-devel fuse fuse-devel fuse-libs
[root@localhost ~]# useradd -r -s /sbin/nologin mfs
[root@localhost ~]# tar -xf moosefs-3.0.101-1.tar.gz 
[root@localhost ~]# cd moosefs-3.0.101/
[root@localhost moosefs-3.0.101]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver && make -j 8 && make install

[root@localhost ~]# ln -s /usr/local/mfs/bin/* /usr/local/bin/
[root@localhost ~]# ln -s /usr/local/mfs/sbin/* /usr/local/sbin/

(2)挂载:

[root@localhost ~]# mkdir /mfsdata /mfsmeta
[root@localhost ~]# mfsmount /mfsdata/ -H 192.168.18.201				#数据目录挂载
[root@localhost ~]# mfsmount -m /mfsmeta/ -H 192.168.18.201				#回收站挂载

#挂载后,master会多监听9421端口
[root@localhost mfs]# netstat -anpt |grep mfs |grep :9421
tcp        0      0 0.0.0.0:9421            0.0.0.0:*               LISTEN      13777/mfsmaster     
tcp        0      0 192.168.18.201:9421     192.168.18.205:33462    ESTABLISHED 13777/mfsmaster

#检查挂载成功
[root@localhost ~]# mount |grep mfs
192.168.18.201:9421 on /mfsdata type fuse.mfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)

5、测试

(1)创建文件,写入内容,查看文件存的份数(写入动态平衡)

[root@localhost mfsdata]# touch yq.txt
[root@localhost mfsdata]# echo "123123" >> yq.txt 
[root@localhost mfsdata]# echo "123123" >> yq.txt 
[root@localhost mfsdata]# echo "123123" >> yq.txt 
[root@localhost mfsdata]# echo "123123" >> yq.txt 
[root@localhost mfsdata]# echo "123123" >> yq.txt

[root@localhost mfsdata]# mfsfileinfo yq.txt 
yq.txt:
	chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
		copy 1: 192.168.18.206:9422 (status:VALID)
		copy 2: 192.168.18.208:9422 (status:VALID)


[root@localhost mfsdata]# touch yq1.txt
[root@localhost mfsdata]# echo "qqqqqqqqqqq" >> yq1.txt 
[root@localhost mfsdata]# echo "qqqqqqqqqqq" >> yq1.txt 
[root@localhost mfsdata]# echo "qqqqqqqqqqq" >> yq1.txt 
[root@localhost mfsdata]# mfsfileinfo yq1.txt 
yq1.txt:
	chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
		copy 1: 192.168.18.207:9422 (status:VALID)
		copy 2: 192.168.18.209:9422 (status:VALID)

(2)删除文件,找回

[root@localhost mfsdata]# rm -rf yq1.txt
[root@localhost mfsdata]# ls
yq.txt
[root@localhost mfsmeta]# find /mfsmeta/ -type f				#找到删除文件名的位置
/mfsmeta/trash/003/00000003|yq1.txt
[root@localhost mfsmeta]# cd /mfsmeta/trash/003/
[root@localhost 003]# ls
00000003|yq1.txt  undel
[root@localhost 003]# mv 00000003\|yq1.txt undel/				#进入后,将文件放入undel目录中即恢复
[root@localhost 003]# cd /mfsdata/
[root@localhost mfsdata]# ls									#找回成功
yq1.txt  yq.txt

三:MFS高级特性

1)MFS设置goal冗余(副本)

mfsfileinfo  文件名							  #查看文件在mfs上数据的详细信息(chunk位置、文件名)
mfsgetgoal   文件名							  #查看文件在chunk中的份数
mfssetgoal    -r   份数   文件名					 #重新设置文件的存储份数
[root@localhost ~]# mfsfileinfo /mfsdata/yq.txt 				#查看文件在mfs上数据的详细信息(chunk位置、文件名)
/mfsdata/yq.txt:
	chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
		copy 1: 192.168.18.206:9422 (status:VALID)
		copy 2: 192.168.18.208:9422 (status:VALID)
[root@localhost ~]# mfsgetgoal /mfsdata/yq.txt					#查看文件在chunk中的份数
/mfsdata/yq.txt: 2
[root@localhost ~]# mfssetgoal -r 4 /mfsdata/yq.txt 			#重新设置文件的存储份数
/mfsdata/yq.txt:
 inodes with goal changed:                       1
 inodes with goal not changed:                   0
 inodes with permission denied:                  0
[root@localhost ~]# mfsgetgoal /mfsdata/yq.txt					#设置成功
/mfsdata/yq.txt: 4

2)mfs回收站机制

find /mfsmeta/ -type f							#找到删除文件名的位置
mv 00000003\|yq1.txt undel/						#进入后,将文件放入undel目录中即恢复

mfsgettrashtime		文件名						  #查看文件到回收站后,保留多久时间后销毁

mfssettrashtime		秒数		文件名			 	#设置回收站保留时间(时间的单位是秒(有用的值有:1 小时是3600 秒,24 - 86400 秒,1周 - 604800 秒))
[root@localhost ~]# mfsgettrashtime /mfsdata/yq.txt 
/mfsdata/yq.txt: 86400
[root@localhost ~]# mfssettrashtime 3600 /mfsdata/yq.txt 
/mfsdata/yq.txt: 3600
[root@localhost ~]# mfsgettrashtime /mfsdata/yq.txt 
/mfsdata/yq.txt: 3600

3)mfs的启动、停止

启动: 先启动mfs,在启动logger、chunkserver

停止: 先停止mfs,在停止logger、chunkserver

4)mfsmaster启动时,故障修复

mfsmaster服务器崩溃(故障断电等)

[root@localhost ~]# mfsmaster -a			#替代了 mfsmasterstore -a

5)mfsmaster监控服务

命令: mfscgiserv #开启master的监控

浏览器访问 master的IP:9425 #由python编写的网页

[root@localhost ~]# mfscgiserv

MFS监控