一、MFS基础
1.1 分布式文件系统
分布式文件系统(Distributed File System,简称DFS)是一种将物理存储资源通过网络连接到多个节点的文件管理方式。这些资源并不一定直接连接在本地设备上,而是分布在网络中的不同计算机中。
该系统为分布在各处的存储资源提供统一的逻辑视图,形成一个树状结构的虚拟文件系统,使用户能够像访问本地文件一样便捷地获取远程共享文件。用户在操作时无需感知文件实际存储的位置,只需打开对应的共享目录即可浏览和使用所有关联资源。
采用分布式文件系统的优势包括:集中化访问、简化操作流程、增强数据容灾能力以及提升读写性能。
常见的分布式文件系统有MFS(默认块大小为64MB)和HDFS(默认块大小为128MB)等。
1.2 MFS分布式文件系统
MFS(全称MooseFS,意为“驯鹿文件系统”)是一个具有冗余与容错机制的分布式网络文件系统。它能将数据分散存储于多台物理服务器或独立磁盘/分区中,并确保每份数据拥有多个副本备份。对于客户端而言,整个集群表现为单一的存储资源。
MFS基于FUSE(用户空间文件系统)架构实现,因此支持任何兼容FUSE的操作系统平台。
主要优点:
- 高可靠性: 可自定义设置每个文件的副本数量(至少两份),并将副本存放在不同的主机上以提高安全性。
- 高可扩展性: 可通过增加磁盘容量或新增服务器节点来灵活扩展整体存储规模。
- 高容错性: 支持配置回收站功能,在文件被删除后仍可在一段时间内保留,防止误删导致的数据丢失。
- 强一致性: 即使在文件正在被写入或访问的情况下,也能完成一致性的快照操作。
存在的局限性:
- 单点风险: 社区版本中Master节点为单点运行,存在故障隐患;企业版则已解决此问题。可通过部署Keepalived结合主备Master实现高可用方案。
- 内存消耗较高: Master在运行过程中需将全部元数据加载至内存,因此对服务器内存要求较高。
- 元数据同步延迟: 默认情况下,MetaLogger从Master同步日志的时间间隔较长,可能影响恢复效率。
1.3 MFS文件系统的组成部分
- 元数据服务器(Master): 负责整个MFS系统的管理,维护所有文件的元数据信息。
- 元数据日志服务器(MetaLogger): 用于备份Master服务器上的变更日志,保障元数据安全。
- 数据存储服务器(Chunk Server): 实际承载并存储用户数据的节点。
- 客户端(Client): 用户可通过类似挂载NFS的方式,将MFS文件系统挂载至本地进行访问。
1.4 MFS读取数据的处理流程
- 客户端向元数据服务器发起读取请求。
- 元数据服务器返回目标数据所在的Chunk Server地址(IP)及对应Chunk编号。
- 客户端根据返回信息,向指定的Chunk Server发送数据读取请求。
- Chunk Server将请求的数据传输给客户端。
1.5 MFS写入数据的处理流程
- 客户端向元数据服务器提交写入请求。
- 元数据服务器协调相关Chunk Server创建新的数据块(Chunks),待创建成功后接收确认反馈。
- 元数据服务器通知客户端可写入的具体位置(即哪个Chunk Server及其Chunk编号)。
- 客户端向指定的Chunk Server写入数据内容。
- 该Chunk Server与其他副本所在Chunk Server进行数据同步,完成后反馈写入成功状态。
- 客户端最终通知元数据服务器本次写入操作结束。
1.6 MFS常用端口号
| 端口 | 用途说明 |
|---|---|
| 9420 | MFS Master与Chunk Server之间的通信端口 |
| 9421 | MFS Master与Client之间的通信端口 |
| 9419 | MFS Master与MetaLogger之间的通信端口 |
| 9422 | Chunk Server与Client之间的数据传输端口 |
| 9425 | MFS Master Web监控页面监听端口,用于查看系统运行状态 |
二、MFS部署与应用
2.1 MFS项目示例及环境准备
本节介绍MFS的实际应用场景及部署前所需的软硬件环境准备情况。具体包括服务器规划、操作系统选择、网络配置、依赖库安装等内容,为后续的编译安装打下基础。
2.2 MFS编译安装
从源码构建MFS组件是推荐的部署方式之一,尤其适用于需要定制化配置的企业环境。安装过程通常包括下载官方源码包、安装依赖工具(如fuse-devel、gcc等)、解压、配置编译参数、执行make和make install命令。
各角色组件(Master、Chunk Server、Client、MetaLogger)可根据需求分别安装在不同主机上。
2.3 Master配置
Master作为核心控制节点,其配置文件一般位于/etc/mfs/mfsmaster.cfg。需正确设置日志路径、监听IP、副本策略、元数据文件位置等关键参数。启动服务前应确保防火墙开放所需端口,并检查系统资源是否满足要求。
2.4 MetaLogger配置
MetaLogger的作用是定期从Master拉取元数据变更日志并保存,以便在Master宕机时用于恢复。其配置文件为/etc/mfs/mfsmetalogger.cfg,重点配置项包括Master IP地址、日志存储路径及同步频率。
2.5 ChunkServer配置
Chunk Server负责实际的数据存储任务。配置文件为/etc/mfs/mfschunkserver.cfg,需设定绑定IP、工作目录、磁盘挂载点以及访问权限等。同时要保证共享目录具备足够的读写权限,并启用FUSE模块支持。
2.6 Client配置
客户端通过FUSE机制挂载MFS文件系统。安装mfs-client软件包后,使用mfsmount命令将远程MFS卷挂载至本地目录。例如:mfsmount /mnt/mfs -H mfsmaster。挂载成功后即可像操作本地文件一样进行读写。
三、MFS常用操作
3.1 副本管理操作
管理员可通过mfssetgoal命令设置指定文件或目录的副本数量,例如设置为3个副本:mfssetgoal 3 /path/to/file。使用mfsgetgoal可查看当前副本策略,而mfsfileinfo可用于查看某文件的实际副本分布情况。
3.2 MFS元数据日志管理
元数据日志记录了文件系统的所有结构变化,如创建、删除、重命名等操作。这些日志由Master生成并通过MetaLogger进行备份。定期检查日志完整性有助于快速恢复系统状态,尤其是在灾难恢复场景下至关重要。
3.3 Master服务器故障恢复
当Master发生故障时,若已部署MetaLogger,则可以从最新的metadata changelog文件重建元数据。具体步骤包括停止原Master服务、利用mfs-metadata-backup工具恢复数据、重新启动mfsmaster进程。
注意:恢复期间集群处于只读状态,直到新Master完全就绪。
3.4 MFS监控页面
通过浏览器访问Master的9425端口(如http://master_ip:9425),可以进入MFS内置的Web监控界面。该页面展示各Chunk Server状态、存储使用率、连接数、I/O统计等实时信息,便于运维人员掌握系统健康状况。
3.5 MFS集群维护
日常维护工作包括添加/移除Chunk Server、调整副本策略、清理回收站文件、升级软件版本、监控网络延迟与磁盘健康状态等。建议制定定期巡检计划,及时发现潜在问题,保障系统稳定运行。
随着公司业务规模的不断扩展,原有的NFS图片服务器架构逐渐暴露出诸多问题:
- NFS作为集中式存储方案,由多台服务器共享同一存储资源,导致其负载过高,性能瓶颈日益明显。同时,该架构缺乏冗余机制,存在单点故障风险。
- 为解决上述问题,我们选用了MFS(MooseFS)——一种具备容错能力、高可用性且支持横向扩展的分布式文件系统,适用于大规模数据存储场景。
环境准备
在部署MFS前,需完成以下基础配置工作:
-
关闭防火墙与SELinux
systemctl stop firewalld setenforce 0
-
配置主机解析记录
所有节点统一修改
/etc/hosts文件,确保主机名可正确解析。vim /etc/hosts
-
设置各主机的主机名
根据规划为每台服务器设定对应的主机名。
-
安装必要的编译工具和依赖包
yum install gcc make libpcap-devel zlib-devel fuse fuse-devel fuse-libs pkgconfig
FUSE简介:用户空间文件系统(Filesystem in Userspace,简称FUSE)是一种在用户态实现的文件系统机制。Linux通过内核模块支持FUSE,通常2.6及以上版本的内核均已内置此功能。
MFS源码编译与安装
所有节点均采用相同方式安装MFS程序。
-
创建专用运行用户
为安全起见,创建无登录权限的mfs服务账户。
useradd -M -s /sbin/nologin moosefs
-
解压并配置源码编译参数
tar -zxvf moosefs-v3.0.115.tar.gz -C /usr/src/ cd /usr/src/moosefs-3.0.115/ ./configure \ --prefix=/usr/local/moosefs \ --with-default-user=moosefs \ --with-default-group=moosefs \ --enable-mfsmount
-
执行编译与安装
先获取CPU核心数以优化编译速度:
grep processor /proc/cpuinfo | wc -l nproc
make -j 2 make install -j 2
-
复制默认配置模板
进入安装目录下的配置路径,将示例配置文件复制为正式配置文件。
cd /usr/local/moosefs/etc/mfs cp mfsmaster.cfg.sample mfsmaster.cfg cp mfschunkserver.cfg.sample mfschunkserver.cfg cp mfsexports.cfg.sample mfsexports.cfg
cp mfstopology.cfg.sample mfstopology.cfg cp mfsmetalogger.cfg.sample mfsmetalogger.cfg cp mfsmount.cfg.sample mfsmount.cfg cp mfshdd.cfg.sample mfshdd.cfg
Master节点配置
-
初始化元数据文件
首次安装后会生成空的
metadata.mfs.empty文件,需重命名为metadata.mfs供master使用。cd /usr/local/moosefs/var/mfs mv metadata.mfs.empty metadata.mfs
-
编辑主配置文件mfsmaster.cfg
cd /usr/local/moosefs/etc/mfs vim mfsmaster.cfg
-
配置访问控制策略mfsexports.cfg
注意:该访问控制规则对旧版客户端可能不生效。
vim mfsexports.cfg
-
启动Master服务
ln -s /usr/local/moosefs/sbin/mfsmaster /usr/local/sbin/ mfsmaster start
-
验证服务状态
检查mfsmaster进程是否正常监听端口。
netstat -anpt | grep mfsmaster
MetaLogger节点配置
-
修改日志服务器配置文件
vim /usr/local/moosefs/etc/mfs/mfsmetalogger.cfg
-
启动MetaLogger服务
ln -s /usr/local/mfs/sbin/mfsmetalogger /usr/local/sbin/ mfsmetalogger start
-
确认服务运行情况
netstat -anpt | grep mfs
ChunkServer节点配置
-
调整ChunkServer配置文件
vim /usr/local/moosefs/etc/mfs/mfschunkserver.cfg
2.6 Client配置
加载fuse模块以支持文件系统挂载:
modprobe fuse
创建用于挂载MFS文件系统的目录:
mkdir /mnt/mfs
为客户端挂载命令创建软链接,便于全局调用:
ln -s /usr/local/moosefs/bin/mfsmount /usr/local/bin/
执行挂载操作,将MFS分布式文件系统挂载至本地/mnt/mfs目录,指定主服务器地址:
mfsmount /mnt/mfs/ -H mfsmaster
验证挂载结果,查看当前系统挂载的文件系统类型及使用情况:
df -Th
2 磁盘空间配置与ChunkServer启动
编辑MooseFS的磁盘配置文件,添加可用存储路径:
vim /usr/local/moosefs/etc/mfs/mfshdd.cfg
对新增硬盘进行分区操作,并创建挂载点:
fdisk /dev/sdx
mkdir /data
修改目录所属用户和组为moosefs,确保服务有读写权限:
chown -R moosefs:moosefs /data
完成磁盘挂载:
mount /dev/sdx /data
为ChunkServer服务程序创建系统级软链接,方便调用:
ln -s /usr/local/moosefs/sbin/mfschunkserver /usr/local/sbin/
启动ChunkServer服务:
mfschunkserver start
检查服务运行状态,确认MFS相关进程已正常监听端口:
netstat -anpt | grep mfs
三、MFS常用操作
3.1 副本管理操作
在MooseFS中,副本的最大数量不能超过当前活跃的ChunkServer节点总数。当某个存储副本的节点失效时,系统会自动在其他节点上重建副本;若原节点恢复并重新接入集群,则多余副本会被自动清理。
查看指定文件的副本设置数量:
mfsgetgoal a.txt
设置文件a.txt的副本数为2:
mfssetgoal 2 a.txt
查看文件副本的详细分布信息:
mfsfileinfo a.txt
3.2 MFS元数据日志查看
进入元数据日志存储目录:
cd /usr/local/moosefs/var/mfs
查看最新的变更日志内容:
cat changelog_ml.0.mfs
在Master服务器上也可查看同步的日志信息(通常由metalogger推送):
3.3 Master服务器故障恢复
当Master服务器发生崩溃后,可通过MetaLogger服务器上的备份日志进行恢复。
首先,在MetaLogger服务器上将元数据备份文件复制到Master服务器:
cd /usr/local/moosefs/var/mfs
scp -rp ./* root@mfsmaster:/usr/local/moosefs/var/mfs/
随后,在Master服务器上启动主控服务:
mfsmaster start
检查Master服务是否成功启动并监听相应端口:
netstat -anpt | grep mfsmaster
3.4 MFS监控页面配置
在Master服务器上启动CGI监控服务,提供Web可视化界面:
/usr/local/moosefs/sbin/mfscgiserv
确认服务已在默认端口9425上运行:
netstat -anpt | grep 9425
通过浏览器访问以下地址查看集群状态:
http://192.168.1.100:9425
3.5 MFS集群维护流程
安全启动MFS集群的顺序如下:
- 首先启动主控服务:
mfsmaster - 然后依次启动所有
mfschunkserver服务 - 若已配置,启动
mfsmetalogger服务 - 待所有ChunkServer成功连接至Master后(可通过日志或CGI监控确认),客户端方可使用
mfsmount挂载文件系统
安全停止MFS集群的步骤如下:
- 在所有客户端卸载MFS挂载点,使用:
umount /mnt/mfs - 逐个停止各ChunkServer服务:
mfschunkserver stop - 停止MetaLogger服务:
mfsmetalogger stop - 最后停止Master服务:
mfsmaster stop


雷达卡


京公网安备 11010802022788号







