MooseFS (MFS) 分布式对象存储

v

一、MFS 优越特性

  • Free (GPL): 通用文件系统,开源免费。
  • 在线扩容: 体系架构具有极强的可伸缩性,支持在线扩容。
  • 部署简单
  • 高可用性: 支持设置任意文件冗余(数据分区)程度,提供比RAID10更高的冗余级别,同时不会影响读写性能,反而会加速。
  • 文件回收站: 提供系统级别的服务,允许在指定时间内恢复已删除的文件。
  • 快照特性: 采用了快照和日志(log)两种机制
  • 动态平衡:持久化 会自动对存储空间进行动态分配和平衡

二、MFS 工作原理和设计架构

角色及其作用

  • 管理服务器 (Master Server): 调度数据存储,管理文件操作。
  • 元数据日志服务器 (Metalogger Server): 备份日志,支持数据恢复(类似回收站)。
  • 数据存储服务器 (Chunk Servers): 提供存储空间和数据访问。
  • 客户端 (Client Computers): 通过fuse接口访问远程文件系统。

MFS 数据处理流程

![[Pasted image 20241107184914.png]]

读数据过程
  1. 客户端向Master 发起查询请求。
  2. Master会提供chunk服务器的IP地址、端口和chunkID给客户端。
  3. 客户端再与指定的chunk服务器建立连接并查询数据。
  4. chunk服务器会把查询的数据进行返回给客户端
写数据过程
  1. 客户端向Master 发起写入请求。
  2. Master负责检查后方chunk(创ke)服务器是否有可用存储空间并为其预定存储块。
  3. 一旦预约成功, Master会提供chunk服务器的IP地址、端口和chunkID给客户端。
  4. 客户端再与指定的chunk服务器建立连接并写入数据。
  5. 数据写入后,多个chunk服务器之间会进行数据同步,同时客户端需通知Maste服务器数据存储成功,以便Maste服务器更新其内存中的数据映射关系
    ![[Pasted image 20241107200710.png]]
修改或删除文件过程
  • 删除文件:
    1. 客户端向Master发送删除信息。
    2. Master定位元数据并异步清理数据块。
    3. 响应客户端删除成功。
  • 修改文件内容:
    1. 客户端向Master发送操作信息。
    2. Master为.swp文件申请新的块。
    3. 客户端关闭文件后,向Master发送关闭信息。
    4. Master检测内容更新,如有更新则申请新块存储,删除旧块和.swp文件块;
    5. 若无更新则直接删除.swp文件块。
重命名文件过程
  1. 客户端向Master发送操作信息。
  2. Master修改元数据中的文件名。
  3. 返回重命名完成信息。
遍历文件过程
  1. 客户端向Master发送遍历请求。
  2. Master返回元数据信息。
  3. 客户端接收并显示信息。

注解

  • 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.120Master server
192.168.90.110Metalogger server
192.168.90.130Chunk server 1
192.168.90.140Chunk server 2
192.168.90.150Client 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集群:
    1. 启动mfsmaster进程。
    2. 启动所有mfschunkserver进程。
    3. 启动mfsmetalogger进程(如果配置了)。
    4. 当所有Chunkserver连接到MFS Master后,客户端可以挂载文件系统。
  • 停止MFS集群:
    1. 卸载所有客户端的MFS文件系统。
    2. 停止mfsmaster进程。
    3. 停止mfschunkserver进程。
    4. 停止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主机名

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/13640.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【常见问题解答】远程桌面无法复制粘贴的解决方法

提示:文中提出了“远程桌面无法复制粘贴文件到本地”问题的三种解决方法,其中“方法 3:重启 RDP 剪贴板监视程序”亲测有效。 目录 一、问题描述二、解决方法1.方法1:设置远程桌面连接(1)打开远程桌面连接,点击【显示选项】(2)勾选“剪贴板”,并点击【详细信息】(3)…

探索光耦:达林顿光耦的特点与应用

在现代电子设备中,光耦作为信号隔离和传输的核心元件之一,扮演着至关重要的角色。达林顿光耦凭借其独特的电流放大能力和可靠性,在众多应用中脱颖而出。本文将探讨达林顿光耦的特点及其广泛的应用。 达林顿光耦的主要特点 高电流放大倍数&a…

河南省的一级科技查新机构有哪些?

科技查新,简称查新,是指权威机构对查新项目的新颖性作出文献评价的情报咨询服务。这一服务在科研立项、成果鉴定、项目申报等方面发挥着至关重要的作用。河南省作为中国的重要科技和教育基地,拥有多个一级科技查新机构,为本省及全…

数据结构 ——— 层序遍历链式二叉树

目录 链式二叉树示意图​编辑 何为层序遍历 手搓一个链式二叉树 实现层序遍历链式二叉树 链式二叉树示意图 何为层序遍历 和前中后序遍历不同,前中后序遍历链式二叉树需要利用递归才能遍历 而层序遍历是非递归的形式,如上图:层序遍历的…

【故障解决】麒麟系统右下角网络图标取消显示叹号

原文链接:【故障解决】麒麟系统右下角网络图标取消显示叹号 Hello,大家好啊!今天给大家带来一篇关于如何在麒麟系统中解决网络图标出现感叹号问题的文章。在日常使用麒麟系统的过程中,我们在内网或公网环境下,有时会遇…

Spring boot 集成 nacos、redis、mysql

1,准备好nacos环境,准备ncc.yml配置: 在配置添加 test: haha 2,添加依赖 在pom.xml 文件中添加Nacos 客户端的依赖,样例使用Spring Cloud Alibaba 版本使用2023.x 分支,详情可查看 版本发布说明-阿里云S…

力扣 LeetCode 206. 反转链表(Day2:链表)

解题思路: pre ,cur双指针 需要通过tmp暂存cur的下一个位置,以方便cur的下一步移动 class Solution {public ListNode reverseList(ListNode head) {ListNode pre null;ListNode cur head;while (cur ! null) {ListNode tmp cur.next;c…

golang 实现比特币内核:公钥的 SEC 编码格式详解

比特币作为区块链的一个应用,它建立在分布式系统之上,‘节点’遍布全球。为了使所有节点协同工作并作为一个整体系统运行,需要保持所有节点同步在相同的状态中,也就是说节点之间需要频繁通信,并且相互交换大量数据消息。这要求在网络上传输的消息或数据要使用某种格式编码…

v-html 富文本中图片使用element-ui image-viewer组件实现预览,并且阻止滚动条

效果 导入组件 import ElImageViewer from "element-ui/packages/image/src/image-viewer"; components:{ ElImageViewer },模板使用组件 <el-image-viewerv-if"isShowPics":on-close"closeViewer":url-list"srcList"/>定义两…

Redhat7.9 安装 KingbaseES 金仓数据库 V9单机版(图形化安装)

Redhat7.9 安装 KingbaseES 金仓数据库 V9单机版 ——图形化安装 一、安装前规划1.1 安装包下载1.2 环境信息 二、操作系统配置2.1 检查操作系统和内存2.2 关闭防火墙和selinux2.3 配置内核参数(/etc/sysctl.conf)2.4 配置资源使用参数(/etc/security/limits.conf)2.5 配置Remo…

【Linux】进程状态的优先级

大家好呀&#xff0c;我是残念&#xff0c;希望在你看完之后&#xff0c;能对你有所帮助&#xff0c;有什么不足请指正&#xff01;共同学习交流哦 本文由&#xff1a;残念ing原创CSDN首发&#xff0c;如需要转载请通知 个人主页&#xff1a;残念ing-CSDN博客&#xff0c;欢迎各…

【Linux:IO多路复用(select函数)

什么是IO多路复用&#xff1f; 一种网络通信的手段&#xff0c;IO多路复用可以同时监测多个文件描述符&#xff0c;且这个过程是阻塞的&#xff0c;当检测有文件描述符就绪&#xff0c;程序的阻塞就会解除&#xff0c;就可以通过这些就绪的文件描述符进行通信。通过这种方式在…

软件工程笔记二—— 软件生存期模型

目录 瀑布模型 瀑布模型的特点 阶段间具有顺序性和依赖性。 推迟实现的观点 质量保证的观点 瀑布模型的优点 瀑布模型的缺点 快速原型模型 快速原型模型的优点 快速原型模型的缺点 增量模型 增量模型的优点 增量构件开发 螺旋模型 完整的螺旋模型&#xff08;顺…

视频孪生技术在金融银行网点场景中的应用价值

作为国民经济重要的基础行业&#xff0c;金融行业在高速发展的同时衍生出业务纠纷、安全防范、职能管理等诸多问题&#xff0c;对安全防范和监督管理提出了更高的要求。因此&#xff0c;如何能更好的利用视频监控系统价值&#xff0c;让管理人员更简便的浏览监控视频、更快速的…

【金融风控】特征评估与筛选详解

内容介绍 掌握单特征分析的衡量指标 知道 IV&#xff0c;PSI等指标含义 知道多特征筛选的常用方法 掌握Boruta,VIF,RFE,L1等特征筛选的使用方法 【理解】单特征分析 什么是好特征 从几个角度衡量&#xff1a;覆盖度&#xff0c;区分度&#xff0c;相关性&#xff0c;稳定…

LeetCode面试经典150题|228.汇总区间

给定一个 无重复元素 的 有序 整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说&#xff0c;nums 的每个元素都恰好被某个区间范围所覆盖&#xff0c;并且不存在属于某个范围但不属于 nums 的数字 x 。 列表中的每个区间范围 [a,b] 应该按…

new Object到底占用多少内存?

前言 通过 JOL 工具&#xff0c;深入剖析对象头、实例数据以及内存对齐的具体细节&#xff0c;了解 JVM 是如何管理和优化内存的。使用 JOL&#xff0c;验证内存结构&#xff0c;直观地观察 JVM 参数&#xff08;如对象指针压缩、类指针压缩等&#xff09;对对象布局的影响。 …

深入理解接口测试:实用指南与最佳实践5.0(二)

✨博客主页&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客内容》&#xff1a;.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 &#x1f4e2;博客专栏&#xff1a; https://blog.csdn.net/m0_63815035/cat…

基于Java+SpringBoot宠物管理系统

一、作品包含 源码数据库设计文档全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据库&…

PYNQ 框架 - 中断(INTR)驱动

目录 1. 简介 2. 分析 2.1 Block Design 2.2 AXI Timer 2.2.1 IP 基本信息 2.2.2 IP 地址空间 2.2.3 级联模式 2.2.4 生成/捕获模式 2.3 AXI Interrupt 2.3.1 IP 基本信息 2.3.2 IP 地址空间 2.3.3 相关概念 2.3.4 参数配置 2.3.5 中断确认寄存器 3. PYNQ 代码 …