目录
配置Chunk Server1和Chunk Server2(步骤相同)
一.MFS分布式文件系统详述
分布式简介
- 由于一对多的存储服务器不可以承受业务上的需求,所以分布式文件系统应运而生,采用多对多的关系(即多web服务器对多文件服务器),这样可以使得性能大幅度提升
- 分布式文件系统(Distributed File System)是指文件系统·管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。简单来说就是把一些分散的(分布在局域网内的各个计算机上)共享文件夹,集合到一个文件夹内(虚拟共享文件夹)。对于用户来说,要访问这些共享文件夹时,只要打开这个虚拟共享文件夹,就可以看到所有链接到虚拟文件夹内的共享文件夹,这样用户就感觉不到这些共享文件是分散于各个计算机上的
- 分布式文件系统的好处是集中访问、简化操作、数据容灾、提供文件得存取性能
MFS分布式文件系统的原理
- MFS(MooseFS),是一个具有容错性的网络分布式文件系统,他把数据分散存放在多个物理服务器上,而呈现给用户的是一个统一的资源。MFS也像其他类的UNIX文件系统一样,包含了层级结构、文件属性,可以创建特殊的文件(块设备、字符设备、管道、套接字)、符号链接和硬链接
MFS文件系统的组成
- Master server(元数据服务器):在整个体系中负责管理文件系统,维护元数据
- MetaLogger server(元数据日志服务器):备份Master服务器的变化日志文件,文件类型为changelog_ml.*.mfs。当Master服务器数据丢失或者损坏,可以从日志服务器中取得文件恢复
- Chunk server(数据存储服务器):真正存储数据的服务器,存储文件时,会把文件分块保存,并且在数据服务器之间复制,数据服务器越多,能够使用的“容量”就越大,可靠性就越高,性能就越好
- Client(客户端):挂载MFS文件系统,使用MFS资源
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地址 |
Master Server | 192.168.43.101/24 |
MetaLogger Server | 192.168.43.102/24 |
Chunk Server1 | 192.168.43.103/24 |
Chunk Server2 | 192.168.43.104/24 |
Cilent | 192.168.43.105/24 |
配置Master Server
- 配置基本环境
##关闭安全性功能(生产环境中是永久性关闭)
systemctl stop firewalld
setenforce 0
##配置主机名
hostnamectl set-hostname master
##配置地址映射
vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.43.101 master
192.168.43.102 metalogger
192.168.43.103 chunk1
192.168.43.104 chunk2
192.168.43.105 client
-
安装相关依赖包
yum install -y gcc gcc-c++ zlib-devel
- 创建用户
[root@master ~]# useradd -s /sbin/nologin -M mfs
-
编辑编译安装mfs源码包
[root@master ~]# cd /opt
[root@master opt]# tar xzvf moosefs-3.0.100-1.tar.gz -C /opt/
[root@master 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
-
复制MFS配置文件
[root@master mfs]# ls
mfsexports.cfg.sample mfsmetalogger.cfg.sample
mfsmaster.cfg.sample mfstopology.cfg.sample
[root@master mfs]# cp mfsmaster.cfg.sample mfsmaster.cfg
[root@master mfs]# cp mfsexports.cfg.sample mfsexports.cfg
[root@master mfs]# cp mfsmetalogger.cfg.sample mfsmetalogger.cfg
[root@master mfs]# cp mfstopology.cfg.sample mfstopology.cfg
[root@master mfs]# ls
mfsexports.cfg mfsmaster.cfg.sample mfstopology.cfg
mfsexports.cfg.sample mfsmetalogger.cfg mfstopology.cfg.sample
mfsmaster.cfg mfsmetalogger.cfg.sample
[root@master mfs]# cd /usr/local/mfs/var/mfs
[root@master mfs]# ls
metadata.mfs.empty
[root@master mfs]# cp metadata.mfs.empty metadata.mfs
[root@master mfs]# chown mfs:mfs /usr/local/mfs/var/mfs
-
启动mfsmaster
[root@master ~]# /usr/local/mfs/sbin/mfsmaster start
open files limit has been set to: 16384
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmaster modules ...
exports file has been loaded
topology file has been loaded
loading metadata ...
metadata file has been loaded
no charts data file - initializing empty charts
master <-> metaloggers module: listen on *:9419
master <-> chunkservers module: listen on *:9420
main master server module: listen on *:9421
mfsmaster daemon initialized properly
[root@master ~]# netstat -natp | grep mfs
tcp 0 0 0.0.0.0:9419 0.0.0.0:* LISTEN 38654/mfsmaster
tcp 0 0 0.0.0.0:9420 0.0.0.0:* LISTEN 38654/mfsmaster
tcp 0 0 0.0.0.0:9421 0.0.0.0:* LISTEN 38654/mfsmaster
配置MetaLogger Server
- 配置基本环境
##关闭安全性功能(生产环境中是永久性关闭)
systemctl stop firewalld
setenforce 0
##配置主机名
hostnamectl set-hostname metalogger
##配置地址映射
vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.43.101 master
192.168.43.102 metalogger
192.168.43.103 chunk1
192.168.43.104 chunk2
192.168.43.105 client
- 安装相关依赖包
yum install gcc gcc-c++ zlib-devel -y
- 创建用户
[root@metalogger ~]# useradd -s /sbin/nologin -M mfs
- 编辑编辑安装源码包
[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
- 复制metalogger主配置文件且修改
[root@metalogger moosefs-3.0.100]# cd /usr/local/mfs/etc/mfs/
[root@metalogger mfs]# ls
mfsexports.cfg.sample mfsmetalogger.cfg.sample
mfsmaster.cfg.sample mfstopology.cfg.sample
[root@metalogger mfs]# cp mfsmetalogger.cfg.sample mfsmetalogger.cfg
[root@metalogger mfs]# vi /usr/local/mfs/etc/mfs/mfsmetalogger.cfg
MASTER_HOST = 192.168.43.101 //指定master地址
- 开启服务
[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
[root@metalogger mfs]# netstat -natp | grep mfs
tcp 0 0 192.168.43.102:42268 192.168.43.101:9419 ESTABLISHED 60076/mfsmetalogger
配置Chunk Server1和Chunk Server2(步骤相同)
- 配置基本环境
##关闭安全性功能(生产环境中是永久性关闭)
systemctl stop firewalld
setenforce 0
##配置主机名
hostnamectl set-hostname chunk1
##配置地址映射
vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.43.101 master
192.168.43.102 metalogger
192.168.43.103 chunk1
192.168.43.104 chunk2
192.168.43.105 client
- 安装相关依赖包
yum -y install gcc gcc-c++ zlib-devel
- 创建用户
[root@chunk1 ~]# useradd -s /sbin/nologin -M mfs
- 编辑编辑安装源码包
[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
- 复制metalogger主配置文件且修改
[root@chunk1 moosefs-3.0.100]# cd /usr/local/mfs/etc/mfs/
[root@chunk1 mfs]# ll
总用量 32
-rw-r--r-- 1 root root 3491 4月 12 08:13 mfschunkserver.cfg.sample
-rw-r--r-- 1 root root 1648 4月 12 08:13 mfshdd.cfg.sample
-rw-r--r-- 1 root root 2175 4月 12 08:13 mfsmetalogger.cfg.sample
[root@chunk1 mfs]# cp mfschunkserver.cfg.sample mfschunkserver.cfg
[root@chunk1 mfs]# cp mfshdd.cfg.sample mfshdd.cfg
●修改 mfschunk 主配置文件, 指定 master。
[root@chunk1 mfs]# vi mfschunkserver.cfg
MASTER_HOST = 192.168.43.101
[root@chunk1 mfs]# vi mfshdd.cfg
/data //指定数据存放目录
[root@chunk1 mfs]# mkdir /data
[root@chunk1 mfs]# chown -R mfs:mfs /data
- 开启服务
[root@chunk1 ~]# /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
[root@chunk1 ~]# netstat -natp | grep mfs
tcp 0 0 0.0.0.0:9422 0.0.0.0:* LISTEN 24112/mfschunkserve
tcp 0 0 192.168.43.103:43390 192.168.43.101:9420 ESTABLISHED 24112/mfschunkserve
配置Client
- 配置基本环境
##关闭安全性功能(生产环境中是永久性关闭)
systemctl stop firewalld
setenforce 0
##配置主机名
hostnamectl set-hostname client
##配置地址映射
vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.43.101 master
192.168.43.102 metalogger
192.168.43.103 chunk1
192.168.43.104 chunk2
192.168.43.105 client
- 安装相关依赖包
yum -y install gcc gcc-c++ zlib-devel
- 编辑编译安装客户端
[root@client ~]# cd /opt
[root@client opt]# tar xzvf fuse-2.9.2.tar.gz -C /opt
[root@client opt]# cd fuse-2.9.2
[root@client fuse-2.9.2]# ./configure
[root@client fuse-2.9.2]# make && make install
##设置环境变量
[root@client fuse-2.9.2]# vi /etc/profile
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
[root@client fuse-2.9.2]# source /etc/profile
- 配置MFS客户端
[root@client fuse-2.9.2]# cd /opt
[root@client opt]# useradd -s /sbin/nologin -M mfs
[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 instal
- 挂载MFS文件系统
[root@client ~]# mkdir /opt/mfs
[root@client ~]# modprobe fuse //加载fuse模块到内核中去
[root@client ~]# /usr/local/mfs/bin/mfsmount /opt/mfs -H 192.168.43.101 //挂载MFS系统
mfsmaster accepted connection with parameters: read-write,restricted_ip,admin ; root mapped to root:root
[root@client ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda2 xfs 10G 3.9G 6.2G 39% /
devtmpfs devtmpfs 474M 0 474M 0% /dev
tmpfs tmpfs 489M 0 489M 0% /dev/shm
tmpfs tmpfs 489M 7.1M 482M 2% /run
tmpfs tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sda5 xfs 4.0G 37M 4.0G 1% /home
/dev/sda1 xfs 4.0G 158M 3.9G 4% /boot
tmpfs tmpfs 98M 12K 98M 1% /run/user/42
tmpfs tmpfs 98M 0 98M 0% /run/user/0
192.168.43.101:9421 fuse.mfs 40G 8.8G 32G 22% /opt/mfs
注:如果要卸载MFS系统,直接使用umount /opt/mfs
- 在client上操作MFS
[root@client ~]# vim /etc/profile
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
export PATH=/usr/local/mfs/bin:$PATH ###此处添加
[root@client ~]# source /etc/profile
##命令 mfsgetgoal 用来设置文件被复制的份数, 生产环境 Chunk Server 节点数量应至少
大于 2, 文件副本数小于等于 Chunk Server 服务器的数量
[root@client ~]# mfsgetgoal -r /opt/mfs
/opt/mfs:
directories with goal 2 : 1
[root@client ~]# mfssetgoal -r 2 /opt/mfs/
/opt/mfs/:
inodes with goal changed: 0
inodes with goal not changed: 1
inodes with permission denied: 0
[root@client ~]# cd /opt/mfs/
[root@client mfs]# ls
[root@client mfs]# echo "123" > 1.txt
[root@client mfs]# ls
1.txt
[root@client mfs]# mfsgetgoal 1.txt
1.txt: 2
Master Server启动监控程序,测试服务
- 开启监控功能,此功能可以在搭建好其他服务之后开启
[root@master ~]# /usr/local/mfs/sbin/mfscgiserv
lockfile created and locked
starting simple cgi server (host: any , port: 9425 , rootpath: /usr/local/mfs/share/mfscgi)
MFS维护与灾难恢复
- MFS 集群启动的顺序如下
(1) 启动 mfsmaster 进程。
(2) 启动所有的 mfschunkserver 进程。
(3) 启动 mfsmetalogger 进程(如果配置了 mfsmetalogger)。
(4) 在所有的客户端挂载 MFS 文件系统。
- MFS 集群停止的顺序如下
(1) 在所有的客户端卸载 MFS 文件系统。
(2) 用 mfschunkserver stop 命令停止 chunkserver 进程。
(3) 用 mfsmetalogger stop 命令停止 metalogger 进程。
(4) 用 mfsmaster stop 命令停止 master 进程
- MFS灾难恢复
整个 MFS 体系中, 直接断电只有 Master 有可能无法启动, 可以在 master 上使用命令
/usr/local/mfs/sbin/mfsmaster -a 修复如果是全新安装的 Master, 恢复数据后, 要更改 metalogger 和 chunkserver 配置
MASTER_HOST 的 IP, 客户端也需要重新挂载