分布式文件系统 MooseFS 搭建

实验目的

配置分布式文件系统 MooseFS,并尝试挂载操作。

步骤

源码编译

根据 MooseFS 官方 Github 上的指示,在 RHEL 上解压源码包,并创建用户,安装好必要的 build 包

配置 master 端

IP:192.168.235.134,运行 Red Hat Linux 系统

创建相关文件夹和用户,运行 makemake install

注意 mfs 需要一个用户名为 mfs 的用户,它属于 mfs 用户组

进入 mfs 安装目录下的 etc/mfs 文件夹,将 mfsmaster、msfexports、msftopology 的 cfg 文件后的 sample 后缀去掉。然后将 var/mfs 文件夹下的 metadata.mfs.empty 更名为 metadata.mfs。删除原来的 empty 文件。 做完上述配置,就可以启动 mfs 安装目录下的 sbin/mfsmaster 了(mfsmaster start)。其在 9421 端口下监听客户端连接,9420 端口下监听 chunkserver 连接。 可以开启 sbin 下的 mfscgiserv,以 web 端方式来查看服务器情况,默认监听端口为 9425。需要在 /etc/hosts 中的绑定 mfsmaster 的解析 ip。

配置 chunkserver

IP:192.168.235.146,运行 Ubuntu 系统

  1. 添加用户,创建目录,安装必需软件包。
  2. 配置 configure,然后运行 make && make install
  3. Chunkserver 需要 mfschunkservermfshdd 两个配置文件。将它们更名。
  4. 创建两个挂载用的共享目录(实际上最后只用了第一个) 网上的教程上说最好给每一个目录配备单独的硬盘分区或 lvm 逻辑卷,但是本次实验不需要。
  5. mfshdd.cfg 上添加共享目录。
  6. 运行 mfs 安装目录 /sbin/mfschunkserver start 启动 chunk server。它在 9422 端口监听。

IP:192.168.235.149,运行 Red Hat Linux 系统

  1. 下列操作与 A 端类似
  2. 对了,要在 chunkserver 的 /etc/hosts 中绑定 mfsmaster 的地址。A 端的 ubuntu 系统也要这么做
  3. mfschunkserver start 启动数据服务器。它在 9422 端口监听。

IP:192.168.235.148,运行 Ubuntu 系统

实验关键里程碑数据与结果

使用 mfs 安装目录 /bin/mfsmount 目录名 -H <mfsmaster IP地址> 来挂载目录,在此之前,先依次启用 mfsmaster 和两个 mfschunkserver。显示 accepted,即代表挂载成功

此时查看被挂载的目录,会发现它空间很大,应该是所有 CHUNKSERVER 存储空间的和。

查看 mfsmaster 日志可以看到 chunkserver 注册连接的记录。 Chunkserver 端也有相应的记录。(可以看到,此端成功连接到了主服务器)

实验结束后,先断开所有文件夹的挂载,然后停止 chunkserver,最后停止 masterserver。

访问 master 端的 cgi 网页,可以发现很多有用的信息,如下图所示

实验难点与收获

本次实验的步骤和参考资料来自:
https://www.cnblogs.com/rockbes/p/3989395.html
https://www.cnblogs.com/rockbes/p/3989410.html
https://www.cnblogs.com/rockbes/p/3989419.html
https://github.com/moosefs/moosefs

这是一个相当复杂的配置实验!里面有很多坑点和难点,不过最后还是一步一步做了下来,很有成就感。

收获就是…… 很多步骤需要一定权限,这时候使用 root 权限是非常方便的,还有就是,涉及到虚拟机间的网络连接,一定要关防火墙!systemctl stop firewalld.service

由于只是练习配置,各个角色之间联通即可,所以很多功能都还没有用上。实际上,MooseFS 的配置文件很有东西,潜力丰富。特别是本次实验没怎么用到的日志功能,在恢复受损文件系统上有着非常重要的作用。

实验思考

坑点集中

  1. server start 时出现 can’t create lockfile in working directory: EACCES (Permission denied),是因为编译时没指定 --with-default-user=mfs,所以生成的配置文件里运行用户是 nobody,运行组是 mfs,将用户修改即可成功。

    我采用的是更省事的方法:编译时指定 default-user=mfs

  2. 连不上 mfsmaster

    检查 mfsexports 文件中有没有为 client IP 放开权限。(取消 #注释) 前面那个 * 打头的也最好放开。

    如果还不行,关闭防火墙。

了解 MooseFS

MooseFS 是一种分布式文件系统,MooseFS 文件系统结构包含四种角色。

负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复、多节点拷贝

负责备份 master 服务器的变化日志文件,文件类型为 changelog_ml.*.mfs,以便于在 master server 出问题的时候接替其进行工作

听从管理服务器调度,提供存储空间,并为客户提供数据传输。真正存储用户数据的服务器。存储文件时,首先把文件分成块,然后这些块在数据服务器 chunkserver 之间复制(复制份数可以手工指定,建议设置副本数为
3)。数据服务器可以是多个,并且数量越多,可使用的 “磁盘空间” 越大,可靠性也越高。

客户端挂载远程 mfs 服务器共享出的存储并使用。 通过 fuse 内核接口挂载进程管理服务器上所管理的数据存储服务器共享出的硬盘。共享的文件系统的用法和 nfs 相似。使用 MFS 文件系统来存储和访问的主机称为 MFS 的客户端,成功挂接
MFS 文件系统以后,就可以像以前使用 NFS 一样共享这个虚拟性的存储了。

本次实验用到了角色 1、3 和 4。