Bootstrap

GlusterFS

目录

1、简介

2、GlusterFS特点

3、文件系统

4、GlusterFS专业术语

5、GlusterFS工作原理

6、GlusterFS的卷类型

二、GlusterFS实验

1、准备5台机器

 2、磁盘分区,并挂载 利用

 3、根据以下规划创建卷

4、 部署客户端

5、配置 /etc/hosts 文件

6、挂载 Gluster 文件系统

 7、破坏性测试


1、简介

⭐开源的分布式文件系统

⭐由存储服务器、客户端以及NFS/Samba存储网关组成

⭐无元数据服务器

2、GlusterFS特点

⭐扩展性和高性能(分布式特性)

⭐高可用性(冗余、容灾能力)

⭐全局统一命名空间

⭐弹性卷管理

⭐基于标准协议

3、文件系统

文件系统文件系统组成:

1、文件系统接口

2、对对像管理的软件集合

3、对象及熟悉

⭐文件系统作用:

从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。
具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取

⭐文件系统的挂教使用:

除根文件系统以外的文件系统创建后要使用需要先挂载至挂载点后才可以被访问,挂载点即分区设备文件关联的某个目录文件。类比:NFS

4、GlusterFS专业术语

⭐Brick(块存储服务器):实际存储用户数据的服务器

⭐Volume:本地文件系统的"分区"

⭐FUSE:用户空间的文件系统(类别EXT4),”这是一个伪文件系统“,用户端的交换模块

⭐VFS(虚拟端口):内核态的虚拟文件系统,用户是提交请求给VFS 然后VFS交给FUSH,再交给GFS客户端,最后由客户端交给远端的存储

⭐Glusterd(服务):是运行再存储节点的进程(客户端运行的是gluster client)GFS使用过程中整个GFS之间的交换由Gluster client 和glusterd完成

注:GFS会使用到以上的虚拟文件系统

5、GlusterFS工作原理

1、客户端通过挂载点目录,将数据转交给VFS接口

2、在通过VFS接口将数据转交给FUSE伪文件系统进行格式转换 

3、由于FUSE是没有转存工具直接发送到GlusterFS服务的的,所以需要转送到内存中,再由内存发送给GlusterFS服务端

4、这时就是GlusterFS服务端和和客户端吧、进程与进程质检进行对接数据传输

5、服务的在通过自己的VFS发送到自己的文件系统进行本地保存

注:x轴上方为用户态环境,可视化,下方则为系统换下内核环境

6、GlusterFS的卷类型

(1)分布式卷

⭐没有对文件进行分块处理

⭐通过扩展文件属性保存HASH值

⭐支持的底层文件系统有EXT3.EXT4.ZFS.XFS等

(2)条带卷

⭐根据偏移量将文件分成N块(N个条带节点),轮询的存储在每个Brick Server节点

⭐存储大文件时,性能尤为突出

⭐不具备冗余性,类似Raid0

(3) 复制卷

⭐同一文件保存一份或多分副本

⭐因为要保存副本,所以磁盘利用率较低

⭐若多个节点上的存储空间不一致,将按照木桶效应取最低节点的容量作为该卷的总容量

(4)分布式条带卷

⭐兼顾分布式卷和条带卷的功能

⭐主要用于大文件访问处理

⭐至少最少需要4天服务器

(5)分布式复制卷

⭐兼顾分布式卷和复制卷的功能

⭐用于需要冗余的情况

二、GlusterFS实验

1、准备5台机器

Node1:192.168.182.160

Node2:192.168.182.137

Node3:192.168.182.138

Node4:192.168.182.139

客户端:192.168.182.175

将每台机器 添加 大小为5G的磁盘

#关闭防火墙

systemctl stop firewalld

setenforce 0

 2、磁盘分区,并挂载 利用

2.磁盘分区,并挂载
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

cd /opt

chmod +x fdisk.sh

./fdisk.sh

将脚本执行

#配置各个节点的/etc/hosts文件(所有节点操作)

echo "192.168.182.160 node1" >> /etc/hosts

echo "192.168.182.137 node2" >> /etc/hosts

echo "192.168.182.138 node3" >> /etc/hosts

echo "192.168.182.139 node4" >> /etc/hosts

cd /etc/yum.repos.d/

mv * repos.bak/

vim glfs.repo

[glfs]

name=glfs

baseurl=file:///opt/gfsrepo

gpgcheck=0

enabled=1

安装、启动GFS(所有节点操作)

unzip gfsrepo.zip

 yum clean all && yum makecache

 yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma

如果出现以下情况 可以先删除之前的依赖包  然后在下载

rpm -e --nodeps glusterfs-api glusterfs-libs glusterfs-fuse glusterfs-cli  glusterfs glusterfs-client-xlators ##删除报错的依赖包

systemctl start glusterd.service

systemctl enable glusterd.service

systemctl status glusterd.service

添加DNS,进行时间同步

echo "nameserver 114.114.114.114" >> /etc/resolv.conf

ntpdate ntp1.aliyun.com

添加节点到存储信任池中(在任意一个node中操作)

gluster peer probe node1

gluster peer probe node2

gluster peer probe node3

gluster peer probe node4

更改一下名字 在进行添加

 

在每个node节点上查看群集状态

gluster peer status

 3、根据以下规划创建卷

卷名称

卷类型

Brick

dis-volume

分布式卷

node1(/data/sdb1)、node2(/data/sdb1)

stripe-volume

条带卷

node1(/data/sdc1)、node2(/data/sdc1)

rep-volume

复制卷

node3(/data/sdb1)、node4(/data/sdb1)

dis-stripe

分布式条带卷

node1(/data/sdd1)、node2(/data/sdd1)、node3(/data/sdd1)、node4(/data/sdd1)

dis-rep

分布式复制卷

node1(/data/sde1)、node2(/data/sde1)、node3(/data/sde1)、node4(/data/sde1)

创建分布式卷,没有指定类型,默认创建的是分布式卷 

gluster volume create dis-volume node1:/data/sdb1 node2:/data/sdb1 force

gluster volume list

gluster volume start dis-volume

gluster volume info dis-volume

指定类型为 stripe,数值为 2,且后面跟了 2 个 Brick Server,所以创建的是条带卷 

gluster volume create stripe-volume stripe 2 node1:/data/sdc1 node2:/data/sdc1 force

gluster volume start stripe-volume

gluster volume info stripe-volume

指定类型为 replica,数值为 2,且后面跟了 2 个 Brick Server,所以创建的是复制卷

gluster volume create rep-volume replica 2 node3:/data/sdb1 node4:/data/sdb1 force

gluster volume start rep-volume

gluster volume info rep-volume

 创建分布式条带卷

gluster volume create dis-stripe stripe 2 node1:/data/sdd1 node2:/data/sdd1 node3:/data/sdd1 node4:/data/sdd1 force

gluster volume start dis-stripe

gluster volume info dis-stripe

 创建分布式复制卷

gluster volume create dis-rep replica 2 node1:/data/sde1 node2:/data/sde1 node3:/data/sde1 node4:/data/sde1 force

gluster volume start dis-rep

gluster volume info dis-rep

4、 部署客户端

(1)安装客户端软件

cd /etc/yum.repos.d/

mv * repos.bak/

vim glfs.repo

[glfs]

name=glfs

baseurl=file:///opt/gfsrepo

gpgcheck=0

enabled=1

yum clean all && yum makecache

cd /opt

unzip gfsrepo.zip

(2)创建挂载目录

yum -y install glusterfs glusterfs-fuse

mkdir -p /test/{dis,stripe,rep,dis_stripe,dis_rep}

5、配置 /etc/hosts 文件

echo "192.168.182.160 node1" >> /etc/hosts

echo "192.168.182.137 node2" >> /etc/hosts

echo "192.168.182.138 node3" >> /etc/hosts

echo "192.168.182.139 node4" >> /etc/hosts

6、挂载 Gluster 文件系统

#临时挂载

mount.glusterfs node1:dis-volume /test/dis

mount.glusterfs node1:stripe-volume /test/stripe

mount.glusterfs node1:rep-volume /test/rep

mount.glusterfs node1:dis-stripe /test/dis_stripe

mount.glusterfs node1:dis-rep /test/dis_rep

 Node1

 Node2

 Node3

 Node4

 7、破坏性测试

node2和node4的服务器进行挂机来模拟故障,然后在客户端上查看其他服务器的文件是否正常

(1)分布式卷数据 可以查看

(2)条带卷   不可查看

(3) 复制卷  可产查看

(4) 分布式复制卷  可查看

 注:当出现以下情况是

1、需要考虑是否是  各台机子的时间是否做了同步处理

2、需要查看版本是否一致[root@client /]# rpm -qa glusterfs glusterfs-fuse

3、或查看日志报错[root@client /]# cat /var/log/glusterfs/test0

;