论文需要实现一个分布式推荐系统。并行计算框架选择 Dpark,其对 MooseFS 做了优化,因此使用实验室的机器和自己的 VPS,基于 MooseFS 搭建了一个分布式存储系统。主要内容都可以在官网找到相关文档,这里不过是把一些地方加以翻译和简单梳理,部分地方加了少许自己的理解。
MooseFS 架构
MooseFS 主要分为4种服务器,分别提供不同的服务。对应的关系如下:
- Managing server (master server):是一个单独的服务器,用来管理整个文件系统。它存储了文件系统中每个文件的元数据(包括文件的大小,属性以及文件存储的位置等)。
- Data servers (chunk server):由若干台机器组成的数据服务器,用来实际存储文件的数据。它们之间还可以互相同步数据(这是因为每个文件在文件系统中可能拥有多个 copy,copy 的数量可以自行配置,见下文)。
- Metadata backup server(s) (metalogger server):由一台及以上机器组成,用来存储元数据的 changelogs,并且周期性地从 Managing server 中下载最新的 main metadata file。当 Managing server 挂掉的时候,系统会从 Metadata backup Servers 中选择一台作为 Managing server 使用。
- Clients:使用 MooseFS 的客户机。通过 mfsmount 进程和 Managing server 进行通信执行各种文件操作。
MooseFS 内部操作流程
这里使用 MooseFS 官网的两张图片说明执行文件操作时的内部执行流程:
Metadata 被存储在 Managing server 中的内存中,周期性地写回磁盘(并且更新日志)。同时这些内容会被同步到 metaloggers 中。 每个文件被分割为若干个 fragments(chunks),每个 chunk 是一个单独的文件,存储在 data server 上,单个大小最大为64MB。 通过为每个文件设置 “goal” 值来保证该文件的 copy 数量,以此保证文件系统的可靠性。 client 上的 mfsmount 进程在以下情况会直接和 managing server 通信: 1. 新建/删除文件 2. 读取目录内容 3. 读取/修改属性(个人理解为修改文件系统属性) 4. 改变文件大小 5. 读取/写入文件开始时 6. 修改任何一个特殊文件的 METADATA 时 mfsmount 会直接 data server 通信。当写入一个文件结束时,mfsmount 会通知 managing server 来修改该文件的元数据。 同时,多个 data server 之间也会相互通信,来保证相同文件在不同机器上的同步。
MooseFS 安装与配置
安装准备
环境采用 Ubuntu 14.04 作为 Master server 和 Chunk server,OS X 作为 client。 针对 Ubuntu,首先添加 repo key:
1 2 |
wget http://ppa.moosefs.com/stable/apt/moosefs.key sudo apt-key add moosefs.key |
然后修改
/etc/apt/sources.list.d/moosefs.list
添加:
1 |
deb http://ppa.moosefs.com/stable/apt/ubuntu/trusty trusty main |
最后执行:
1 |
sudo apt-get update |
针对 OS X,需要安装FUSE(采用 Homebrew):
1 |
brew install fuse |
然后从
http://ppa.moosefs.com/stable/osx/moosefs-ce-current.pkg
下载工具包安装。
Master server 安装
先安装 master server:
1 |
sudo apt-get install moosefs-ce-master |
然后进入
/etc/mfs
,执行:
1 2 |
cp mfsmaster.cfg.dist mfsmaster.cfg cp mfsexports.cfg.dist mfsexports.cfg |
修改 mfsexports.cfg 中第一行,该行表示访问权限。在最后添加
,password=pwdtext
,为文件系统添加密码。 修改/etc/default/moosefs-ce-master
中的MFSMASTER_ENABLE
为true
,使得该服务开机启动。 通过service
命令控制该服务的开启等操作:
1 |
service moosefs-ce-master start |
Chunk servers 安装
步骤和上述类似,先安装软件:
1 |
sudo apt-get install moosefs-ce-chunkserver |
复制对应的
/etc/mfs/mfschunkserver.cfg
和/etc/mfs/mfshdd.cfg
文件,并在后者中添加:
1 2 |
/mnt/mfschunk1 /mnt/mfschunk2 |
作为 MooseFS chunk 所在分区的挂载点(需要手动创建),然后修改用户 mfs 的权限,使其能够写入该分区:
1 2 |
chown -R mfs:mfs /mnt/mfschunks1 chown -R mfs:mfs /mnt/mfschunks2 |
最后修改
/etc/default/moosefs-ce-chunkserver
中的MFSCHUNKSERVER_ENBLE
为true
保证开机启动,并通过service
来控制当前运行情况。
Client 配置
在 OS X 上已经安装了相应的工具,现在仅需设置文件系统的挂载点并且使用 mfsmount 工具挂载即可:
1 2 |
mkdir -p /mnt/mfs mfsmount /mnt/mfs -p -H mfsmaster |
DNS 设置
以上操作需要在 chunk server 和 client 的 DNS 中设置 mfsmaster 的对应 IP 解析。自己直接修改了两种机器上的 hosts 文件,假设 master server 的 IP 地址为:
192.168.1.1
,添加如下一行:
1 |
192.168.1.1 mfsmaster |
错误恢复
昨天非法关机,导致今天启动 master server 的时候提示找不到 metadata.mfs 文件,启动失败。这是因为非法关机导致主元数据文件(main metadata file)不完整,需要将元数据变更日志整合进该文件中。只需执行以下命令:
1 |
mfsmaster -a |
然后重启服务即可。
注:转载注明出处并联系作者,本文链接:https://nodefe.com/moosefs-installation-and-config/