分布式文件系统MFS(moosefs)实现存储共享

分布式文件系统MFS实现存储共享 由于用户数量的不断攀升,我对访问量大的应用实现了可扩展、高可靠的集群部署(即lvs+keepalived的方式),但仍然有用户反馈访问慢的问题。通过排查个服务器的情况,发现问题的根源在于共享存储服务器NFS。在我这个网络环境里,N个服务器通过nfs方式共享一个服务器的存储空间,使得NFS服务器不堪重负。察看系统日志,全是nfs服务超时之类的报错。一般情况下,当nfs客户端数目较小的时候,NFS性能不会出现问题;一旦NFS服务器数目过多,并且是那种读写都比较频繁的操作,所得到的结果就不是我们所期待的。下面是某个集群使用nfs共享的示意图 这种架构除了性能问题而外,还存在单点故障,一旦这个NFS服 立即下载
版权声明: 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。 http://sery.blog.51cto.com/10037/147756


由于用户数量的不断攀升 , 我对访问量大的应用实现了可扩展、高可靠的集群部署(即 lvs+keepalived 的方式),但仍然有用户反馈访问慢的问题。通过排查个服务器的情况,发现问题的根源在于共享存储服务器 NFS 。在我这个网络环境里, N 个服务器通过 nfs 方式共享一个服务器的存储空间,使得 NFS 服务器不堪重负。察看系统日志,全是 nfs 服务超时之类的报错。一般情况下,当 nfs 客户端数目较小的时候, NFS 性能不会出现问题;一旦 NFS 服务器数目过多,并且是那种读写都比较频繁的操作,所得到的结果就不是我们所期待的。下面是某个集群使用 nfs 共享的示意图:
这种架构除了性能问题而外,还存在单点故障,一旦这个 NFS 服务器发生故障,所有靠共享提供数据的应用就不再可用,尽管用 rsync 方式同步数据到另外一个服务器上做 nfs 服务的备份,但这对提高整个系统的性能毫无帮助。基于这样一种需求,我们需要对 nfs 服务器进行优化或采取别的解决方案,然而优化并不能对应对日益增多的客户端的性能要求,因此唯一的选择只能是采取别的解决方案了;通过调研,分布式文件系统是一个比较合适的选择。采用分布式文件系统后,服务器之间的数据访问不再是一对多的关系( 1 个 NFS 服务器,多个 NFS 客户端),而是多对多的关系,这样一来,性能大幅提升毫无问题。
 
到目前为止,有数十种以上的分布式文件系统解决方案可供选择,如 lustre,hadoop,Pnfs 等等。我尝试了 PVFS,hadoop,moosefs 这三种应用,参看了 lustre 、 KFS 等诸多技术实施方法,最后我选择了 moosefs (以下简称 MFS )这种分布式文件系统来作为我的共享存储服务器。为什么要选它呢?我来说说我的一些看法:
1、  实施起来简单。 MFS 的安装、部署、配置相对于其他几种工具来说,要简单和容易得多。看看 lustre 700 多页的 pdf 文档,让人头昏吧。
2、  不停服务扩容。 MFS 框架做好后,随时增加服务器扩充容量;扩充和减少容量皆不会影响现有的服务。注: hadoop 也实现了这个功能。
3、  恢复服务容易。除了 MFS 本身具备高可用特性外,手动恢复服务也是非常快捷的,原因参照第 1 条。
4、  我在实验过程中得到作者的帮助,这让我很是感激。
MFS 文件系统的组成
1、   元数据服务器。在整个体系中负责管理管理文件系统,目前 MFS 只支持一个元数据服务器 master ,这是一个单点故障,需要一个性能稳定的服务器来充当。希望今后 MFS 能支持多个 master 服务器,进一步提高系统的可靠性。
2、   数据存储服务器 chunkserver 。真正存储用户数据的服务器。存储文件时,首先把文件分成块,然后这些块在数据服务器 chunkserver 之间复制(复制份数可以手工指定,建议设置副本数为 3 )。数据服务器可以是多个,并且数量越多,可使用的“磁盘空间”越大,可靠性也越高。
3、   客户端。使用 MFS 文件系统来存储和访问的主机称为 MFS 的客户端,成功挂接 MFS 文件系统以后,就可以像以前使用 NFS 一样共享这个虚拟性的存储了。
 
元数据服务器安装和配置
元数据服务器可以是 linux, 也可以是 unix, 你可以根据自己的使用习惯选择操作系统 , 在我的环境里 , 我是用 freebsd 做为 MFS 元数据的运行平台。 GNU 源码,在各种类 unix 平台的安装都基本一致。
 
(一)    安装元数据服务
2 、解包 tar zxvf mfs-1.5.12.tar.gz
3 、切换目录 cd mfs-1.5.12
4 、创建用户 useradd mfs –s /sbin/nologin 
5 、配置 ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
6 、编译安装 make ; make install
 
(二)    配置元数据服务
元数据服务器的配置文件是 mfsmaster.cfg, 我在安装 MFS 时指定了前缀,因此这个文件的位置在 /usr/local/mfs/etc/mfsmaster.cfg. 我们打开这个配置文件,看看都有哪些内容:
尽管每行都被注释掉了,但它们却是配置文件的默认值,要改变这些值,需要取消注释,然后明确指定其取值。接下来说明一下其中一些项目的含义。
◆      LOCK_FILE = /var/run/mfs/mfsmaster.pid 文件锁所在的位置,它的功能是避免启动多次启动同一个守护进程。由于系统中本来不存在目录 /var/run/mfs ,因此需要手动创建 mkdir /var/run/mfs ,然后更改其属主 chown –R mfs:mfs /var/run/mfs 这样 MFS 服务就能对这个目录有创建 / 写入 mfsmaster.pid 文件的权限了。
◆      DATA_PATH = /usr/local/mfs/var/mfs 数据存放路径,只元数据的存放路径。那么这些数据都包括哪些呢?进目录看看,大致分 3 种类型的文件:
这些文件也同样要存储在其他数据存储服务器的相关目录。
◆      MATOCS_LISTEN_PORT = 9420 MATOCS--master to chunkserver ,即元数据服务器使用 9420 这个监听端口来接受数据存储服务器 chunkserver 端的连接。
◆      MATOCU_LISTEN_PORT = 9421 元数据服务器在 9421 端口监听,用以接受客户端对 MFS 进行远程挂接(客户端以 mfsmount 挂接 MFS )
◆      其他部分看字面意思都不难理解。还有几个与时间有关的数值,其单位是秒。
这个配置文件,不必做修改就能工作了。
 
(一)    元数据服务器 master 启动
元数据服务器可以单独启动,即使没有任何数据存储服务器( chunkserver )也是能正常工作的,因此当我们安装配置完 MFS 后,即可启动它。执行命令 /usr/local/mfs/sbin/mfsmaster start ,如果没有意外,元数据库服务器就应该作为一个守护进程运行起来。现在我们可以通过 3 个方面来检查一下 MFS master 的运行状况:
(四)、关闭元数据服务器
关闭元数据服务器,务必使用 /usr/local/mfs/sbin/mfsmaster –s 这种方式,如果直接使用 kill 杀死进程,将导致下次启动时出现找不到相关文件,而不能正常启动服务器。这个一定要谨慎。当然,如果发生了这个事情,还是可以通过 mfsmetastore 来恢复的。
 
数据存储 chunkserver 服务器的安装配置
数据存储服务器 chunkserver 也是可以运行在各种类 unix 平台的,因此不再多说。一个 MFS 环境到底能集群多少服务器,作者的说法是上 PB 容量,个人建议,最好 3 台以上;并且专门用来做存储,不要把它跟 master 搞到一个机器(理论上没问题,实现也是可以的,但这不是一个好策略)。因为每个数据存储服务器的安装和配置都是相同的,所以只需按照一个服务器的操作就可以了。
 
(一)、安装数据存储服务器 chunkserver
2 、解包 tar zxvf mfs-1.5.12.tar.gz
3 、切换目录 cd mfs-1.5.12
4 、创建用户 useradd mfs –s /sbin/nologin 
5 、配置 ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
6 、编译安装 make ; make install
 
(二)配置数据存储服务器 chunkserver
数据存储服务器有 2 个配置服务器需要修改,一个是主配置文件 mfschunkserver.cfg , 另一个配置文件是 mfshdd.cfg 。每个服务器用来分配给 MFS 使用的空间最好是一个单独的硬盘或者一个 raid 卷,最低要求是一个分区。作者举的例子是创建一个大文件,然后挂接在本地,这不好,只能用来做实验了。
1 、修改配置文件 /usr/local/mfs/etc/mfschunkserver.cfg 。下面是修改了的配置文件:
 
 
这个配置文件里,没有注释符号“ # ”就是被修改过的项了,接下来是里面某些项的含义说明:
◆      MASTER_HOST = 192.168.0.19 元数据服务器的名称或地址,可以是主机名,也可以是 ip 地址,只要数据存储服务器能访问到元数据服务器就行。
◆      LOCK_FILE = /var/run/mfs/mfschunkserver.pid 与元数据服务器 master 的处理完全相同 .
◆      CSSERV_LISTEN_PORT = 9422 CSSERV—chunkserver, 这个监听端口用于与其它数据存储服务器间的连接,通常是数据复制。
◆      HDD_CONF_FILENAME = /usr/local/mfs/etc/mfshdd.cfg 分配给 MFS 使用的磁盘空间配置文件的位置。
2 、修改配置文件 /usr/local/mfs/etc/mfshdd.cfg 。在我的服务器上,只有一个 1T 的 SATA 硬盘,分了一个 800G 容量的分区来做为 MFS 存储服务的组成部分。为了使 mfs 拥有写目录的权限,需要修改目录的属主。我的服务器的分区挂接点是 /data , 用 chown –R mfs:mfs /data 把属主改变。因为我的每个服务器只需贡献一个分区做为 MFS, 因此配置文件只需要如下一行内容就可以了:
(四)    关闭数据存储服务器
跟元数据服务器 master 相似,执行命令 /usr/local/mfs/sbin/mfschunkserver –s , chunkserver 服务就停下来了。为了使系统重启过程能自动启动 chunkserver  服务,可以通过在 /etc/rc.local 文件追加行   /usr/local/mfs/sbin/mfschunkserver start 来达到这个目的( master 的自动重启处理也可同样处理)。


MFS 客户端的安装及配置
 
我的生产环境,只有 centos 和 freebsd 两种环境,因此下面的描述,只有 centos 及 freebsd 挂接 MFS 文件系统的情形,其他类型的 unix 系统,待日后尝试。对比前面的操作过程,客户端挂接后使用 MFS 集群文件系统才是最费时的事情。
 
一、 centos 作为 MFS 的客户端。
(一)    安装 MFS 客户端
◆ Mfsmount 需要依赖 FUSE, 因此需要先安装好 fuse ,这里我选用  fuse-2.7.4.tar.gz 。
1 、解包 tar zxvf fuse-2.7.4.tar.gz
2 、切换目录 cd fuse-2.7.4.
3 、配置   ./configure
4 、编译安装   make ; make install
如果系统已经安装了 fuse, 则跳过这个步骤。
◆安装 MFS 客户端程序
1 、修改环境变量文件 /etc/profile , 追加下面的行,然后再执行命令 source /etc/profile 使修改生效。
(二)挂接和使用 MFS 文件系统
1 、创建挂接点 mkdir /mnt/mfs
2 、挂接 MFS /usr/local/mfs/bin/mfsmount –h 192.168.0.19 . 注意,所有的 MFS 都是挂接同一个元数据服务器 master, 而不是其他数据存储服务器 chunkserver !
 
一、 freebsd 作为 MFS 客户端
Freebsd 安装和挂接 MFS 集群文件系统 , 比 centos 操作起来要复杂一些 .mfsmount 需要依赖 fuse, 并且需要在内核中加载 fusefs 模块。
 
(一)安装 fuse
1 、解包 tar zxvf fuse-2.7.4.tar.gz
2 、切换目录 cd fuse-2.7.4.
3 、配置   ./configure
4 、编译安装   make ; make install
如果系统已经安装了 fuse, 则跳过这个步骤。
 
(二) 安装内核模块 fusefs-kmod
6 、选择“ fusefs-kmod-0.3.9.p1_2” , 按 [OK] 返回到第“ 4 ” 步出现的那个操作界面。这时我们用“ Tab ”键选中底部右边的“ Install ”,完成安装后,会出现一个安装成功的提示,然后瞬间消失。
◆ 加载 fusefs 模块 kldload /usr/local/modules/fuse.ko . 如果加载不成功,请检查是否存在模块文件 fuse.ko.
◆ 检查 fusefs 模块是否被加载到内核:
  
如果没有类似上面馆的输出,就表明 fusefs 模块没有加载成功。
 
(三)安装包 pkg-config :
1 、 cd /usr/ports/devel/pkg-config
2 、 make install clean
 
(四)安装 MFS 客户端
1 、解包 tar zxvf mfs-1.5.12.tar.gz
2 、切换目录 cd mfs-1.5.12
3 、创建用户 pw useradd mfs –s /sbin/nologin 
4 、配置 ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --enable-mfsmount
5 、编译安装 make ; make install
◆检查 MFS 客户端安装的结果。通过查看目录 /usr/local/mfs/bin 目录的文件,应该发现如下文件:
就能实现开机或重启系统自动挂接 MFS 文件系统。
 
破坏性测试
一 、测试数据存储服务器
我用 5 个服务器组成了 MFS 的存储平台,其中一个是 master, 其余四个服务器是 chunkserver. 先停止一个 chunkserver 服务,然后在某个 MFS 客户端往挂接点的目录( /mnt/mfs )里复制数据或者创建目录 / 文件、或者读取文件、或者删除文件,观察操作是否能正常进行。再停止第 2 个 chunkserver ,重复执行上述操作;然后再停止第 3 个服务器,执行类似的文件读些操作。减少 chunkserver 试验后,我们再来逐步增加 chunkserver 服务器 , 然后对 MFS 执行读写等相关访问操作,检验其正确性。
 
通过增减 chunkserver 服务器的测试,服务的可靠性确实不错,哪怕只剩下最后一个服务器,也能正常提供存储访问服务。
 
二、测试元数据服务器
元数据服务器最重要的文件在目录 /usr/local/mfs/var/mfs ,MFS 每一个数据的变化 , 都被记录在这个目录的文件里 , 我们可以通过备份这个目录的全部文件 , 来保障整个 MFS 文件系统的可靠性 . 在正常情况下 , 元数据服务器的改变日志文件 (changelogs) 实时地、自动地复制到所有的数据存储服务器,并且以 changelog_csback.*.mfs 的形式命名。换句换说,即使元数据服务器报废了,也能再部署一个元数据服务器,然后从数据存储服务器chunkserver 取得恢复所需要的文件。
 
(一)本地测试
1 、停止元数据服务 /usr/local/mfs/sbin/mfsmaster
2 、备份元数据服务器数据 cd /usr/local/mfs/var; tar czvf mfs.tgz mfs
3 、删除目录 mv mfs mfs.bk 或 rm –rf mfs
4 、启动元数据服务 ../sbin/mfsmaster start 启动失败,提示不能初始化数据。
5 、解包 tar zxvf mfs.tgz
6 、执行恢复操作 .. /sbin / mfsmetarestore –a
7 、启动元数据服务 ../sbin/mfsmaster start
8 、在MFS 客户端检查MFS 存储的数据是否跟恢复前一致?能否正常访问等等。
 
(一)    迁移测试
1、   安装新的MFS 元数据服务器。
2、   复制元数据服务器数据目录(/usr/local/mfs/var/mfs )到这个新的元数据服务器。
3、   停止原先的那个元数据服务器(关闭计算机或停止它的网络服务)。
4、   更改新的元数据服务器的ip 为原来那个服务器的ip.
5、   启动新的元数据服务 /usr/local/mfs/sbin/mfsmaster start
6、   在MFS 客户端检查MFS 存储的数据是否跟恢复前一致?能否正常访问等等。
 
感谢Pawel Kalinowski (mfs 作者)提供帮助!
 
补充: linux可能需要在执行mfsmount前先加载fuse模块到内核 /sbin/modprobe fuse
MooseFS分布式文件系统源码分析 MooseFS分布式文件系统源代码级分析,涵盖整个系统的运行框架,元数据和块数据结构定义,主节点、块节点、日志节点间的通信交互过程,快照、配额、副本等机制的实现,底层rpc实现 立即下载

相关推荐

2024高教社杯数学建模国赛B题丨国一原创论文解析及源码超详细分享!

继续分享一篇2024国赛B题的国奖论文,包含可运行源代码jupyter,国赛B题通常比较聚焦实际复杂系统的多目标优化决策,主要偏重算法实现与概率建模解决开放性的管理问题。而且高度开放,无标准答案,学科交叉复杂,如资源调度、交通优化、海洋探测等。比较建议有一定统计学基础的同学参加。

ihui永不放弃 6738

分布式文件系统MFS(moosefs)实现存储共享(一)

分布式文件系统MFS(moosefs)实现存储共享 作者:田逸([email]sery@163.com[/email]) from: [url]http://net.it168.com/a2009/0403/270/000000270867.shtml[/url]   由于用户数量的不断攀升,我对访问量大的应用实现了可扩展、高可靠的集群部署(即lvs+keepalived的方式),但仍然...

weixin_34211761的博客 426

信号完整性分析学习--16--传输线效应

传输线效应 说到传输线效应,大多数人都会想到一个经验法则,那就是: “当互连线的长度大于1/6倍的信号上升时间的空间延伸时,互连线就体现出传输线效应。” 上升时间越小越容易体现传输线效应。 由此可见,同一根互连线,它是否体现传输线效应,要看它要传输什么样的信号。下图所示,一根延时为15ps的互连线,当它传输上升时间为60ps的信号时就会体现传输线效应;当它传输上升时间为180ps的信号时就不体现传输线效应。

qq_29476769的博客 7274

Linux网络文件共享服务---------NFS 共享存储服务

NFS(Network File System 网络文件服务)文件系统(软件)文件的权限 NFS 是一种基于 TCP/IP 传输的网络文件系统协议,最初由 Sun 公司开发。通过使用 NFS 协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源NFS 也是 NAS 存储 设备必然支持的一种协议NFS端口不固定,依靠rpcbind,rpcbind端口固定111,NFS会把端口号告诉rpcbindrpcbind相当于一个中转站,所以使用NFS时rpcbind服务必须正常。

zzzxxx520369的博客 5074

2024年数字IC秋招-大疆-数字芯片开发工程师-笔试题

笔试题型:选择题 + 简答题笔试平台:大疆创新(电脑监控)笔试时间:90min做题感受:知识面覆盖很广,很多题目不会做(1) 什么是功耗优化中的DVFS技术?(2)降低功耗的原理是什么?(3)一般工作流程是怎样的?(4)必须的硬件模块有哪些?

qq_42135020的博客 2665

AD-Copilot 论文解读:把“大模型看图”升级为“对照检验”的工业异常检测助手

本文提出AD-Copilot,一个面向工业异常检测的视觉语言助手,通过视觉上下文比较解决现有方法的不足。针对工业场景中多模态大模型表现不佳的问题,作者指出核心原因在于缺乏工业数据和比较能力不足。为此,论文提出三个关键贡献:构建Chat-AD数据集,设计Comparison Encoder显式建模图像差异,以及采用多阶段训练策略。实验表明,该方法在MMAD基准上达到82.29%准确率,定位任务提升3.35倍,并展现出良好的泛化能力。消融实验验证了比较模块的有效性,表明其成功源于高质量比较数据与显式比较模块的协

blanokvaffy的博客 331

文件服务器mfs,分布式文件系统MFS(moosefs)实现存储共享

这种架构除了性能问题而外,还存在单点故障,一旦这个NFS服务器发生故障,所有靠共享提供数据的应用就不再可用,尽管用rsync方式同步数据到另外一个服务器上做nfs服务的备份,但这对提高整个系统的性能毫无帮助。基于这样一种需求,我们需要对nfs服务器进行优化或采取别的解决方案,然而优化并不能对应对日益增多的客户端的性能要求,因此唯一的选择只能是采取别的解决方案了;通过调研,分布式文件系统是一个比较合...

weixin_35953844的博客 885

DeepSeek + 微信:手把手教你把 AI 接入个人微信,秒变“高情商”聊天助手(防封指南)

将 DeepSeek 接入微信,本质上是给你的微信装了一个**“最强外挂”**。它不仅能帮你回消息,还能帮你写周报、查资料、甚至陪聊解闷。工具是服务于人的,不要让 AI 完全替代了你的真情实感。毕竟,真正的高情商,是屏幕背后那个在乎对方的你。先申请一个小号,按照步骤跑通流程。然后试着调整 Prompt,训练一个属于你自己的“嘴替”吧!

BUG猿的博客 957

NFS共享储存

NFS介绍及安装部署调试

yanglilinux的博客 1万+

UG\NX二次开发 找不到指定的dlx文件(Specified Dlx file not found)

有群友问:用Ctrl+U运行的时候就报错,找不到指定的dlx文件Specified Dlx file not found。怎么处理。

王牌飞行员_里海的博客 1130

MDF和DHF、DMR、DHR三者差异?注册与备案文件?医疗器械产品技术要求编写指导原则

定义:设计历史文档(DHF ) 指的是描述某医疗器械成品设计过程的有关记录。内容:DHF包括设计开发活动的所有记录。从最初的策划、客户需求、设计输入,设计输出、设计验证、设计确认、所有的设计评审,设计转换,以及设计变更相关的所有记录。均属于DHF的一部分。要求:各制造商应为每个类型的器械建立并保持设计历史文件。设计历史文件应包含或引用必要的记录,以证实设计符合经批准的设计计划和法规的要求。

学海无涯的专栏 9110

分布式文件系统MFS(moosefs)实现存储共享(第二版)

分布式文件系统MFS(moosefs)实现存储共享(第二版)作者:田逸(sery@163.com)由于用户数量的不断攀升,我对访问量大的应用实现了可扩展、高可靠的集群部署(即lvs+keepalived的方式),但仍然有用户反馈访问慢的问题。通过排查个服务器的情况,发现问题的根源在于共享存储服务器NFS。在我这个网络环境里,N个服务器通过nfs方式共享一个服务器的存储空间,使得NFS服务器不堪重负...

weixin_33719619的博客 271

LVGL core disp显示设计(lv_disp.c)

lv_disp.c当前显示页面的配置scr_act在原始的LVGL是以screen的概念存在,但我们还是习惯叫它为一个页面提供获取top_layer、sys_layer、prev_scr图层接口配置主题管理默认的主题管理是递归查找的,实际项目中因此页面的复杂性,虽然也兼容了此主题管理的方案,但还是推荐使用单页面自行管理主题的方案壁纸设置多页面切换的动画支持计算无用户操作时间清理显示缓存。

Bigan(安)的博客 2331

分布式文件系统MFS(moosefs)实现存储共享(一) - sery - 51CTO技术博客

分布式文件系统MFS(moosefs)实现存储共享(一) - sery - 51CTO技术博客 分布式文件系统MFS(moosefs)实现存储共享(一) - sery - 51CTO技术博客分布式文件系统MFS(moosefs)实现存储共享(一)2009-04-09...

122

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

上一篇: Oracle直方图详解
下一篇: 清理多个varnish服务器缓存的脚本
leminsky
博客等级 码龄22年 43粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值