分布式简介
分布式文件系统(Distributed File System) 是指文件系统管理的物理存储资源不一
定直接连接在本地节点上,而是通过计算机网络与节点相连。简单来说就是把一些分散的(分
布在局域网内各个计算机上) 共享文件夹, 集合到一个文件夹内(虚拟共享文件夹)。 对于
用户来说, 要访问这些共享文件夹时, 只要打开这个虚拟共享文件夹, 就可以看到所有链接
到虚拟共享文件夹内的共享文件夹, 用户感觉不到这些共享文件是分散于各个计算机上的。
分布式文件系统的好处是集中访问、 简化操作、 数据容灾、 提高文件存取性能
分布式文件系统优势
- 集中访问
- 简化操作
- 数据容灾
- 提高文件存取性能
MFS原理
MFS 是一个具有容错性的网络分布式文件系统, 它把数据分散存放在多个物理服务器上,
而呈现给用户的则是一个统一的资源。
MFS文件系统的组成
- 元数据服务器(Master): 在整个体系中负责管理文件系统, 维护元数据
- 元数据日志服务器(MetaLogger): 备份 Master 服务器的变化日志文件, 文件类型为
changelog_ml.*.mfs。 当 Master 服务器数据丢失或者损坏,
可以从日志服务器中取得文件恢复 - 数据存储服务器(Chunk Server): 真正存储数据的服务器。 存储文件时, 会把文件分块保存,
并在数据服务器之间复制, 数据服务器越多, 能使用的“容量”
就越大, 可靠性就越高, 性能越好。 - 客户端(Client): 可以像挂载 NFS 一样挂载 MFS 文件系统, 其操作是相同的。
MFS 读取数据的处理过程
- 客户端向元数据服务器发出读请求。
- 元数据服务器把所需数据存放的位置(Chunk Server 的 IP 地址和 Chunk 编号) 告知客户端。
- 客户端向已知的 Chunk Server 请求发送数据。
- Chunk Server 向客户端发送数据。
MFS 写入数据的处理过程
- 客户端向元数据服务器发送写入请求。
- 元数据服务器与 Chunk Server 进行交互(只有当所需的分块 Chunks 存在的时候才进行这个交互),
但元数据服务器只在某些服务器创建新的分块 Chunks,创建成功后由Servers 告知元数据服务器操作成功 - 元数据服务器告知客户端, 可以在哪个 Chunk Server 的哪些 Chunks 写入数据。
- 客户端向指定的 Chunk Server 写入数据
- 该 Chunk Server 与其他 Chunk Server 进行数据同步, 同步成功后 Chunk Server 告知客户端数据写入成功。
- 客户端告知元数据服务器本次写入完毕
搭建MFS服务
- 实验环境
主机名 | IP地址 | 操作系统 | 软件包 |
mfsmaster | 192.168.179.137 | CentOS 7.6 | |
metalogger | 192.168.179.128 | CentOS 7.6 | |
chunk1 | 192.168.179.133 | CentOS 7.6 | |
chunk2 | 192.168.179.148 | CentOS 7.6 | |
chunk3 | 192.168.179.129 | CentOS 7.6 | |
client | 192.168.179.130 | CentOS 7.6 |
环境准备(所有服务器)
- 关闭防火墙
- 关闭核心功能
- 配置主机名
- 配置hosts
systemctl stop firewalld.service
setenforce 0
hostnamectl set-hostname mfsmaster
hostnamectl set-hostname metalogger
hostnamectl set-hostname chunk1
hostnamectl set-hostname chunk2
hostnamectl set-hostname chunk3
hostnamectl set-hostname client
- vim /etc/hosts
搭建Master Server
//安装相关依赖包
yum -y install gcc gcc-c++ zlib-devel
//创建用户
useradd -s /sbin/nologin -M mfs
//安装源码包
cd /mnt
tar xzvf moosefs-3.0.100-1.tar.gz -C /opt/
cd /opt/moosefs-3.0.100/
./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfschunkserver \
--disable-mfsmount
//编译安装
make && make install
//复制 master 配置文件
cd /usr/local/mfs/etc/mfs/
cp mfsmaster.cfg.sample mfsmaster.cfg
cp mfsexports.cfg.sample mfsexports.cfg
cp mfstopology.cfg.sample mfstopology.cfg
cd /usr/local/mfs/var/mfs/
cp -p metadata.mfs.empty metadata.mfs
//启动服务
/usr/local/mfs/sbin/mfsmaster start
- 查看服务状态
搭建MetaLogger server
//安装相关依赖包
yum -y install gcc zlib-devel
//创建用户
useradd -s /sbin/nologin -M mfs
//安装源码包
cd /mnt
tar xzvf moosefs-3.0.100-1.tar.gz -C /opt/
cd /opt/moosefs-3.0.100/
./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfschunkserver \
--disable-mfsmount
//编译安装
make && make install
//安装源码包,复制metalogger主配置文件
cd /usr/local/mfs/etc/mfs
cp mfsmetalogger.cfg.sample mfsmetalogger.cfg
//修改metalogger主配置文件,指定 master 地址
vi /usr/local/mfs/etc/mfs/mfsmetalogger.cfg
MASTER_HOST = 192.168.179.137
//启动服务
/usr/local/mfs/sbin/mfsmetalogger start
//查看服务状态
netstat -anpt | grep mfs
搭建chunkserver1、chunkserver2、chunkserver3
//安装相关依赖包
yum -y install gcc zlib-devel
//创建用户
useradd -s /sbin/nologin -M mfs
//安装源码包
cd /mnt
tar xzvf moosefs-3.0.100-1.tar.gz -C /opt/
cd /opt/moosefs-3.0.100/
./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfsmaster \
--disable-mfsmount
//编译安装
make && make install
//复制 mfschunk 配置文件
cd /usr/local/mfs/etc/mfs/
cp mfschunkserver.cfg.sample mfschunkserver.cfg
cp mfshdd.cfg.sample mfshdd.cfg
//修改mfschunk主配置文件,指定master。
vi mfschunkserver.cfg
MASTER_HOST = 192.168.179.137
vi mfshdd.cfg
/data
//创建存储目录
mkdir /data
//修改权限
chown -R mfs:mfs /data
//启动服务
/usr/local/mfs/sbin/mfschunkserver start
//查看服务状态
netstat -anpt | grep mfs
搭建client
//安装相关依赖包
yum -y install gcc zlib-devel
//安装 FUSE
cd /opt
tar xzvf fuse-2.9.2.tar.gz -C /opt
cd fuse-2.9.2
./configure
make && make install
//设置环境变量
vi /etc/profile
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
source /etc/profile
//创建管理用户
useradd -s /sbin/nologin -M mfs
//安装 MFS 客户端
cd /mnt/Y2C
tar xzvf moosefs-3.0.100-1.tar.gz -C /opt/
cd /opt/moosefs-3.0.100/
./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfsmaster \
--disable-mfschunkserver \
--enable-mfsmount
//编译安装
make && make install
//挂载 MFS 文件系统
cd ~
mkdir /opt/mfs
modprobe fuse ####加载 fuse 模块到内核
/usr/local/mfs/bin/mfsmount /opt/mfs -H 192.168.179.137 ####master地址
//查看挂载情况
df -hT
###如果要卸载 MFS, 使用命令 umount /opt/mfs 即可###
MFS常用操作
MFS 在客户端安装完毕后, 会生成/usr/local/mfs/bin/目录, 在这个目录下有很多命
令是用户所需要的。 为了方便使用这些命令, 可将/usr/local/mfs/bin 加入到环境变量中
vim /etc/profile
export PATH=/usr/local/mfs/bin:$PATH ##末尾添加
source /etc/profile
mfsgetgoal 命令用来查询文件被复制的份数, 利用-r 命令可以对整个目录进行递归,
goal 是指文件被复制的份数
mfsgetgoal -r /opt/mfs
命令 mfsgetgoal 用来设置文件被复制的份数, 生产环境 Chunk Server 节点数量应至少
大于 2, 文件副本数小于等于 Chunk Server 服务器的数量
mfssetgoal -r 3 /opt/mfs/
创建文件测试如下
cd /opt/mfs/
touch 51xit
mfsgetgoal 51xit
51xit: 3
Master Server----启动监控程序
/usr/local/mfs/sbin/mfscgiserv
打开浏览器访问
http://192.168.179.137:9425
http://192.168.179.137:9425/mfs.cgi?masterhost=mfsmaster //注意主机名