分布式
1、简介
分布式文件系统(Distributed File System) 是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。简单来说就是把一些分散的(分布在局域网内各个计算机上) 共享文件夹, 集合到一个文件夹内(虚拟共享文件夹)。 对于用户来说, 要访问这些共享文件夹时, 只要打开这个虚拟共享文件夹, 就可以看到所有链接到虚拟共享文件夹内的共享文件夹, 用户感觉不到这些共享文件是分散于各个计算机上的。分布式文件系统的好处是集中访问、简化操作、数据容灾、提高文件存取性能
2、分布式优势
- 集中访问
- 简化操作
- 数据容灾
- 提高文件存储性能
MFS分布式存储
1、简介
MFS 正式推出是在2008 年 5 月, 是一个具有容错功能的、 高可用、 可扩展的海量级分布式文件系统。 MFS 把数据分散在多台服务器上, 但用户看到的只是一个源。 MFS 也像其他类 UNIX 文件系统一样,包含了层级结构、 文件属性, 可以创建特殊的文件(块设备、 字符设备、 管道、 套接字)、符号链接和硬链接
2、MFS原理
MFS 是一个具有容错性的网络分布式文件系统, 它把数据分散存放在多个物理服务器上,而呈现给用户的则是一个统一的资源
3、MFS文件系统的组成
- 元数据服务器(Master): 在整个体系中负责管理文件系统, 维护元数据
- 元数据日志服务器(MetaLogger): 备份 Master 服务器的变化日志文件, 文件类型为changelog_ml.*.mfs。 当 Master 服务器数据丢失或者损坏,可以从日志服务器中取得文件恢复
- 数据存储服务器(Chunk Server): 真正存储数据的服务器。 存储文件时, 会把文件分块保存, 并在数据服务器之间复制, 数据服务器越多, 能使用的“容量” 就越大, 可靠性就越高, 性能越好。
- 客户端(Client): 可以像挂载 NFS 一样挂载 MFS 文件系统, 其操作是相同的
4、MFS 读取数据的处理过程
- 客户端向元数据服务器发出读请求。
- 元数据服务器把所需数据存放的位置(Chunk Server 的 IP 地址和 Chunk 编号) 告知客户端。
- 客户端向已知的 Chunk Server 请求发送数据。
- Chunk Server 向客户端发送数据。
5、MFS 写入数据的处理过程
- 客户端向元数据服务器发送写入请求。
- 元数据服务器与 Chunk Server 进行交互(只有当所需的分块 Chunks 存在的时候才进行这个交互),但元数据服务器只在某些服务器创建新的分块 Chunks,创建成功后由Servers 告知元数据服务器操作成功
- 元数据服务器告知客户端, 可以在哪个 Chunk Server 的哪些 Chunks 写入数据。
- 客户端向指定的 Chunk Server 写入数据
- 该 Chunk Server 与其他 Chunk Server 进行数据同步, 同步成功后 Chunk Server 告知客户端数据写入成功。
- 客户端告知元数据服务器本次写入完毕。
实验环境
1、基本组成架构拓扑图
2、IP地址规划
主机名 | 操作系统 | IP地址 |
---|---|---|
mfsmaster | CentOS 7.6 | 192.168.7.128 |
metalogger | CentOS 7.6 | 192.168.7.129 |
chunk1 | CentOS 7.6 | 192.168.7.134 |
chunk2 | CentOS 7.6 | 192.168.7.138 |
chunk3 | CentOS 7.6 | 192.168.7.135 |
client | CentOS 7.6 | 192.168.7.157 |
MFS安装部署
实验所需安装包:
链接:https://pan.baidu.com/s/1dvmx5McKBqNfXfdkd07deg
提取码:p42o
1、环境准备(所有服务器)
(1)关闭防火墙
(2)关闭核心功能
(3)配置主机名
(4)配置hosts
(5)将安装包上传至/opt目录下
2、搭建Master Server
(1)安装依赖包
[root@mfsmaster ~]# hostnamectl set-hostname mfsmaster
(2)创建用户
[root@mfsmaster ~]# useradd -s /sbin/nologin -M mfs
(3)安装源码包
[root@mfsmaster ~]# cd /opt
[root@mfsmaster opt]# tar xzvf moosefs-3.0.100-1.tar.gz -C /opt/
[root@mfsmaster opt]# cd /opt/moosefs-3.0.100/
[root@mfsmaster moosefs-3.0.100]# ./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfschunkserver \
--disable-mfsmount
[root@mfsmaster moosefs-3.0.100]# make && make install
(4)复制master配置文件,启动服务
[root@mfsmaster moosefs-3.0.100]# cd /usr/local/mfs/etc/mfs/
[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/
[root@mfsmaster mfs]# cp metadata.mfs.empty metadata.mfs
[root@mfsmaster mfs]# chown mfs:mfs /usr/local/mfs/var/mfs
#启动
[root@mfsmaster mfs]# /usr/local/mfs/sbin/mfsmaster start
[root@mfsmaster mfs]# netstat -anpt | grep mfs
tcp 0 0 0.0.0.0:9419 0.0.0.0:* LISTEN 7028/mfmaster
tcp 0 0 0.0.0.0:9420 0.0.0.0:* LISTEN 7028/mfmaster
tcp 0 0 0.0.0.0:9421 0.0.0.0:* LISTEN 7028/mfmaster
3、搭建MetaLogger server
(1)安装相关依赖包
[root@metalogger ~]# yum -y install gcc zlib-devel
(2)创建用户
[root@metalogger ~]# useradd -s /sbin/nologin -M mfs
(3)安装源码包 ##上传到/opt目录
[root@metalogger ~]# cd /opt
[root@metalogger opt]# tar xzvf moosefs-3.0.100-1.tar.gz -C /opt/
[root@metalogger opt]# cd /opt/moosefs-3.0.100/
[root@metalogger moosefs-3.0.100]# ./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfschunkserver \
--disable-mfsmount
[root@metalogger moosefs-3.0.100]# make && make install
(4)复制metalogger主配置文件
[root@metalogger moosefs-3.0.100]# cd /usr/local/mfs/etc/mfs
[root@metalogger mfs]# cp mfsmetalogger.cfg.sample mfsmetalogger.cfg
(5)修改metalogger主配置文件, 指定master地址
[root@metalogger mfs]# vi /usr/local/mfs/etc/mfs/mfsmetalogger.cfg
MASTER_HOST = 192.168.7.128
(6)启动服务
[root@metalogger mfs]# /usr/local/mfs/sbin/mfsmetalogger start
[root@metalogger mfs]# netstat -anpt | grep mfs
tcp 0 0 192.168.7.129:48212 192.168.7.128:9419 ESTABLISHED 7057/mfmetalogger
4、搭建chunkserver1、chunkserver2、chunkserver3
(1)安装相关依赖包
[root@chunk1 ~]# yum -y install gcc zlib-devel
(2)创建用户
[root@chunk1 ~]# useradd -s /sbin/nologin -M mfs
(3)安装源码包
[root@chunk1 ~]# cd /opt
[root@chunk1 opt]# tar xzvf moosefs-3.0.100-1.tar.gz -C /opt/
[root@chunk1 opt]# cd /opt/moosefs-3.0.100/
[root@chunk1 moosefs-3.0.100]# ./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfsmaster \
--disable-mfsmount
[root@chunk1 moosefs-3.0.100]# make && make install
(4)复制mfschunk配置文件
[root@chunk1 moosefs-3.0.100]# cd /usr/local/mfs/etc/mfs/
[root@chunk1 mfs]# cp mfschunkserver.cfg.sample mfschunkserver.cfg
[root@chunk1 mfs]# cp mfshdd.cfg.sample mfshdd.cfg
(5)修改mfschunk主配置文件, 指定master
[root@chunk1 mfs]# vi mfschunkserver.cfg
MASTER_HOST = 192.168.7.128
[root@chunk1 mfs]# vi mfshdd.cfg
/data
[root@chunk1 mfs]# mkdir /data
[root@chunk1 mfs]# chown -R mfs:mfs /data
(6)启动服务
[root@chunk1 mfs]# /usr/local/mfs/sbin/mfschunkserver start
[root@chunk1 mfs]# netstat -anpt | grep mfs
tcp 0 0 0.0.0.0:9422 0.0.0.0:* LISTEN 7187/mfchunkserver
tcp 0 0 192.168.7.134:47880 192.168.7.128:9420 ESTABLISHED 7187/mfchunkserver
5、搭建client
(1)安装相关依赖包
[root@client ~]# yum -y install gcc zlib-devel
(2)安装FUSE
[root@client ~]# cd /opt
[root@client opt]# tar zxvf fuse-2.9.2.tar.gz
[root@client opt]# cd fuse-2.9.2
[root@client fuse-2.9.2]# ./configure
[root@client fuse-2.9.2]# make && make install
(3)设置环境变量
[root@client ~]# vi /etc/profile
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
[root@client ~]# source /etc/profile
(4)安装MFS客户端
[root@chunk1 ~]# useradd -s /sbin/nologin -M mfs
[root@client ~]# cd /opt
[root@client opt]# tar xzvf moosefs-3.0.100-1.tar.gz -C /opt/
[root@client opt]# cd /opt/moosefs-3.0.100/
[root@client moosefs-3.0.100]# ./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfsmaster \
--disable-mfschunkserver \
--enable-mfsmount
[root@client moosefs-3.0.100]# make && make install
(5)挂载MFS文件系统
[root@client ~]# mkdir /opt/mfs
#加载fuse模块到内核
[root@client ~]# modprobe fuse
#挂载
[root@client ~]# /usr/local/mfs/bin/mfsmount /opt/mfs -H 192.168.7.128
mfsmaster accepted connection with parameters: read-write,restricted_ip,admin ; root mapped to root:root
6、MFS常用操作
(1)MFS 在客户端安装完毕后, 会生成/usr/local/mfs/bin/目录, 在这个目录下有很多命
令是用户所需要的。 为了方便使用这些命令, 可将/usr/local/mfs/bin 加入到环境变量中
[root@client ~]# vim /etc/profile
export PATH=/usr/local/mfs/bin:$PATH
[root@client ~]# source /etc/profile
(2)mfsgetgoal 命令用来查询文件被复制的份数, 利用-r 命令可以对整个目录进行递归,goal 是指文件被复制的份数
[root@client ~]# mfsgetgoal -r /opt/mfs
/opt/mfs:
directories with goal 2 : 1
(3) 命令 mfssetgoal 用来设置文件被复制的份数, 生产环境Chunk Server节点数量应至少大于 2, 文件副本数小于等于Chunk Server服务器的数量
[root@client ~]# mfssetgoal -r 3 /opt/mfs/
/opt/mfs/:
inodes with goal changed: 1
inodes with goal not changed: 0
inodes with permission denied: 0
(4)创建文件测试
[root@client ~]# cd /opt/mfs/
[root@client mfs]# touch test01
[root@client mfs]# mfsgetgoal test01
test01: 3
6、Master Server启动监控程序
[root@mfsmaster ~]# /usr/local/mfs/sbin/mfscgiserv
使用浏览器打开网址http://192.168.7.128:9425
查看
其中各部分的含义如下:
- Info 部分: 显示了 MFS 的基本信息
- Servers 部分: 列出现有 Chunk Server
- Disks 部分: 列出现有 Chunk Server 硬盘信息
- Exports 部分: 列出可被挂载的目录
- Mounts 部分: 列出被挂载的目录
- Operations 部分: 显示正在执行的操作
- Resources 部分: 列出当前存储信息
- Quitas 部分: 列出当前配额信息
- Master charts 部分: 显示 Master Server 的操作情况, 读、 写、 删除等操作
- Server charts 部分: 显示 Chunk Server 的操作情况、 数据传输率及系统状态
7、MFS 集群的启动与停止
(1)MFS 集群启动的顺序如下
- 启动 mfsmaster 进程。
- 启动所有的 mfschunkserver 进程。
- 启动 mfsmetalogger 进程(如果配置了 mfsmetalogger)。
- 在所有的客户端挂载 MFS 文件系统。
(2)MFS 集群停止的顺序如下。
- 在所有的客户端卸载 MFS 文件系统。
- 用 mfschunkserver stop 命令停止 chunkserver 进程。
- 用 mfsmetalogger stop 命令停止 metalogger 进程。
- 用 mfsmaster stop 命令停止 master 进程
8、MFS灾难恢复
(1)整个 MFS 体系中, 直接断电只有 Master 有可能无法启动, 可以在 master 上使用命令 /usr/local/mfs/sbin/mfsmaster -a
修复
(2)MFS元数据通常有两部分的数据,分别如下
①主要元数据文件 metadata.mfs, 当 mfsmaster 运行时会被命名为 metadata.mfs.back
②元数据改变日志 changelog.*.mfs, 存储了过去的 N 小时的文件改变(N 的数值是由
BACK_LOGS 参数设置的, 参数的设置在 mfschunkserver.cfg 配置文件中)
③在 Master 发生故障时, 可以从 MetaLogger 中恢复 Master, 步骤如下:
- 安装一台 mfsmaster, 利用同样的配置来配置这台 mfsmaster。
- 将 metalogger 上 /usr/local/mfs/var/mfs/目录下的文件复制到 mfsmaster 相应的目
录中
[root@mfsmaster ~]#scp [email protected]:/usr/local/mfs/var/mfs/* /usr/local/mfs/var/mfs/
- 利用 mfsmetarestore 命令合并元数据 changelogs。
[root@mfsmaster ~]#/usr/local/mfs/sbin/mfsmaster -a
- 如果是全新安装的 Master, 恢复数据后, 要更改 metalogger 和 chunkserver 配置MASTER_HOST 的 IP, 客户端也需要重新挂载