GFS分布式文件系统

文章目录

    • 一、GlusterFS概述
      • 1.1 GlusterFS简介
      • 1.2 GlusterFS特点
      • 1.3 GlusterFS术语
      • 1.4 模块化堆栈式架构
    • 二、GlusterFS工作原理
    • 三、GlusterFS的卷类型
      • 3.1 分布式卷
      • 3.2 条带卷
      • 3.3 复制卷
      • 3.4 分布式条带卷
      • 3.5 分布式复制卷
      • 3.6 访问控制
    • 四、Gluster群集部署

一、GlusterFS概述

1.1 GlusterFS简介

  1. 开源的分布式文件系统
  2. 由存储服务器、客户端以及NFS/Samba存储网关组成
  3. 无元数据服务器
  4. 开源的分布式文件系统

1.2 GlusterFS特点

  1. 扩展性和高性能
  2. 高可用性
  3. 全局同一命名空间
  4. 弹性卷管理
  5. 基于标准协议

1.3 GlusterFS术语

  1. Brick
  2. Volume
  3. FUSE
  4. VFS
  5. Glusterd

1.4 模块化堆栈式架构

  • 模块化、堆栈式的架构
  • 通过对模块的组合,实现复杂的功能
    GFS分布式文件系统_第1张图片

二、GlusterFS工作原理

  • GlusterFS工作流程
  • 弹性HASH算法
  1. 通过HASH算法得到一个32位的整数
  2. 划分为N各连续的子空间,每个空间对应一个Brick
  3. 弹性HASH算法的优点

①保持数据平均分布在每一个Brick中

②解决了对元数据服务器的依赖,进而解决了单点故障以及访问瓶颈

三、GlusterFS的卷类型

3.1 分布式卷

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

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

  • 支持的底层文件系统由EXT3、EXT4、ZFS、XFS等
    GFS分布式文件系统_第2张图片

  • 分布式卷的特点

  1. 文件分布在不同的服务器,不具备冗余性
  2. 更容易和廉价地扩展卷的大小
  3. 单点故障会造成数据丢失
  4. 依赖地层的数据保护
  • 创建分布式卷
gluster volume create dis-volume server1:/dir1 server2:/dir2 ser3:/dir3

3.2 条带卷

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

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

  • 不具备冗余性,类似Raid0
    GFS分布式文件系统_第3张图片

  • 特点

  1. 数据被分割成更小块分布到服务器群众的不同条带去
  2. 分布减少了负载且更小的文件加速了存取的速度
  3. 没有数据冗余
  • 创建条带卷:创建一个名为Stripe-volume的条带卷,文件将被分块轮询的存储在Server1::/dir1和Server2:/dir两个Brick中
gluster volume create stripe-volume stripe 2 transport tcp server1:dir1 server2:/dir2

3.3 复制卷

  • 同一文件保存一份或多份副本

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

  • 若多个节点上的存储空间不一致,将按照木桶效应最低节点的容量作为该卷的总容量
    GFS分布式文件系统_第4张图片

  • 特点

  1. 卷中所有的服务器均保存在一个完整的副本
  2. 卷的副本数量可由客户创建的时候决定
  3. 至少有两个快服务器或更多服务器
  4. 具备冗余性
  • 创建复制卷:创建名为rep-volume的复制卷,文件将同时存储两个副本,分别在Server1:/dir1和Server2:/dir2两个Brick中
gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2

3.4 分布式条带卷

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

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

  • 至少最少需要4台服务器
    GFS分布式文件系统_第5张图片

  • 创建分布式条带卷:创建名为dis-stripe的分布式条带卷,配置分布式的条带卷时,卷中Brick所包含的存储服务器数必须是条带数的倍数(>=2倍)

gluster volume create dis-stripe stripe 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4

3.5 分布式复制卷

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

  • 用于需要冗余的情况

  • 创建分布式复制卷:创建名为dis-rep的分布式条带卷,配置分布式复制卷时,卷中Brick所包含的存储服务器数必须是条袋鼠的倍数(>=2倍)

gluster volume create dis-rep replica 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4

3.6 访问控制

//仅拒绝
gluster volume set dis-vol auth.reject 192.168.50.134

//仅允许
gluster volume set dis-vol auth.allow 192.168.50.134

四、Gluster群集部署

  • 实验环境:VMware Workstation 15.5、Xshell 6、Centos7.6
  • 服务器IP规划
操作系统 作用 IP地址
Centos7.6 GFS-node1 192.168.50.133
Centos7.6 GFS-node2 192.168.50.134
Centos7.6 GFS-node3 192.168.50.135
Centos7.6 GFS-node4 192.168.50.136
Centos7.6 客户机 192.168.50.140
  • 实验步骤:(注意!实验前一定要关闭所有节点的防火墙!!!)

1、分别修改四台节点的主机名

hostnamectl set-hostname node1
hostnamectl set-hostname node2
hostnamectl set-hostname node3
hostnamectl set-hostname node4

2、编辑修改hosts文件

vim /etc/hosts      ## 编辑host文件

192.168.50.133 node1
192.168.50.134 node2
192.168.50.135 node3
192.168.50.136 node4

3、将修改过后的hosts文件推动到其他服务器

scp /etc/hosts [email protected]:/etc/hosts
scp /etc/hosts [email protected]:/etc/hosts
scp /etc/hosts [email protected]:/etc/hosts

4、编辑disk分区配置脚本

vim /opt/disk.sh    ## 创建disk分区脚本

#!/bin/bash
#
echo "the disk exist list:"
fdisk -l | grep '磁盘 /dev/sd[a-z]'
echo "===================================="
PS3="choose 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

5、将配置好的脚本上传到其他三台服务器

scp /opt/disk.sh [email protected]:/opt
scp /opt/disk.sh [email protected]:/opt
scp /opt/disk.sh [email protected]:/opt

6、使用阿里云的centos7.6 yum源安装gfs(每台设备均要安装)

mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo    ## 下载阿里云yum源配置文件
yum clean all    ## 清理yum源
yum list     ## 获取yum源列表

7、安装gfs(每台设备均要安装)

yum -y install centos-release-gluster
yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma

8、启动glusterfs

systemctl start glusterd.service

9、同步四台节点设备的时间

ntpdate ntp1.aliyun.com

10、添加节点到存储信任池(只要在任意一台主机商添加其他节点即可,我这里是在node1上执行命令)

gluster peer probe node2
gluster peer probe node3
gluster peer probe node4
每次执行命令后如果执行后返回 peer probe: success. 说明添加成功

11、使用命令查看所有节点信息

查看所有节点:gluster peer status 
[root@node1 yum.repos.d]# gluster peer status 
Number of Peers: 3

Hostname: node2
Uuid: 8b37c6d4-17c6-48b3-9603-a6f4781569ca
State: Peer in Cluster (Connected)

Hostname: node4
Uuid: 025bbca7-198c-45d2-90be-037d3eaa6c28
State: Peer in Cluster (Connected)

Hostname: node3
Uuid: cc071a1e-b21b-45db-ac8f-1b3e9ea85e6e
State: Peer in Cluster (Connected)

下面进行创建分布式卷:

1、在节点上创建分布式卷

gluster volume create dis-vol node1:/data/sdb1 node2:/data/sdb1 force
执行后返回:volume create: dis-vol: success: please start the volume to access data

2、创建成功后查看一下创建卷的信息

gluster volume info dis-vol    ## 查看分布式卷信息

Volume Name: dis-vol
Type: Distribute
Volume ID: 761e01cc-e9ef-464c-a16d-ce989d954786
Status: Created           ## 目前状态还不能使用
Snapshot Count: 0
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: node1:/data/sdb1
Brick2: node2:/data/sdb1
Options Reconfigured:
transport.address-family: inet
storage.fips-mode-rchecksum: on
nfs.disable: on

3、启动分布式卷

gluster volume start dis-vol    ## 启动分布式卷

执行后返回:volume start: dis-vol: success

Volume Name: dis-vol
Type: Distribute
Volume ID: 761e01cc-e9ef-464c-a16d-ce989d954786
Status: Started         ## 现在就已经启动好了
Snapshot Count: 0
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: node1:/data/sdb1
Brick2: node2:/data/sdb1
Options Reconfigured:
transport.address-family: inet
storage.fips-mode-rchecksum: on
nfs.disable: on

4、如果想要停止或删除卷,则可以执行以下命令

停止卷:gluster volume stop dis-vol
删除卷:gluster volume delete dis-vol (先停止再删除)

分布式卷创建结果验证:

在客户机创建挂载点目录:mkdir -p /test/dis

进行临时挂载:mount.glusterfs node2:dis-vol /test/dis/

生成测试文件:
dd if=/dev/zero of=/demo1.log bs=1M count=40
dd if=/dev/zero of=/demo2.log bs=1M count=40
dd if=/dev/zero of=/demo3.log bs=1M count=40
dd if=/dev/zero of=/demo4.log bs=1M count=40
dd if=/dev/zero of=/demo5.log bs=1M count=40

将测试文件拷贝到挂载目录中:cp demo* /test/dis/

验证:
[root@node1 sdb1]# ll /data/sdb1/
总用量 163840
-rw-r--r--. 2 root root 41943040 9月  13 21:57 demo1.log
-rw-r--r--. 2 root root 41943040 9月  13 21:57 demo2.log
-rw-r--r--. 2 root root 41943040 9月  13 21:57 demo3.log
-rw-r--r--. 2 root root 41943040 9月  13 21:57 demo4.log

[root@node2 yum.repos.d]# ls -lh /data/sdb1/
总用量 40M
-rw-r--r--. 2 root root 40M 9月  13 21:57 demo5.log

下面进行创建复制卷:

1、在节点三上进行创建复制卷

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

2、启动复制卷

gluster volume start rep-vol

3、在客户端上挂载

mkdir /test/rep-vol    ## 创建挂载点目录
mount.glusterfs node2:rep-vol /test/rep-vol/     ##挂载复制卷
cp demo* /test/rep-vol/     ## 拷贝测试文件去复制卷中

复制卷结果验证:

[root@node3 sdb1]# ll /data/sdb1/
总用量 204800
-rw-r--r--. 2 root root 41943040 9月  13 22:42 demo1.log
-rw-r--r--. 2 root root 41943040 9月  13 22:42 demo2.log
-rw-r--r--. 2 root root 41943040 9月  13 22:42 demo3.log
-rw-r--r--. 2 root root 41943040 9月  13 22:42 demo4.log
-rw-r--r--. 2 root root 41943040 9月  13 22:42 demo5.log

[root@node4 yum.repos.d]# ll /data/sdb1/
总用量 204800
-rw-r--r--. 2 root root 41943040 9月  13 22:42 demo1.log
-rw-r--r--. 2 root root 41943040 9月  13 22:42 demo2.log
-rw-r--r--. 2 root root 41943040 9月  13 22:42 demo3.log
-rw-r--r--. 2 root root 41943040 9月  13 22:42 demo4.log
-rw-r--r--. 2 root root 41943040 9月  13 22:42 demo5.log

下面进行创建分布式复制卷:

1、创建分布式复制卷

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

2、开启复制卷

gluster volume start dis-rep

3、客户端挂载复制卷

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

复制卷结果验证:

1、拷贝测试文件到客户端挂载目录,在节点上查看存储情况

cp demo* /test/dis-rep/

[root@node1 data]# ls -lh /data/sde1/
总用量 160M
-rw-r--r--. 2 root root 40M 9月  13 23:02 demo1.log
-rw-r--r--. 2 root root 40M 9月  13 23:02 demo2.log
-rw-r--r--. 2 root root 40M 9月  13 23:02 demo3.log
-rw-r--r--. 2 root root 40M 9月  13 23:02 demo4.log

[root@node2 yum.repos.d]# ls -lh /data/sde1/
总用量 160M
-rw-r--r--. 2 root root 40M 9月  13 23:02 demo1.log
-rw-r--r--. 2 root root 40M 9月  13 23:02 demo2.log
-rw-r--r--. 2 root root 40M 9月  13 23:02 demo3.log
-rw-r--r--. 2 root root 40M 9月  13 23:02 demo4.log

[root@node3 sdb1]# ls -lh /data/sde1/
总用量 40M
-rw-r--r--. 2 root root 40M 9月  13 23:02 demo5.log

[root@node4 yum.repos.d]# ls -lh /data/sde1/
总用量 40M
-rw-r--r--. 2 root root 40M 9月  13 23:02 demo5.log
2 demo4.log

[root@node2 yum.repos.d]# ls -lh /data/sde1/
总用量 160M
-rw-r--r--. 2 root root 40M 9月  13 23:02 demo1.log
-rw-r--r--. 2 root root 40M 9月  13 23:02 demo2.log
-rw-r--r--. 2 root root 40M 9月  13 23:02 demo3.log
-rw-r--r--. 2 root root 40M 9月  13 23:02 demo4.log

[root@node3 sdb1]# ls -lh /data/sde1/
总用量 40M
-rw-r--r--. 2 root root 40M 9月  13 23:02 demo5.log

[root@node4 yum.repos.d]# ls -lh /data/sde1/
总用量 40M
-rw-r--r--. 2 root root 40M 9月  13 23:02 demo5.log

你可能感兴趣的:(GFS,gfs,分布式)