MFS分布式文件系统

[ mfs工作原理 ]

分布式原理
分布式文件系统就是把一些分散在多台计算机上的共享文件夹,集合到一个共享文件夹内,用户要访问这些文件夹的时候,只要打开一个文件夹,就可以的看到所有链接到此文件夹内的共享文件夹。

.

MFS原理


MFS是一个具有容错性的网络分布式文件系统,它把数据分散存放在多个物理服务器上,而呈现给用户的则是一个统一的资源。

1)MFS的组成

元数据服务器(Master):在整个体系中负责管理文件系统,维护元数据,目前不支持高可用。
元数据日志服务器(MetaLogger):备份Master服务器的变化日志文件,当master服务器损坏,可以从日志服务器中取得文件恢复。
数据存储服务器(Chunk Server):真正存储数据的服务器,服务器越多,容量就越大,可靠性越高,性能越好。
客户端(Client): 可以像挂载NFS一样 挂载MFS文件系统

2)MFS读数据的处理过程

客户端向元数据服务器发出读请求
元数据服务器把所需数据存放的位置(Chunk Server的IP地址和Chunk编号)告知客户端
客户端向已知的Chunk Server请求发送数据
Chunk Server向客户端发送数据
.

3)写入的过程

客户端向元数据服务器发送写入请求
元数据服务器与Chunk Server进行交互,但元数据服务器只在某些服务器创建新的分块Chunks,创建成功后由hunk Servers告知元数据服务器操作成功
元数据服务器告知客户端,可以在哪个Chunk Server的哪些Chunks写入数据
客户端向指定的Chunk Server写入数据
该Chunk Server与其他Chunk Server进行数据同步,同步成功后Chunk Server告知客户端数据写入成功
客户端告知元数据服务器本次写入完毕 

实验环境:

1 为master 192.168.136.186
2 作为日志服务器 192.168.136.167
3 4 作为存储端 192.168.136.251
192.168.136.185
5 作为客户端 192.168.136.253

1配置master服务器

#安装环境包
yum install -y zlib-devel gcc gcc-c++
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# mkdir /abc
[root@localhost ~]# mount.cifs //192.168.100.25/mfs /abc/
Password for root@//192.168.100.25/mfs:
[root@localhost abc]# cd mfs/
[root@localhost mfs]# ls
fuse-2.9.2.tar.gz  mfs-1.6.27-5.tar.gz
[root@localhost mfs]# tar zxvf mfs-1.6.27-5.tar.gz -C /opt
cd /opt/mfs-1.6.27/
[root@localhost mfs-1.6.27]# useradd -s /sbin/nologin mfs
#指定mfs安装路径
#指定默认用户和组
#禁用chunkserver,存储端才用到
#clinet终端才会用到mount
./configure 
--prefix=/usr/local/mfs 
--with-default-user=mfs 
--with-default-group=mfs 
--disable-mfschunkserver 
--disable-mfsmount
[root@localhost mfs-1.6.27]# make && make install
[root@localhost mfs-1.6.27]# cd /usr/local/mfs/etc/mfs/
#默认生成四个配置文件模板,还有一个拓扑结构的文件可开可不开
[root@localhost mfs]# ls
mfsexports.cfg.dist  mfsmetalogger.cfg.dist
mfsmaster.cfg.dist   mfstopology.cfg.dist
cp mfsmaster.cfg.dist mfsmaster.cfg #master配置文件拷贝出来
cp mfsexports.cfg.dist mfsexports.cfg #挂载权限放开,客户端要进行挂载
cp mfsmetalogger.cfg.dist mfsmetalogger.cfg #自己的日志文件放开
[root@localhost mfs]# cd /usr/local/mfs/var/mfs/
#master运行中自动会产生一个源数据文件,运行时会写数据进去
cp metadata.mfs.empty metadata.mfs
#工作目录权限放开
[root@localhost mfs]# chown -R mfs.mfs /usr/local/mfs/
#开启mfs
[root@localhost mfs]# /usr/local/mfs/sbin/mfsmaster start
#查看mfs进程有没有开启
[root@localhost mfs]# ps -ef | grep mfs
mfs       18034      1  0 14:30 ?        00:00:00 /usr/local/mfs/sbin/mfsmaster start
root      19619   2807  0 14:31 pts/1    00:00:00 grep --color=auto mfs

2搭建日志服务器

默认为24小时,即每小时隔一天从元数据服务MASTER下载一个metadata.mfs
当元数据服务器关闭或者出故障时,matedata.mfs.back 文件将消失,
那么要恢复整个mfs,则需从metalogger服务器取得该文件。
请特别注意这个文件,它与日志文件一起
才能够恢复整个损坏的分布式文件系统
#安装环境包
yum install -y zlib-devel gcc gcc-c++
[root@localhost ~]# mkdir /abc
[root@localhost ~]# mount.cifs //192.168.100.25/mfs /abc/
Password for root@//192.168.100.25/mfs:
[root@localhost ~]# cd /abc/
[root@localhost abc]# ls
mfs
[root@localhost abc]# cd mfs/
[root@localhost mfs]# tar zxvf mfs-1.6.27-5.tar.gz -C /opt/
[root@localhost mfs]# cd /opt/mfs-1.6.27/
#创建用户不让它登录主控制台
[root@localhost mfs-1.6.27]# useradd -s /sbin/nologin mfs
./configure 
--prefix=/usr/local/mfs 
--with-default-user=mfs 
--with-default-group=mfs 
--disable-mfschunkserver 
--disable-mfsmount
make && make install
#默认生成四个配置文件,我们只需要日志配置文件
[root@localhost mfs-1.6.27]# cd /usr/local/mfs/etc/mfs/
[root@localhost mfs]# cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
[root@localhost mfs]# vim mfsmetalogger.cfg
15  MASTER_HOST = 192.168.136.186 #指向主服务器的地址
[root@localhost mfs]# /usr/local/mfs/sbin/mfsmetalogger start  #开启日志服务器
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmetalogger modules ...
mfsmetalogger daemon initialized properly
[root@localhost mfs]# ps -ef | grep mfs  #查看日志服务器进程是否起来了
mfs      100628      1  0 15:00 ?        00:00:00 /usr/local/mfs/sbin/mfsmetalogger start
root     100939  51459  0 15:00 pts/1    00:00:00 grep --color=auto mfs

配置3和4两台存储服务器

yum install -y zlib-devel gcc gcc-c++
useradd -s /sbin/nologin mfs
[root@localhost ~]# mkdir /abc
[root@localhost ~]# mount.cifs //192.168.100.25/mfs /abc/
Password for root@//192.168.100.25/mfs:
[root@localhost ~]# cd /abc/
[root@localhost abc]# ls
mfs
[root@localhost abc]# cd mfs/
[root@localhost mfs]# tar zxvf mfs-1.6.27-5.tar.gz -C /opt/
[root@localhost mfs]# cd /opt/mfs-1.6.27/
./configure 
--prefix=/usr/local/mfs 
--with-default-user=mfs 
--with-default-group=mfs 
--disable-mfsmaster 
--disable-mfsmount
make && make install
[root@localhost mfs-1.6.27]# cd /usr/local/mfs/etc/mfs/
[root@localhost mfs]# ls
mfschunkserver.cfg.dist  mfshdd.cfg.dist
[root@localhost mfs]# cp mfschunkserver.cfg.dist mfschunkserver.cfg #存储服务器配置文件拷贝一份出来
[root@localhost mfs]# cp mfshdd.cfg.dist mfshdd.cfg #硬盘配置文件拷贝出来
#指向主服务器
[root@localhost mfs]# vim mfschunkserver.cfg
12  MASTER_HOST = 192.168.136.186
[root@localhost mfs]# vim mfshdd.cfg
/data #加上指定存储目录
#创建存储目录
[root@localhost mfs]# mkdir /data
[root@localhost mfs]# chown -R mfs.mfs /data/ #递归提权
[root@localhost mfs]# /usr/local/mfs/sbin/mfschunkserver start #开启存储服务器

4存储端跟上面存储端一样的操作(这里不重复了)

5客户端,专门连接master进行挂载

[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
yum install gcc gcc-c++ zlib-devel -y
#安装内核模块fuse,客户端和master挂载
[root@localhost ~]# mkdir /abc
[root@localhost ~]# mount.cifs //192.168.100.25/mfs /abc/
Password for root@//192.168.100.25/mfs:
[root@localhost ~]# cd /abc/mfs/
[root@localhost mfs]# tar zxvf fuse-2.9.2.tar.gz -C /opt/
[root@localhost mfs]# cd /opt/
[root@localhost opt]# cd fuse-2.9.2/
[root@localhost fuse-2.9.2]# ./configure
make && make install
#更改环境变量.检索系统中安装信息
[root@localhost fuse-2.9.2]# vim /etc/profile
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
[root@localhost fuse-2.9.2]# source /etc/profile
#安装mfs客户端
[root@localhost fuse-2.9.2]# useradd -s /sbin/nologin mfs
[root@localhost fuse-2.9.2]# cd /abc/mfs/
[root@localhost mfs]# tar zxvf mfs-1.6.27-5.tar.gz -C /opt/
[root@localhost mfs]# cd /opt/mfs-1.6.27/
./configure 
--prefix=/usr/local/mfs 
--with-default-user=mfs 
--with-default-group=mfs 
--disable-mfsmaster 
--disable-mfschunkserver 
--enable-mfsmount #开启客户端
make && make install
mkdir /opt/mfs
modprobe fuse #加载fuse模块到内核
#挂载到主服务器
/usr/local/mfs/bin/mfsmount /opt/mfs -H 192.168.136.186
[root@localhost mfs-1.6.27]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        20G  3.6G   17G   18% /
devtmpfs                devtmpfs  897M     0  897M    0% /dev
tmpfs                   tmpfs     912M     0  912M    0% /dev/shm
tmpfs                   tmpfs     912M  9.0M  903M    1% /run
tmpfs                   tmpfs     912M     0  912M    0% /sys/fs/cgroup
/dev/sda1               xfs       4.0G  179M  3.9G    5% /boot
/dev/mapper/centos-home xfs        10G   37M   10G    1% /home
tmpfs                   tmpfs     183M   20K  183M    1% /run/user/0
/dev/sr0                iso9660   4.3G  4.3G     0  100% /run/media/root/CentOS 7 x86_64
//192.168.100.25/mfs    cifs      300G  175G  126G   59% /abc
192.168.136.186:9421    fuse.mfs   15G     0   15G    0% /opt/mfs
#优化客户端
[root@localhost mfs-1.6.27]# vim /etc/profile
#加入环境变量路径,下次可以直接挂载
export PATH=/usr/local/mfs/bin:$PATH
#复制一份文件副本出来
[root@localhost mfs-1.6.27]# mfsgetgoal -r /opt/mfs/
/opt/mfs/:
directories with goal  1 :
#master启动监控状态
[root@localhost ~]# /usr/local/mfs/sbin/mfscgiserv
lockfile created and locked
starting simple cgi server (host: any , port: 9425 , rootpath: /usr/local/mfs/share/mfscgi)

登录192.168.136.186:9425验证状态

MFS分布式文件系统

以上就是我们全部的内容