MFS架构图
-
元数据服务器(Master):在整个体系中负责管理文件系统,维护元数据。
-
元数据日志服务器(MetaLogger):备份Master服务器的变化日志文件,文件类型为 changelog_ml.*.mfs。当 Master 服务器数据丢失或者损坏,可以从日志服务器中取得 文件恢复。
-
数据存储服务器(Chunk Server):真正存储数据的服务器。存储文件时,会把文件分 块保存,并在数据服务器之间复制,数据服务器越多,能使用的“容量”就越大,可靠 性就越高,性能越好。
-
客户端(Client):可以像挂载NFS一样挂载MFS文件系统,其操作是相同的。
MFS的原理
数据读取流程
- 客户端向元数据服务器发送读取请求。
- 元数据服务器返回所需数据的存放位置,包括 Chunk Server 的 IP 地址和对应的 Chunk 编号。
- 客户端向指定的 Chunk Server 请求数据。
- Chunk Server 将所请求的数据发送给客户端。
数据写入流程
- 客户端向元数据服务器发送写入请求。
- 元数据服务器与 Chunk Server 交互(仅在所需的分块 Chunks 存在时进行)。
- 元数据服务器在指定的 Chunk Server 上创建新的分块 Chunks,成功创建后,Chunk Server 通知元数据服务器操作成功。
- 元数据服务器告知客户端可以在哪个 Chunk Server 的哪些 Chunks 中写入数据。
- 客户端向指定的 Chunk Server 写入数据。
- 该 Chunk Server 与其他 Chunk Server 进行数据同步,同步成功后,Chunk Server 通知客户端数据写入成功。
- 客户端通知元数据服务器本次写入操作已完成。
实验案例:
本案例使用六台服务器模拟搭建MFS文件系统,
主机 | 操作系统 | IP 地址 | 主要软件 |
---|---|---|---|
Master Server | CentOS 7.3 x86_64 | 192.168.9.200 | moosefs-3.0.84-1.tar.gz |
MetaLogger Server | CentOS 7.3 x86_64 | 192.168.9.202 | moosefs-3.0.84-1.tar.gz |
Chunk Server 1 | CentOS 7.3 x86_64 | 192.168.9.209 | moosefs-3.0.84-1.tar.gz |
Chunk Server 2 | CentOS 7.3 x86_64 | 192.168.9.168 | moosefs-3.0.84-1.tar.gz |
Chunk Server 3 | CentOS 7.3 x86_64 | 192.168.9.246 | moosefs-3.0.84-1.tar.gz |
Client | CentOS 7.3 x86_64 | 192.168.9.247 | moosefs-3.0.84-1.tar.gz |
fuse-2.9.7.tar.gz |
案例实施 分别在六台服务器上关闭防火墙、设置地址解析记录、安装相关依赖包。
为了确保集群各节点能够正常通信,并顺利安装 MooseFS,需要在六台服务器上进行以下操作:
-
在所有服务器上关闭防火墙并设置 SELinux
-
关闭防火墙:
[root@mfsmaster ~]# systemctl stop firewalld
[root@mfsmaster ~]# systemctl disable firewalld
- 禁用 SELinux:
编辑 /etc/sysconfig/selinux
文件,将 SELINUX
设置为 disabled
。
[root@mfsmaster ~]# vi /etc/sysconfig/selinux
修改内容:
SELINUX=disabled
- 配置地址解析记录:
编辑 /etc/hosts
文件,添加以下内容:
[root@mfsmaster ~]# vi /etc/hosts
添加内容:
192.168.9.200 mfsmaster
192.168.9.202 metalogger
192.168.9.209 chunk1
192.168.9.168 chunk2
192.168.9.246 chunk3
192.168.9.247 client
- 安装相关依赖包:
[root@mfsmaster ~]# yum -y install gcc zlib-devel
- 重启系统:
在所有更改完成后,重启系统以使设置生效。
1. 搭建 Master Server
- 创建用户:
[root@mfsmaster ~]# useradd -s /sbin/nologin -M mfs
- 安装源码包:
- 解压安装包:
[root@mfsmaster ~]# tar zxvf moosefs-3.0.84-1.tar.gz
2. 进入解压后的目录:
[root@mfsmaster ~]# cd moosefs-3.0.84/
3. 配置并编译安装:
[root@mfsmaster moosefs-3.0.84]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmount --disable-mfschunkserver
[root@mfsmaster moosefs-3.0.84]# make && make install
- 复制并修改 Master 配置文件:
- 进入配置文件目录:
[root@mfsmaster mfs]# cd /usr/local/mfs/etc/mfs
2. 复制配置文件模板并修改:
[root@mfsmaster mfs]# cp mfsmaster.cfg.sample mfsmaster.cfg
[root@mfsmaster mfs]# cp mfsexports.cfg.sample mfsexports.cfg
[root@mfsmaster mfs]# cp mfstopology.cfg.sample mfstopology.cfg
- 初始化元数据文件:
- 进入元数据目录:
[root@mfsmaster mfs]# cd /usr/local/mfs/var/mfs
2. 复制空的元数据文件:
[root@mfsmaster mfs]# cp metadata.mfs.empty metadata.mfs
至此,Master Server 的基础搭建工作完成。
4) 修改配置文件
以下内容了解即可,此实验并没有修改任何内容
在 MooseFS 的 Master Server 上,主要需要配置两个文件:mfsmaster.cfg
(主配置文件)和 mfsexports.cfg
(被挂载目录及权限配置文件)。
1. **mfsmaster.cfg**
文件常用参数解释:
- RUNTIME OPTIONS:
WORKING_USER=mfs
:运行masterserver
的用户。WORKING_GROUP=mfs
:运行masterserver
的组。SYSLOG_IDENT=mfsmaster
:在syslog
中表示是mfsmaster
产生的日志。DATA_PATH=/usr/local/mfs/var/mfs
:数据存放路径。EXPORTS_FILENAME=/usr/local/mfs/etc/mfs/mfsexports.cfg
:导出的文件配置路径。TOPOLOGY_FILENAME=/usr/local/mfs/etc/mfs/mfstopology.cfg
:拓扑配置文件路径。MATOML_LISTEN_PORT=9419
:metalogger
监听的端口地址。MATOCS_LISTEN_PORT=9420
:chunkserver
连接的端口地址。MATOCL_LISTEN_PORT=9421
:客户端挂接连接的端口地址。
**mfsexports.cfg**
** 文件参数格式**:
- 每个条目分为三部分:
- 客户端的 IP 地址:例如
*
表示所有的 IP 地址。 - 被挂接的目录:例如
/
标识 MFS 根目录。 - 客户端的权限:例如
rw
表示读写权限。
- 客户端的 IP 地址:例如
- 参数示例:
* / rw,alldirs,admin,maproot=0:0
以上是 Master Server
的 mfsmaster.cfg
和 mfsexports.cfg
配置文件的解释。根据需求,这些文件可以在生产环境中针对业务需求修改,以优化 MFS 性能。
5) 启动 Master Server
- 启动命令:
[root@mfsmaster mfs]# /usr/local/mfs/sbin/mfsmaster start
如果成功启动,会显示类似如下信息:
open files limit has been set to: 16384
working directory: /usr/local/mfs/var/mfs
...
mfsmaster daemon initialized properly
- 检查是否启动成功:
[root@mfsmaster mfs]# ps -ef | grep mfs
如果 mfsmaster
成功启动,你会看到相关的进程信息。
停止 Master Server 的命令为:
[root@mfsmaster mfs]# /usr/local/mfs/sbin/mfsmaster stop
以上是 Master Server 完整的配置与启动流程。
2.搭建 MetaLogger Server 详细步骤
MetaLogger Server 主要用于备份 Master Server 的变更日志文件 (changelog_ml.*.mfs),确保在 Master Server 出现问题时能够接替其工作。下面是搭建 MetaLogger Server 的详细步骤和每一条命令的输出:
1. 安装 Metalogger 服务
首先,我们需要添加一个系统用户来运行 Metalogger 服务,并解压安装包。
[root@metalogger ~]# useradd -s /sbin/nologin -M mfs
[root@metalogger ~]# tar zvxf moosefs-3.0.84-1.tar.gz
[root@metalogger ~]# cd moosefs-3.0.84/
解压安装包输出:
moosefs-3.0.84/
moosefs-3.0.84/configure
moosefs-3.0.84/Makefile.in
moosefs-3.0.84/src/
...
运行配置脚本,指定安装路径及配置选项:
[root@metalogger moosefs-3.0.84]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount
配置脚本输出:
checking for gcc... gcc
checking whether the C compiler works... yes
checking for a BSD-compatible install... /usr/bin/install -c
...
config.status: creating Makefile
编译并安装:
[root@metalogger moosefs-3.0.84]# make && make install
编译和安装输出:
Making all in src
make[1]: Entering directory '.../moosefs-3.0.84/src'
...
make[1]: Leaving directory '.../moosefs-3.0.84/src'
Making install in src
...
2. 复制 Metalogger 主配置文件
进入配置文件目录并复制示例配置文件:
[root@metalogger moosefs-3.0.84]# cd /usr/local/mfs/etc/mfs
[root@metalogger mfs]# ll
total 24
-rw-r--r--. 1 root root 4057 Feb 20 17:42 mfsexports.cfg.sample
-rw-r--r--. 1 root root 8597 Feb 20 17:42 mfsmaster.cfg.sample
-rw-r--r--. 1 root root 2175 Feb 20 17:42 mfsmetalogger.cfg.sample
-rw-r--r--. 1 root root 1052 Feb 20 17:42 mfstopology.cfg.sample
复制配置文件:
[root@metalogger mfs]# cp mfsmetalogger.cfg.sample mfsmetalogger.cfg
3. 修改 Metalogger 主配置文件,指定 Master Server 地址
编辑 mfsmetalogger.cfg
文件,找到以下行并修改为 Master Server 的 IP 地址:
[root@metalogger mfs]# vi mfsmetalogger.cfg
找到 MASTER_HOST
行并修改:
MASTER_HOST = 192.168.9.200 # 修改为Master Server的IP地址
4. 启动 Metalogger 服务
启动 Metalogger 服务:
[root@metalogger mfs]# /usr/local/mfs/sbin/mfsmetalogger start
启动服务输出:
open files limit has been set to: 4096
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmetalogger modules ...
mfsmetalogger daemon initialized properly
检查 Metalogger 服务状态:
[root@metalogger mfs]# ps -ef | grep mfs
检查服务状态输出:
root 5895 1 0 20:31 ? 00:00:00 /usr/local/mfs/sbin/mfsmetalogger start
root 5897 1111 0 20:32 pts/0 00:00:00 grep mfs
5. 停止 MetaLogger Server
要停止 MetaLogger Server,可以使用以下命令:
[root@metalogger mfs]# /usr/local/mfs/sbin/mfsmetalogger stop
总结
以上是完整的搭建 MetaLogger Server 的步骤和每一条命令的输出。从安装服务、复制配置文件、修改配置文件到启动和停止服务,确保每一步都正确执行以保证 Metalogger 正常运行。
3.搭建Chunk Server
搭建Chunk Server的过程涉及三个Chunk Server(chunk1、chunk2、chunk3),每台服务器的搭建步骤是相同的。以下是搭建步骤的详细说明:
统一配置
步骤1:安装Metalogger服务
- 添加
mfs
用户,不允许登录且不创建home目录:
[root@chunk1 ~]# useradd -s /sbin/nologin -M mfs
- 解压MooseFS安装包:
[root@chunk1 ~]# tar zvxf moosefs-3.0.84-1.tar.gz
- 进入解压后的目录:
[root@chunk1 ~]# cd moosefs-3.0.84/
- 配置MooseFS,禁用mfsmaster和mfsmount,指定安装路径和默认用户、组为
mfs
:
[root@chunk1 moosefs-3.0.84]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfsmount
- 编译并安装MooseFS:
[root@chunk1 moosefs-3.0.84]# make && make install
步骤2:复制mfschunk配置文件
- 进入配置文件目录:
[root@chunk1 moosefs-3.0.84]# cd /usr/local/mfs/etc/mfs
- 查看配置文件列表:
[root@chunk1 mfs]# ll total 12
-rw-r--r--. 1 root root 3491 Feb 20 17:42 mfschunkserver.cfg.sample
-rw-r--r--. 1 root root 1648 Feb 20 17:42 mfshdd.cfg.sample
-rw-r--r--. 1 root root 2175 Feb 20 17:42 mfsmetalogger.cfg.sample
- 复制
mfschunkserver.cfg
配置文件:
[root@chunk1 mfs]# cp mfschunkserver.cfg.sample mfschunkserver.cfg
- 复制
mfshdd.cfg
配置文件:
[root@chunk1 mfs]# cp mfshdd.cfg.sample mfshdd.cfg ```
步骤3:修改mfschunk主配置文件,指定Master Server
- 使用
vi
编辑mfschunkserver.cfg
文件:
[root@chunk1 mfs]# vi mfschunkserver.cfg
- 在配置文件中,找到以下部分并修改
MASTER_HOST
为Master Server的IP地址:
# MASTER CONNECTION OPTIONS #
# LABELS =
# BIND_HOST = *
MASTER_HOST = 192.168.9.200
# MASTER_PORT = 9420
# MASTER_TIMEOUT = 60
# MASTER_RECONNECTION_DELAY = 5
# AUTH_CODE = mfspassword
在这里,将MASTER_HOST
设置为实际的Master Server的IP地址,例如192.168.9.200
。
步骤4:创建MFS分区
- 使用
vi
编辑mfshdd.cfg
文件:
[root@chunk1 mfs]# vi mfshdd.cfg
- 在文件中添加一行
/data
,表示为MFS指定的分区路径:
# mount points of HDD drives
#
# /mnt/hd1
# /mnt/hd2
…
# /mnt/hd7
/data
在这里,/data
是一个给MFS使用的分区,建议在生产环境中使用独立的分区或将磁盘挂载到此目录。
- 创建
/data
目录:
[root@chunk1 mfs]# mkdir /data
- 修改
/data
目录的所有者为mfs
用户和组:
[root@chunk1 mfs]# chown -R mfs:mfs /data
- 启动Chunk Server:
[root@chunk1 mfs]# /usr/local/mfs/sbin/mfschunkserver start
启动时会显示以下输出:
open files limit has been set to: 16384
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
setting glibc malloc arena max to 4
setting glibc malloc arena test to 4
initializing mfschunkserver modules ...
hdd space manager: path to scan: /data/
hdd space manager: start background hdd scanning (searching for available chunks)
main server module: listen on *:9422
no charts data file- initializing empty charts
mfschunkserver daemon initialized properly
- 检查Chunk Server进程是否正常运行:
[root@chunk1 mfs]# ps -ef | grep mfs
可能的输出示例:
mfs 5699 1 0 21:56 ? 00:00:00 /usr/local/mfs/sbin/mfschunkserver start
root 5725 1111 0 21:57 pts/0 00:00:00 grep mfs
停止Chunk Server
要停止Chunk Server,可以使用以下命令:
[root@chunk1 mfs]# /usr/local/mfs/sbin/mfschunkserver stop
以上步骤完整描述了在三台服务器上搭建Chunk Server的过程,请按步骤逐步执行。
4.MFS客户端
搭建和配置MFS客户端涉及多个步骤,包括安装FUSE、安装MFS客户端、挂载MFS文件系统等。以下是详细的步骤说明:
步骤1:安装FUSE
- 下载FUSE源码包:
[root@client ~]# wget https://github.com/libfuse/libfuse/releases/download/fuse-2.9.7/fuse-2.9.7.tar.gz
- 解压FUSE源码包:
[root@client ~]# tar zvxf fuse-2.9.7.tar.gz
- 进入解压后的目录:
[root@client ~]# cd fuse-2.9.7/
- 配置FUSE:
[root@client fuse-2.9.7]# ./configure
- 编译并安装FUSE:
[root@client fuse-2.9.7]# make && make install
- 设置环境变量,编辑
/etc/profile
文件:
bash [root@client ~]# vim /etc/profile
在文件末尾添加以下内容以设置PKG_CONFIG_PATH
环境变量:
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
- 重新加载环境变量:
[root@client ~]# source /etc/profile
步骤2:安装MFS客户端
- 添加
mfs
用户,不允许登录且不创建home目录:
[root@client ~]# useradd -s /sbin/nologin -M mfs
- 解压MooseFS安装包:
[root@client ~]# tar zvxf moosefs-3.0.84-1.tar.gz
- 进入解压后的目录:
[root@client ~]# cd moosefs-3.0.84/
- 配置MooseFS客户端,禁用mfsmaster和mfschunkserver,启用mfsmount,指定安装路径和默认用户、组为
mfs
:
[root@client moosefs-3.0.84]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver --enable-mfsmount
- 编译并安装MooseFS客户端:
[root@client moosefs-3.0.84]# make && make install
步骤3:挂载MFS文件系统
- 创建挂载点目录:
[root@client ~]# mkdir /mnt/mfs
- 加载FUSE模块到内核:
[root@client ~]# modprobe fuse
- 挂载MFS文件系统,指定Master Server的IP地址:
[root@client ~]# /usr/local/mfs/bin/mfsmount /mnt/mfs -H 192.168.9.200
挂载成功后,会显示以下信息:
mfsmaster accepted connection with parameters: read-write,restricted_ip,admin ; root mapped to root:root
- 查看挂载情况:
[root@client ~]# df -Th
可能的输出示例:
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/cl-root xfs 19G 5.3G 13G 29% /
devtmpfs devtmpfs 2.0G 0 2.0G 0% /dev
tmpfs tmpfs 2.0G 144k 2.0G 1% /dev/shm
tmpfs tmpfs 2.0G 27M 2.0G 2% /run
tmpfs tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/vda1 xfs 1.1G 181M 883M 17% /boot
tmpfs tmpfs 398M 4.1k 398M 1% /run/user/42
tmpfs tmpfs 398M 37k 398M 1% /run/user/0
192.168.9.200:9421 fuse.mfs 65G 16G 50G 24% /mnt/mfs
- 如果需要卸载MFS文件系统,可以使用以下命令:
[root@client ~]# umount /mnt/mfs
步骤4:MFS常用操作
- 添加MFS命令路径到环境变量,编辑
/etc/profile
文件:
[root@client ~]# vim /etc/profile
在文件末尾添加以下内容:
export PATH=/usr/local/mfs/bin:$PATH
- 重新加载环境变量:
[root@client ~]# source /etc/profile
- 使用
mfsgetgoal
命令查看文件的复制份数,可以通过-r
选项递归查询整个目录:
[root@client ~]# mfsgetgoal -r /mnt/mfs/
输出示例:
/mnt/mfs/:
directories with goal 2 : 1
- 使用
mfssetgoal
命令设置文件的复制份数:
[root@client ~]# mfssetgoal-r 3 /mnt/mfs/
修改后的复制份数可以通过以下命令验证:
[root@client ~]# mfsgetgoal -r /mnt/mfs/
- 测试在MFS中创建文件:
[root@client ~]# cd /mnt/mfs
[root@client mfs]# touch test
[root@client mfs]# mfsgetgoal test
输出示例:
test: 3
以上步骤完整描述了配置MFS客户端的过程,请按步骤逐步执行。
5. MFS 监控
-
MFS 监控简介:
- Mfscgiserv 是一个用 Python 编写的 Web 服务器,监听端口为 9425。
- 可在 Master Server 上通过命令
/usr/local/mfs/sbin/mfscgiserv
启动。 - 用户可以通过浏览器访问
http://192.168.9.200:9425
进行全面监控。
-
监控内容:
- Info 部分: 显示 MFS 的基本信息。
- Servers 部分: 列出现有的 Chunk Server。
- Disks 部分: 显示 Chunk Server 的硬盘信息。
- Exports 部分: 列出可被挂载的目录。
- Mounts 部分: 列出已经被挂载的目录。
- Operations 部分: 显示当前正在执行的操作。
- Resources 部分: 列出当前的存储信息。
- Quitas 部分: 显示当前的配额信息。
- Master charts 部分: 展示 Master Server 的操作情况(如读、写、删除等操作)。
- Server charts 部分: 展示 Chunk Server 的操作情况、数据传输率及系统状态。
6. MFS 维护及灾难恢复
1) MFS 集群的启动与停止
- 启动顺序:
- 启动
mfsmaster
进程。 - 启动所有的
mfschunkserver
进程。 - 启动
mfsmetalogger
进程(如果配置了mfsmetalogger
)。 - 在所有客户端挂载 MFS 文件系统。
- 启动
- 停止顺序:
- 在所有客户端卸载 MFS 文件系统。
- 使用
mfschunkserver stop
命令停止 Chunk Server 进程。 - 使用
mfsmetalogger stop
命令停止 Metalogger 进程。 - 使用
mfsmaster stop
命令停止 Master 进程。
2) MFS 灾难恢复
- 主服务器故障处理:
- 直接断电后,Master Server 可能无法启动。可以使用命令
/usr/local/mfs/sbin/mfsmaster-a
进行修复。
- 直接断电后,Master Server 可能无法启动。可以使用命令
- 元数据:
- metadata.mfs: 主要元数据文件,当
mfsmaster
运行时会被命名为metadata.mfs.back
。 - changelog.*.mfs: 存储了过去 N 小时的文件变更日志(由
BACK_LOGS
参数决定,配置在mfschunkserver.cfg
中)。
- metadata.mfs: 主要元数据文件,当
- 从 Metalogger 恢复 Master:
- 安装一台新的
mfsmaster
,使用与原 Master 相同的配置。 - 将 Metalogger 上的
/usr/local/mfs/var/mfs/
目录下的文件复制到新的mfsmaster
目录中。
- 安装一台新的
scp root@192.168.9.202:/usr/local/mfs/var/mfs/* /usr/local/mfs/var/mfs/
3. 使用 `mfsmetarestore` 命令合并元数据 `changelogs`。
/usr/local/mfs/sbin/mfsmaster-a
- 注意事项:
- 如果是全新安装的 Master,恢复数据后需要更改
metalogger
和chunkserver
的配置文件中的MASTER_HOST
IP 地址,并重新挂载客户端。
- 如果是全新安装的 Master,恢复数据后需要更改