Linux:搭建GlusterFS文件系统

GlusterFS简介

官网地址:https://www.gluster.org

GlusterFS 是近年兴起的一个高性能开源分布式文件系统,其目标是全局命名空间、分布式前端的高性能文件系统,目前已被 RedHat 看中,GlusterFS 具有高扩展、高可性、高性能、可横向扩展等特点,并且 GlusterFS 没有元数据服务器的设计,使其没有单点故障问题。

重要概念

下面是关于GlusterFS的一些重要概念:

  • birck:最基本的存储单元,表示为trusted storage pool中输出的目录,供客户端挂载用。
  • volume:一个卷。在逻辑上由N个bricks组成。
  • metadata:元数据,用于描述文件、目录等的信息;
  • self-heal:用于后台运行检测副本卷中文件和目录的不一致性并解决这些不一致;
  • FUSE:Unix-like OS上的可动态加载的模块,允许用户不用修改内核即可创建自己的文件系统。
  • Gluster Server:数据存储服务器,即组成GlusterFS存储集群的节点;
  • Gluster Client:使用GlusterFS存储服务的服务器,如KVM、OpenStack、LB RealServer、HA node。
  • POSIX: 一个标准,GlusterFS兼容。

总体架构

image-20211009145256828

GlusterFS 的卷类型

为了满足不同应用对高性能、高可用的需求,GlusterFS 支持多种卷,详细信息可见官方文档:https://docs.gluster.org/en/latest/Administrator-Guide/Setting-Up-Volumes/#creating-dispersed-volumes。

下面简单介绍几种。

distribute volume分布式卷(类似raid 0但是数据不分片)默认

基于Hash算法将文件分布到所有的brick server上,只是单纯的扩大了磁盘空间,不具备冗余能力,数据丢了就丢了,由于distribute volume使用本地文件系统,因此存取效率并没有提高,相反会应为中间又加上了一层网络传输,效率反而降低了.另外本地存储设备的容量有限制,因此支持超大型文件会有一定的难度。

image-20211009150630917

Replicated Volumes 复制卷(类似Raid 1)

类似于Raid1,文件同步的复制到多个brick上,具有容错能力,写性能下降,读性能提升(待测),Replicated模式,也称作AFR(Auto File Replicated),同一个文件在多个镜像存储节点上保存多份,每个节点上都具有相应的目录结构和文件。replica volume是容器存储中较为推崇的一种。

image-20211009150823616

Distributed Replicated Volumes分布式复制卷

Brick server是镜像数的倍数,先组合分布式在组合成复制卷,也是最少需要4台服务器,这个多少组成分布和多少个副本数是自己创建的时候定义的。

image-20211009151131308

GlusterFS客户端常用命令

命令 功能
gluster peer probe 添加节点
gluster peer detach 移除节点
gluster volume create 创建卷
gluster volume start $VOLUME_NAME 启动卷
gluster volume stop $VOLUME_NAME 停止卷
gluster volume delete $VOlUME_NAME 删除卷
gluster volume quota enable 开启卷配额
gluster volume quota disable 关闭卷配额
gluster volume quota limitusage 设定卷配额

搭建

本文使用复制卷作为存储卷。如需要其他存储卷类型,请参考官方文档!!

环境准备

我这里准备三台Centos7服务器。

ip hostname 作用
192.168.1.100 node-100 Server
192.168.1.101 node-101 Server
192.168.1.102 node-102 Client

关闭防火墙(三台服务器都要执行):

systemctl stop firewalld
systemctl disable firewalld

设置主机名:

hostnamectl set-hostname node-100  #192.168.1.100主机执行
hostnamectl set-hostname node-101  #192.168.1.101主机执行
hostnamectl set-hostname node-102  #192.168.1.102主机执行

配置/etc/hosts:

vi /etc/hosts

#文件末尾添加如下内容
192.168.1.100 node-100
192.168.1.101 node-101
192.168.1.102 node-102

保存退出后,确保三台服务器互相ping hostname,都能ping通。

image-20211009151841935

Gluster Server端搭建

node-100和node-101服务器执行:

#软件安装
yum -y install centos-release-gluster
yum -y install glusterfs glusterfs-server glusterfs-fuse

server端启动gluster服务:

systemctl start glusterd
systemctl enable glusterd
systemctl enable glusterd

image-20211009152127046

创建集群:

我这里在node-100上执行,把node-101添加到集群中:

gluster peer probe node-101

这里如果报错:peer probe: failed: Probe returned with Transport endpoint is not connected

检查防火墙有没有关;能不能ping通hostname

image-20211009152344183

如果想从集群中去除节点,可以执行如下命令,但该节点中不能存在卷中正在使用的brick。

gluster peer detach 节点名称

查看集群状态:

gluster peer status

image-20211009152435822

创建复制卷,命令格式如下:

gluster volume create volume_name replica 2 node1:/data/br1 node2:/data/br1
  • volumn_name:卷名
  • node1:节点名
  • replica:文件保存的份数
  • /data/br1:可以理解为节点上的目录,这个目录最好是一个单独的分区(分区类型最好为逻辑卷的方式,这样易于操作系统级别的存储空间扩展),默认不能使用root分区进行创建卷,如需要root分区创建卷添加force参数

作为示例,我这里使用/opt/brick目录做为单独分区的挂载目录。

#两台服务器执行
mkdir -p /opt/brick

创建2副本的复制卷:

gluster volume create app-data replica 2 node-100:/opt/brick node-101:/opt/brick force

image-20211009152931931

列出卷:

gluster volume list

image-20211009153003478

启动这个卷:

gluster volume start app-data

image-20211009153036549

查看卷信息:

gluster volume info app-data

image-20211009153109389

打开GlusterFs磁盘限额,此处限制大小是10G,也可以不用设置

gluster volume quota app-data enable
gluster volume quota app-data limit-usage / 10GB

查看这个卷的状态:

gluster volume status

image-20211009153235001

Gluster Client端搭建

Glusterfs client端有三种客户端使用方式:Native mountNFSSamba

此处使用Native mount挂载gluster volume到node-100和node-101节点的本地目录/gfs-share下:

node-102服务器执行:

yum install glusterfs glusterfs-fuse attr -y
mkdir -p /gfs-share
mount -t glusterfs node-100:app-data /gfs-share

查看挂载情况:

df -h

image-20211009153613030

设置开机自动挂载:

vi /etc/fstab

#增加如下内容
node-100:/app-data  /gfs-share glusterfs  defaults 0 0

测试

Gluster Client端执行:

cd /gfs-share
touch file{1..9}.txt

创建了9个文件:

image-20211009153855145

去服务端查看:

ll /opt/brick/

image-20211009153942244

有几点说明

  • 服务端也可以将本地目录挂载到gluster的存储卷上。
  • 不能直接对birck修改,client端不会生效
  • 任意client端修改,其他client端和brick会自动修改
原文地址:https://www.cnblogs.com/wwjj4811/p/15386067.html