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:优秀开源分布式存储系统的主要内容,如果未能解决你的问题,请参考以下文章

glusterfs简单介绍

GlusterFS分布式存储

GlusterFS分布式文件系统部署

分布式文件系统glusterfs

分布式文件系统GlusterFS介绍

分布式文件系统---GlusterFS介绍