一、MFS 优越特性
- Free (GPL): 通用文件系统,开源免费。
- 在线扩容: 体系架构具有极强的可伸缩性,支持在线扩容。
- 部署简单。
- 高可用性: 支持设置任意文件冗余(数据分区)程度,提供比RAID10更高的冗余级别,同时不会影响读写性能,反而会加速。
- 文件回收站: 提供系统级别的服务,允许在指定时间内恢复已删除的文件。
- 快照特性: 采用了快照和日志(log)两种机制
- 动态平衡:持久化 会自动对存储空间进行动态分配和平衡
二、MFS 工作原理和设计架构
角色及其作用
- 管理服务器 (Master Server): 调度数据存储,管理文件操作。
- 元数据日志服务器 (Metalogger Server): 备份日志,支持数据恢复(类似回收站)。
- 数据存储服务器 (Chunk Servers): 提供存储空间和数据访问。
- 客户端 (Client Computers): 通过fuse接口访问远程文件系统。
MFS 数据处理流程
![[Pasted image 20241107184914.png]]
读数据过程
- 客户端向Master 发起查询请求。
- Master会提供chunk服务器的IP地址、端口和chunkID给客户端。
- 客户端再与指定的chunk服务器建立连接并查询数据。
- chunk服务器会把查询的数据进行返回给客户端
写数据过程
- 客户端向Master 发起写入请求。
- Master负责检查后方chunk(创ke)服务器是否有可用存储空间并为其预定存储块。
- 一旦预约成功, Master会提供chunk服务器的IP地址、端口和chunkID给客户端。
- 客户端再与指定的chunk服务器建立连接并写入数据。
- 数据写入后,多个chunk服务器之间会进行数据同步,同时客户端需通知Maste服务器数据存储成功,以便Maste服务器更新其内存中的数据映射关系
![[Pasted image 20241107200710.png]]
修改或删除文件过程
- 删除文件:
- 客户端向Master发送删除信息。
- Master定位元数据并异步清理数据块。
- 响应客户端删除成功。
- 修改文件内容:
- 客户端向Master发送操作信息。
- Master为.swp文件申请新的块。
- 客户端关闭文件后,向Master发送关闭信息。
- Master检测内容更新,如有更新则申请新块存储,删除旧块和.swp文件块;
- 若无更新则直接删除.swp文件块。
重命名文件过程
- 客户端向Master发送操作信息。
- Master修改元数据中的文件名。
- 返回重命名完成信息。
遍历文件过程
- 客户端向Master发送遍历请求。
- Master返回元数据信息。
- 客户端接收并显示信息。
注解
- Master记录文件路径、大小、存储位置、份数、时间等信息,这些信息存在内存中,并定期写入
metadata.mfs.back
文件,同步到Metalogger。 - 文件以64MB为单位存储,不足64MB的文件,其chunk大小等于文件大小。超过64MB的文件将被分割成多个不超过64MB的chunk。
- Chunkserver上的剩余空间必须足够大,否则会出现"no space left on device"的错误。
- 文件可以设置多份副本,副本数量不能超过Chunkserver的数量。
三、MFS 安装、部署、配置
准备环境
- 确保所有节点能够通过YUM源安装必要的软件包,并且关闭防火墙与SELinux设置。
- Chunk server 1 和 Chunk server 2 必须要至少有2块磁盘
IP | 身份 |
---|---|
192.168.90.120 | Master server |
192.168.90.110 | Metalogger server |
192.168.90.130 | Chunk server 1 |
192.168.90.140 | Chunk server 2 |
192.168.90.150 | Client server |
官方网站:http://ppa.moosefs.com/src/
Master Server 配置
安装
yum -y install gcc zlib-devel
useradd -r -s /sbin/nologin mfs
tar -xf moosefs-3.0.101-1.tar.gz
cd moosefs-3.0.101
#就启用mfsmaster
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmetalogger --disable-mfsmount
make && make install
配置
ln -s /usr/local/mfs/bin/* /usr/local/bin/
ln -s /usr/local/mfs/sbin/* /usr/local/sbin/
cd /usr/local/mfs/etc/mfs
cp -a mfsmaster.cfg.sample mfsmaster.cfg #无需修改
#讲解mfsmaster.cfg的配置文件
WORKING_USER = mfs #共享目录所有者
WORKING_GROUP = mfs #共享目录所有组
SYSLOG_IDENT = mfsmaster #共享目录的服务名
LOCK_MEMORY = 0 #限制使用内存的大小
# chunk服务器监听端口 MATOCS_LISTEN_PORT = 9420
# 回收站服务器监听端口 MATOML_LISTEN_PORT = 9419
# 客户端监听端口 MATOCL_LISTEN_PORT = 9421cp -a mfstopology.cfg.sample mfstopology.cfg
cp -a mfsexports.cfg.sample mfsexports.cfg
vim mfsexports.cfg #默认改好不用修改
#mfsexports.cfg 配置示例:
#客户端IP 允许挂载的目录 客户端拥有的权限
192.168.0.0/24 / rw,alldirs,maproot=0:0 # /标识MFS的根
192.168.0.0/24 . rw # .标识MFSMETA 文件系统
管理
cd /usr/local/mfs/var/mfs
cp -a metadata.mfs.empty metadata.mfs
mfsmaster start / systemctl enable --now moosefs-master
netstat -anpt | grep mfs
注意: 不要直接kill master服务,应使用mfsmaster stop
安全停止,避免因metadata.mfs.back文件导致的问题。
Metalogger Server(回收站) 配置
安装
yum -y install gcc zlib-devel
useradd -r -s /sbin/nologin mfs
tar -xf moosefs-3.0.101-1.tar.gz
cd moosefs-3.0.101
#就启用mfsmetalogger./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmaster --disable-mfsmount
make && make install
配置
ln -s /usr/local/mfs/bin/* /usr/local/bin/
ln -s /usr/local/mfs/sbin/* /usr/local/sbin/
cd /usr/local/mfs/etc/mfs
cp -a mfsmetalogger.cfg.sample mfsmetalogger.cfg
vim mfsmetalogger.cfg
#mfsmetalogger.cfg 配置文件的修改:
META_DOWNLOAD_FREQ = 2 #修改后为每2小时从master server上下载一个metadata.mfs文件
MASTER_HOST = 192.168.90.120 #master ip
管理
mfsmetalogger start / systemctl enable --now moosefs-metalogger # 启动命令
#在master用这个netstat -anpt | grep mfs 查看
Chunk Server 配置
安装
yum -y install gcc zlib-devel
useradd -r -s /sbin/nologin mfs
tar -xf moosefs-3.0.101-1.tar.gz
cd moosefs-3.0.101
#就启用mfschunkserver
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfsmount --disable-mfsmetalogger
make && make install
配置
ln -s /usr/local/mfs/bin/* /usr/local/bin/
ln -s /usr/local/mfs/sbin/* /usr/local/sbin/
cd /usr/local/mfs/etc/mfs
cp -a mfschunkserver.cfg.sample mfschunkserver.cfg
vim mfschunkserver.cfg
#mfschunkserver.cfg** 配置示例
MASTER_HOST = 192.168.90.120
HDD_CONF_FILENAME = /usr/local/mfs/etc/mfs/mfshdd.cfg #可以不用改
cp -a mfshdd.cfg.sample mfshdd.cfg
mkdir /chunk #创建共享目录
vim mfshdd.cfg
#mfshdd.cfg 配置文件的修改:
/chunk#格式化并挂载硬盘
mkfs.xfs /dev/sdb
mount /dev/sdb /chunk/
#授权
chown -R mfs.mfs /chunk
管理
mfschunkserver start / systemctl enable --now moosefs-chunkserver#启动命令#在master用这个netstat -anpt | grep mfs 查看
Client Server 配置
安装
yum -y install gcc zlib-devel fuse fuse-devel fuse-libs
useradd -r -s /sbin/nologin mfs
tar -xf moosefs-3.0.101-1.tar.gz
cd moosefs-3.0.101
#就启用mfsmount
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver --disable-mfsmetalogger
make && make install
测试
ln -s /usr/local/mfs/bin/* /usr/local/bin/ln -s /usr/local/mfs/sbin/* /usr/local/sbin/
mkdir /mfsdata #MasterServer共享存储目录
mkdir /mfsmeta #MetaloggerServer回收站
mfsmount /mfsdata/ -H 192.168.90.120 #挂载MasterServer共享存储目录
mfsmount -m /mfsmeta/ -H 192.168.90.120 #mfsmount -m挂载回收站目录
#测试
cd /mfsdata/ #注意不能用vim创建文件因为vim会产生交换文件,最好用echo
echo "xxxx" >> a.txt
echo "xxxx" >> hello.txt
注意: -H
参数用于指定Master Server的IP地址。
四、MFS 高级特性
设置文件冗余(副本)
- 使用
mfssetgoal
设置文件副本数。 - 使用
mfsgetgoal
查看文件副本数。 - 使用
mfsrsetgoal
递归设置目录树的副本数。
#客户端(在上面搭建好的基础上)
cd /mfsdata/
echo "xxxx" >> a.txt
echo "xxxx" >> hello.txt
#设置文件副本数为2
mfssetgoal 2 a.txt
#设置文件副本数修改为1
mfssetgoal -r 1 a.txt
#查看文件副本数
mfsgetgoal a.txt /mfsfileinfo a.txt
回收站
- 使用
mfssettrashtime
设置文件在回收站中的保留时间。 - 使用
mfsgettrashtime
查看文件的回收站保留时间。 - 使用
mfsmount -m
挂载MFSMETA文件系统,以访问回收站中的文件。 - 使用
mv
命令将文件移至/trash/undel
目录下以恢复文件。
#在上面的基础上
#共享存储目录
cd /mfsdata/
mfssettrashtime 604800 /mfsdata/a.txt #设置保留时间
rm -fr /mfsdata/a.txt
#回收站
cd /mfsmeta/
yum -y install tree
#过滤出文件在回收站哪里
tree | more
cd ./trash/002/
#还原数据
mv 00000002\|a.txt undel/
#到共享存储目录查看
ls /mfsdata/
- MFS的回收机制是什么,它是否真正删除了文件?MFS的回收机制实际上并不是真正的删除,而是将文件的映射关系从未删除数据映射区域移到已删除数据映射区域。
MFS 启动和关闭
- 启动MFS集群:
- 启动
mfsmaster
进程。 - 启动所有
mfschunkserver
进程。 - 启动
mfsmetalogger
进程(如果配置了)。 - 当所有Chunkserver连接到MFS Master后,客户端可以挂载文件系统。
- 启动
- 停止MFS集群:
- 卸载所有客户端的MFS文件系统。
- 停止
mfsmaster
进程。 - 停止
mfschunkserver
进程。 - 停止
mfsmetalogger
进程。
MFS Master 故障修复
- 如果Master崩溃,使用
mfsmetarestore
工具合并最后一个元数据日志到主元数据中。 - 使用
mfsmaster -a
命令启动Master服务。 - MFS故障恢复流程是怎样的?
- 当MFS集群出现故障时,如果master上的必要文件仍存在,可通过mfsmaster -a命令自动读取并加载文件。若文件丢失,需通过指定路径使用mfsmaster -a命令恢复。此外,还可以通过监控工具查看MFS运行状态和进程数量,验证部署是否成功及正常运行
![[Pasted image 20241108220341.png]]
MFS master 启动监控服务
/usr/local/mfs/sbin/mfscgiserv 使用浏览器访问master:9425,注意master主机名