GlusterFS:优秀开源分布式存储系统
Posted 遙遙背影暖暖流星
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GlusterFS:优秀开源分布式存储系统相关的知识,希望对你有一定的参考价值。
一、GlusterFS简介
1、什么是glusterfs
Glusterfs是一个开源分布式文件系统,具有强大的横向扩展能力,可支持数PB存储容量和数千客户端,通过Infiniband RDMA 或Tcp/Ip 方式将许多廉价的x86 主机,通过网络互联成一个并行的网络文件系统。具有可扩展性、高性能、高可用性等特点。
2、GlusterFS特点
扩展性和高性能
高可用性
全局统一命名空间
弹性卷管理
基于标准协议
3、 GlusterFS术语
Brick :存储服务器节点
Volume :卷
FUSE :内核伪文件系统)
VFS:(虚拟端口):内核态的虚拟文件系统,用户是先提交请求交给VFS 然后VFS交给FUSE再交给GFS客户端,最后由客户端交给远端的存储
Glusterd:是运行在存储节点的进程
4、 模块化堆栈式架构
模块化、堆栈式的架构
通过对模块的组合,实现复杂的功能
二、GlusterFS工作原理
1 GlusterFS工作流程
GFS工作流程
写入过程:
gfs客户端将数据保存在GFS文件系统中(客户端在本地发出写请求),交由VFS的API接受请求,将数据交给FUSE(内核伪文件系统),FUSE对文件系统进行转存,转存的设备位置为: /dev/fuse,/dev/fuse 虚拟设备文件将数据交给GFS客户端,GFS客户端client会根据配置文件对数据进行处理,然后再通过网络发送到GFS服务端。
GFS服务端服务器接收到数据之后,会将数据保存在对应的存储节点上。
读取过程:
客户端在本地发出读请求,交由VFS的API接受请求,将数据交给FUSE(内核伪文件系统),FUSE在/dev/fuse 查询缓存,执行page函数读取内存,若缓存有,则返回客户端。若没有缓存,GFS客户端会去GFS服务端获取数据,GFS服务端通过VFS接口去本地读取缓存,再把缓存存储在/dev/fuse,读取了缓存数据之后再通过VFS返回给客户端。
2 弹性HASH算法
通过HASH算法得到一个32位的整数
HASH值有一个特性,数据唯一性
划分为N个连续的子空间,每个空间对应一个Brick
3 弹性HASH算法的优点
保证数据平均分布在每一个Brick中
解决了对元数据服务器的依赖,进而解决了单点故障以及访问瓶颈
4、卷的类型
GlusterFS 支持七种卷,即分布式卷、条带卷、复制卷、分布式条带卷、分布式复制卷、 条带复制卷和分布式条带复制卷
4.1 分布式卷(默认)
分布式卷(默认):文件通过 HASH 算法分布到所有 Brick Server 上, 这种卷是 Glusterfs 的基础;以文件为单位根据 HASH 算法散列到不同的 Brick,其实 只是扩大了磁盘空间,如果有一块磁盘损分布式卷也成为哈希卷,多个文件以文件为单位在多个brick上,使用哈希算法随机存储。
应用场景:大量小文件
优点:读/写性能好
缺点:如果存储或服务器故障,该brick上的数据将丢失
不指定卷类型,默认是分布式卷
gluster volume create 卷名 节点1@文件系统 节点2@文件系统 …
2、条带卷
根据偏移量将文件分为 N 块(N个条带节点),轮询的存储在每个 Brick Server 节点;
存储大文件时,性能尤为突出;
不具备冗余性,类似 raid0
条带卷特点
数据被分割成更小块分布到块服务器群中的不同条带区
分布减少了负载且更小的文件加速了存取的速度
没有数据冗余
创建条带卷的命令格式:
gluster volume create 卷名 stripe 条带数 节点1@文件系统 节点2@文件系统 ……
3、复制卷
复制卷(Replica volume):将文件同步到多个 Brick 上,使其具备多个文件副本, 属于文件级 RAID 1,具有容错能力。因为数据分散在多个 Brick 中,所以读性能得 到很大提升,但写性能下降。
同一文件保存一份或多分副本
因为要保存副本,所以磁盘利用率较低
若多个节点上的存储空间不一致,将按照木桶效应取最低节点的容量作为该卷的总容量
复制卷特点
卷中所有的服务器均保存一个完整的副本
卷的副本数量可由客户创建的时候决定
至少有两个块服务器或更多服务器
具备冗余性
创建复制卷的命令格式:
gluster volume create 卷名 replica 2 transport tcp 节点1@文件系统 节点2@文件系统 ……
4、分布式条带卷
分布式条带卷(Distribute Stripe volume):Brick Server 数量是条带数(数据块分布 的 Brick 数量)的倍数,兼具分布式卷和条带卷的特点。
兼顾分布式卷和条带卷的功能
主要用于大文件访问处理
至少最少需要4台服务器
gluster volume create 卷名 stripe 2 transport tcp 节点1@文件系统 节点2@文件系统 节点3@文件系统 节点4@文件系统 …………
5、分布式复制卷
分布式复制卷(Distribute Replica volume):Brick Server 数量是镜像数(数据副本 数量)的倍数,兼具分布式卷和复制卷的特点
兼顾分布式卷和复制卷的功能
用于需要冗余的情况
创建分布式复制卷的命令格式:
gluster volume create 卷名 replica 2 transport tcp 节点1@文件系统 节点2@文件系统 节点3@文件系统 节点4@文件系统 ……
注意,创建分布式条带卷,服务器数目是条带数的倍数(至少两倍)
6、条带复制卷
条带复制卷(Stripe Replica volume):类似 RAID 10,同时具有条带卷和复制卷的 特点
7、分布式条带复制卷
分布式条带复制卷(Distribute Stripe Replicavolume):三种基本卷的复合卷,通常 用于类 Map Reduce 应用
实验部分
文献:https://blog.csdn.net/weixin_48190863/article/details/119576751?spm=1001.2014.3001.5501
Node1节点: node1/192.168.100.6 磁盘:/dev/sdb1 挂载点:/data/sdb1
Node2节点:node2/192.168.100.7 磁盘:/dev/sdb1 挂载点:/data/sdb1
Node3节点: node3/192.168.100.8 磁盘:/dev/sdb1 挂载点:/data/sdb1
Node4节点: node3/192.168.100.9 磁盘:/dev/sdb1 挂载点:/data/sdb1
客户端节点:192.168.100.5
1、四个节点新增磁盘,利用脚本进行格式化、挂载
vim /opt/fdisk.sh
#!/bin/bash
echo "the disks exist list:"
fdisk -l |grep '磁盘 /dev/sd[a-z]'
echo "=================================================="
PS3="chose which disk you want to create:"
select VAR in `ls /dev/sd*|grep -o 'sd[b-z]'|uniq` quit
do
case $VAR in
sda)
fdisk -l /dev/sda
break ;;
sd[b-z])
#create partitions
echo "n #创建磁盘
p
w" | fdisk /dev/$VAR
#make filesystem
mkfs.xfs -i size=512 /dev/${VAR}"1" &> /dev/null #进行格式化
#mount the system
mkdir -p /data/${VAR}"1" &> /dev/null
echo -e "/dev/${VAR}"1" /data/${VAR}"1" xfs defaults 0 0\\n" >> /etc/fstab #永久挂载
mount -a &> /dev/null #使得挂载生效
break ;;
quit)
break;;
*)
echo "wrong disk,please check again";;
esac
done
chmod +x /opt/fdisk.sh
cd /opt/
sh -x fdisk.sh
2、所有服务器添加映射
echo "192.168.100.6 node1" >> /etc/hosts
echo "192.168.100.7 node2" >> /etc/hosts
echo "192.168.100.8 node3" >> /etc/hosts
echo "192.168.100.9 node4" >> /etc/hosts
echo "192.168.100.5 client" >> /etc/hosts
3、4个全都node节点上安装、启动GlusterFS
#将gfsrepo 软件上传到/opt目录下
cd /opt
unzip gfsrepo.zip
cd /etc/yum.repos.d/
mkdir repo.bak
mv *.repo repo.bak
vim /etc/yum.repos.d/glfs.repo
[glfs]
name=glfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1
yum clean all && yum makecache
安装
#yum -y install centos-release-gluster #如采用官方 YUM 源安装,可以直接指向互联网仓库
yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
如果出现报错
解决方法,卸载高版本,重新安装
rpm -e --nodeps glusterfs-api
rpm -e --nodeps glusterfs-libs
rpm -e --nodeps glusterfs-fuse
rpm -e --nodeps glusterfs-cli
yum -y install glusterfs-client-xlators.x86_64
yum -y install glusterfs-api.x86_64
yum install -y glusterfs-cli
如果还有其他软件包版本过高,直接卸载,重新安装即可
systemctl start glusterd.service
systemctl enable glusterd.service
systemctl status glusterd.service
ntpdate ntp1.aliyun.com
#只要在一台Node节点上添加其它节点即可
gluster peer probe node1
gluster peer probe node2
gluster peer probe node3
gluster peer probe node4
gluster peer status
以上是关于GlusterFS:优秀开源分布式存储系统的主要内容,如果未能解决你的问题,请参考以下文章