GFS分布式文件系统系统;理论加实验搭建

GlusterFS概述

GlusterFS简介
●开源的分布式文件系统

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

●无元数据服务器

GlusterFS特点
●扩展性和高性能

●高可用性

●全局统一命名空间

●弹性卷管理

●基于标准协议

GlusterFS术语

  • Brick:GFS中的存储单元
  • Volume:一组bricks的逻辑集合
  • FUSE:GFS的内核模块
  • VFS:Linux核心概念
  • Glusterd:glusterd服务

模块化堆栈式架构
●模块化,堆栈式架构

●通过对模块的组合,实现复杂的功能
在这里插入图片描述

GlusterFS工作原理

GlusterFS工作流程
在这里插入图片描述

弹性HASH算法
●通过HASH算法得到一个32位的整数

●划分为N个连续的子空间,每个空间对应一个Brick

●弹性HASH算法的优点

  • 保证数据平均分布在每一个Brick中
  • 解决了对元数据服务器的依赖,进而解决了单点故障以及访问瓶颈
    在这里插入图片描述
    在这里插入图片描述

GlusterFS的卷类型

  • 分布式卷:分布式存储
  • 条带卷:同时去读写
  • 复制卷:复制一份到节点上
  • 分布式条带卷
  • 分布式复制卷
  • 条带复制卷
  • 分布式条带复制卷

分布式卷

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

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

●支持的底层文件系统有EXT3 EXT4 ZFS XFS等
在这里插入图片描述
分布式卷的特点
●文件分布在不同的服务器,不具备冗余性

●更容易和廉价地扩展卷地大小

●单点故障会造成数据丢失

●依赖底层的数据保护

创建分布式卷
在web1上面将web1的sdb1卷和web2的sdb1卷创建分布卷,名为dis-vol

[root@web1 yum.repos.d]# gluster volume create dis-vol web1:/data/sdb1 web2:/data/sdb1 force

条带卷

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

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

●不具备冗余性,类似于Raid 0

●读写速度快,不具备安全性
在这里插入图片描述
特点
●数据被分割成更小块分布到块服务器群中的不同条带区

●分布减少了负载且更小的文件加速了存取的速度

●没有数据冗余
创建条带卷
在web3上面将web3的sdd1卷和web4的sdd1卷创建条带卷,名为stripe-volume
Stripe:分块

[root@web1 sdb1]# gluster volume create stripe-volume stripe 2 web3:/data/sdd1 web4:/data/sdd1 force

复制卷

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

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

●若多个节点上的存储空间不一致,将按照木桶效应取最低节点的容量作为该卷的总容量
木桶效应:以最小的内存空间为决定
在这里插入图片描述
特点
●卷中所有的服务器均保存一个完整的副本

●卷的副本数量可由客户创建的时候决定

●至少由两个块服务器或更多服务器

●具备冗余性

创建复制卷
在web3上面将web3的sdb1卷和web4的sdb1卷创建复制卷,名为rep-vol

[root@web1 sdb1]# gluster volume create rep-vol replica 2 web3:/data/sdb1 web4:/data/sdb1 force  

分布式条带卷

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

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

●至少最少需要 4 台服务器

创建分布式条带卷

gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2

分布式复制卷

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

●用于需要冗余的情况下

创建分布式复制卷
在web3上面将web1的sde1卷和web2的sde1卷,web3的sde1,web4的sde1创建复制卷,名为dis-rep

[root@web3 ~]# gluster volume create dis-rep replica 2 web1:/data/sde1 web2:/data/sde1 web3:/data/sde1 web4:/data/sde1 force 

GFS分布式存储实验

实验环境

在这里插入图片描述

推荐步骤

1.服务端的虚拟机插入4块硬盘,并进行挂载(4台服务端都需要插入4块磁盘做测试),这边举例web1
在这里插入图片描述

[root@promote ~]# setenforce 0     ##关闭防护系统
[root@promote ~]# systemctl stop firewalld.service    ##关闭防火墙(这边一定要关闭防火墙)
[root@localhost ~]# hostnamectl set-hostname web1    ##修改主机名方便区分
[root@localhost ~]# su 
[root@web1 ~]# fdisk -l     ##查看磁盘分区情况

在这里插入图片描述
在这里插入图片描述
2.GFS集群开局设置

[root@web1 ~]# vim /etc/hosts    ##修改主机配置文件
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.148.131 web1     ##尾行添加IP地址和对应的主机名
192.168.148.132 web2
192.168.148.133 web3
192.168.148.134 web4
[root@web1 ~]# scp /etc/hosts root@192.168.148.132:/etc/hosts     ##用scp将修改过的配置文件拷贝到其他服务端,这样就不需要手动修改了
The authenticity of host '192.168.148.132 (192.168.148.132)' can't be established.
ECDSA key fingerprint is SHA256:vKFOoLyl7u5ksnUke5l4S+PbtZE1ZlisHuyy6PbCphU.
ECDSA key fingerprint is MD5:b9:f8:9d:9b:ae:95:fa:fd:5b:1f:db:eb:bf:e1:f1:e3.
Are you sure you want to continue connecting (yes/no)? yes   ##输入yes
Warning: Permanently added '192.168.148.132' (ECDSA) to the list of known hosts.
root@192.168.148.132's password:  ##输入密码
hosts                          100%  243   140.0KB/s   00:00 

在这里插入图片描述
Web3:

[root@web1 ~]# scp /etc/hosts root@192.168.148.133:/etc/hosts

在这里插入图片描述
Web4:

[root@web1 ~]# scp /etc/hosts root@192.168.148.134:/etc/hosts

在这里插入图片描述

[root@web1 ~]# cd /opt/
[root@web1 opt]# vim 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
[root@web1 opt]# chmod +x fdisk.sh 
[root@web1 opt]# ./fdisk.sh    ##执行脚本

查看挂载情况
在这里插入图片描述
将脚本拷贝到其他节点服务器,直接执行脚本查看挂载情况

[root@web1 opt]# scp fdisk.sh root@192.168.148.132:/opt/     ##拷贝到web2的/opt目录下,并执行
root@192.168.148.132's password: 
fdisk.sh                                                                                            100%  790   391.1KB/s   00:00   

在这里插入图片描述

[root@web1 opt]# scp fdisk.sh root@192.168.148.133:/opt/     ##拷贝到web3,并执行
root@192.168.148.133's password: 
fdisk.sh                                                                                            100%  790   515.3KB/s   00:00  

在这里插入图片描述

[root@web1 opt]# scp fdisk.sh root@192.168.148.134:/opt/       ####拷贝到web4,并执行
root@192.168.148.134's password: 
fdisk.sh

在这里插入图片描述
2.四台web主机都安装GLFS软件并启动gluster服务,此处仅展示web1主机

[root@web2 opt]# yum -y install centos-release-gluster    ##安装软件包
[root@web1 yum.repos.d]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
[root@web2 opt]# systemctl start glusterd     ##启动服务

WEB2:
在这里插入图片描述

[root@web1 yum.repos.d]# ntpdate ntp1.aliyun.com    ##所有服务器配置时间同步

在这里插入图片描述
3.添加存储信任池只要一台主机上添加其他节点即可

[root@web1 yum.repos.d]# gluster peer probe web2     ##添加web2节点
peer probe: success. 
[root@web1 yum.repos.d]# gluster peer probe web3    ##添加web3节点
peer probe: success. 
[root@web1 yum.repos.d]# gluster peer probe web4    ##添加web4节点
peer probe: success. 

[root@web1 yum.repos.d]# gluster peer status    ##查看节点状况

在这里插入图片描述
4.根据规划创建如下卷,分布卷;复制卷;分布复制卷;(6.1版本的gluster中的条带卷被移除了)

分布卷创建

1.在web1上面将web1的sdb1卷和web2的sdb1卷创建分布卷,名为dis-vol

[root@web1 yum.repos.d]# gluster volume create dis-vol web1:/data/sdb1 web2:/data/sdb1 force
[root@web1 yum.repos.d]# gluster volume info dis-vol     ##查看卷组状态

在这里插入图片描述

[root@web1 yum.repos.d]# gluster volume start dis-vol    ##将分布卷启动

在这里插入图片描述

[root@web1 yum.repos.d]# gluster volume stop dis-vol    ##停止卷组
Stopping volume will make its data inaccessible. Do you want to continue? (y/n) y    ##输入yes
[root@web1 yum.repos.d]# gluster volume delete dis-vol   ##删除卷组(删除前一定要先将卷组停止)

客户端做存储测试

[root@kehu ~]# yum -y install centos-release-gluster
[root@kehu ~]# yum -y install glusterfs glusterfs-server glusterfs-fuse    ##安装glusterfs包
[root@kehu ~]# setenforce 0
[root@kehu ~]# systemctl stop firewalld
[root@kehu ~]# vim /etc/hosts     ##客户端也需要修改主机配置文件
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.148.131 web1
192.168.148.132 web2
192.168.148.133 web3
192.168.148.134 web4
[root@kehu ~]# mkdir -p /test/dis   ##创建一个挂载点
[root@kehu ~]# mount.glusterfs web3:dis-vol /test/dis/     ##将分布卷挂载到/test/dis目录下

在这里插入图片描述
在/OPT目录下创建5个垃圾文件做测试

[root@kehu ~]# cd /opt/
[root@kehu opt]# dd if=/dev/zero of=/opt/demo1.log bs=1M count=40    
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.0162679 秒,2.6 GB/[root@kehu opt]# ls
demo1.log  inotify-tools-3.14  inotify-tools-3.14.tar.gz  redis-5.0.7  rh
[root@kehu opt]# dd if=/dev/zero of=/opt/demo2.log bs=1M count=40
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.05392 秒,778 MB/[root@kehu opt]# dd if=/dev/zero of=/opt/demo3.log bs=1M count=40
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.144482 秒,290 MB/[root@kehu opt]# dd if=/dev/zero of=/opt/demo4.log bs=1M count=40
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.167853 秒,250 MB/[root@kehu opt]# dd if=/dev/zero of=/opt/demo5.log bs=1M count=40
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.173962 秒,241 MB/[root@kehu opt]# ls
demo1.log  demo2.log  demo3.log  demo4.log  demo5.log  inotify-tools-3.14  inotify-tools-3.14.tar.gz  redis-5.0.7  rh
[root@kehu opt]# cp demo* /test/dis/    ##将测试文件拷贝到/挂载点目录下
[root@kehu opt]# cd /test/dis/
[root@kehu dis]# ls
demo1.log  demo2.log  demo3.log  demo4.log  demo5.log

回到服务端查看存储情况
Web1的存储情况,文件是完整的
在这里插入图片描述
Web2的存储情况
在这里插入图片描述

复制卷创建

服务端:
1.在web3上面将web3的sdb1卷和web4的sdb1卷创建复制卷,名为rep-vol

[root@web1 sdb1]# gluster volume create rep-vol replica 2 web3:/data/sdb1 web4:/data/sdb1 force     

在这里插入图片描述

[root@web1 sdb1]# gluster volume start rep-vol    ##将复制卷启动
客户端
[root@kehu dis]# mkdir /test/rep-vol
[root@kehu dis]# mount.glusterfs web3:rep-vol /test/rep-vol/
[root@kehu opt]# cp demo* /test/rep-vol/
回到服务端查看存储情况;发现复制卷是保存一份完整的

在这里插入图片描述

分布式复制卷

服务端:
在web3上面将web1的sde1卷和web2的sde1卷,web3的sde1,web4的sde1创建复制卷,名为dis-rep

[root@web3 ~]# gluster volume create dis-rep replica 2 web1:/data/sde1 web2:/data/sde1 web3:/data/sde1 web4:/data/sde1 force 

在这里插入图片描述

[root@web3 ~]# gluster volume start dis-rep   ##启动分布式复制卷

客户端配置

[root@kehu ~]# mkdir /test/dis-rep    ##创建挂载目录
[root@kehu ~]# mount.glusterfs web1:dis-rep /test/dis-rep/    ##将卷组挂载到挂载目录下
[root@kehu ~]# cd /opt/
[root@kehu opt]# cp demo* /test/dis-rep/

回到服务端查看:
在这里插入图片描述
在这里插入图片描述
访问控制:
仅拒绝

[root@web4 sde1]# gluster volume set dis-vol auth.reject 192.168.148.135

仅允许

[root@web4 sde1]# gluster volume set dis-vol auth.allow 192.168.148.135

猜你喜欢

转载自blog.csdn.net/Cpureman/article/details/108572700