5 MFS分布式对象存储
一:原理:
1)读取:
1.client向master请求数据位置,master发送数据所在chunk位置
2.client向chunk请求数据,chunk发送数据给client

2)写入:
1.client向master请求数据写入位置
2.master向chunk中根据请求创建存储空间,并标记;chunk创建成功后返回信息给master
3.master返回给client信息:数据写入位置(ip、端口、chunkid)
4.client向chunk中写入数据
5.chunk进行数据备份,成功后返回给client,写入成功的信息
6.client接受写入成功信息后,向master发送写入结束信息

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-1 | 192.168.18.201 | master | 部署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-2 | 192.168.18.202 | logger | 部署日志服务器 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-9 | 192.168.18.206~209 | chunk | 添加磁盘、部署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-5 | 192.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
