理论+实验·GFS分布式文件系统

GFS分布式文件系统

文章目录

  • GFS分布式文件系统
  • 一、GlusterFS概述
            • GlusterFS简介
            • GlusterFS特点
            • GlusterFS术语
            • 模块化堆栈式架构
  • 二、GlusterFS工作原理
            • GlusterFS工作流程
            • 弹性HASH算法
  • 三、GlusterFS的卷类型
      • 3.1 分布式卷
            • 分布式卷
            • 分布式卷的特点
            • 创建分布式卷
      • 3.2 条带卷
            • 根据偏移量将文件分成N快(N个条带节点),轮询的存储在每个Brick Server节点
            • 存储大文件时,性能尤为突出
            • 不具备冗余性,类似Raid0
            • 特点
            • 创建条带卷
      • 3.3 复制卷
            • 同一文件保存一份或多份副本
            • 因为要保存副本,所以磁盘利用率较低
            • 若多个节点上的存储空间不一致,将按照不同效应取最低节点的容量作为改卷的总容量
            • 特点
            • 创建复制卷
      • 3.4 分布式条带卷
            • 分布式条带卷
            • 创建分布式条带卷
      • 3.5 分布式复制卷
            • 分布式复制卷
            • 创建分布式复制卷
  • 四、部署群集环境流程
            • 群集环境
            • 卷类型
            • 部署群集环境
  • 五、创建卷、部署客户端、测试文件系统流程
            • 创建卷
            • 部署Gluster客户端
            • 测试Gluster文件系统
  • 六、其他的维护命令
  • 七、GFS实验
      • 实验环境
      • 实验步骤
            • 修改主机名,关闭防火墙并修改hosts文件
            • 安装并启动gluster
            • 安装client客户端
            • 配置分布式卷
            • 条带卷(yum安装的条带卷创建不了)
            • 复制卷
            • 分布式条带卷(yum安装的条带卷创建不了)
            • 分布式复制卷
            • 测试使用文件(Client客户端操作)
      • 实验结果
            • 客户端挂载

一、GlusterFS概述

  • GlusterFS简介
    1. 开源的分布式文件系统
    2. 由存储服务器、客户端以及NFS/Samba存储网关组成
    3. 无元数据服务器
  • GlusterFS特点
    1. 扩展性和高性能
    2. 高可用性
    3. 全局统一命名空间
    4. 弹性卷管理
    5. 基于标准协议
  • GlusterFS术语
    1. Brick
    2. Volume
    3. FUSE
    4. VFS
    5. Glusterd
  • 模块化堆栈式架构
    1. 模块化、堆栈式的架构
    2. 通过对模块的组合,实现复杂的功能

二、GlusterFS工作原理

  • GlusterFS工作流程
    1. 客户端或应用程序通过GlusterFS的挂载点访问数据
    2. Linux系统内核通过VFS API收到请求并处理
    3. VFS将数据递交给FUSE内核文件系统,FUSE文件系统则是将数据通过/dev/fuse设备文件递交给了GlusterFS client端
    4. GlusterFS client收到数据后,client根据配置文件的配置对数据进行处理
    5. 通过网络将数据传递至远端的GlusterFS Server,并且将数据写入到服务器存储设备上
  • 弹性HASH算法
    1. 通过HASH算法得到一个32位的整数
    2. 划分为N个连续的子空间,每个空间对应一个Brick
    3. 弹性HASH算法的优点
      • 保证数据平均分布在每一个Brick中
      • 解决了对元数据服务器的依赖,进而解决了单点故障以及访问瓶颈

四个Brick节点的GlusterFS卷,平均分配232次方的区间的范围空间

访问文件时,通过计算该文件的HASH值,从而对应到Brick存储空间

三、GlusterFS的卷类型

  • 分布式卷
  • 条带卷
  • 复制卷
  • 分布式条带卷
  • 分布式复制卷
  • 条带复制卷
  • 分布式条带复制卷

3.1 分布式卷

  • 分布式卷
    1. 没有对文件进行分块处理
    2. 通过扩展文件属性保存HASH值
    3. 支持的底层文件系统由EXT3、EXT4、ZFS、XFS等

没有分块处理,文件只能存在一个server中,效率不提升

  • 分布式卷的特点
    1. 文件分布在不同的服务器,不具备冗余性
    2. 更容易和廉价地扩展卷的大小
    3. 单点故障会造成数据丢失
    4. 依赖底层的数据保护
  • 创建分布式卷

    创建一个名为dis-volume的分布式卷,文件将根据HASH分布在server1:/dir1、server2:/dir2、server3:/dir3中

    gluster volume create dis-volume server1:/dir1 server2:/dir2 server3:/dir3
    

3.2 条带卷

  • 根据偏移量将文件分成N快(N个条带节点),轮询的存储在每个Brick Server节点
  • 存储大文件时,性能尤为突出
  • 不具备冗余性,类似Raid0

从多个server中同时读取文件,效率提升

  • 特点
    1. 数据被分割成更小快分布到快服务器群中的不同条带区
    2. 分布减少了负载且更小的文件加速,存储的速度
    3. 没有数据冗余
  • 创建条带卷

    创建了一个名为Stripe-volume的条带卷,文件将被分块轮询的存储在Server1:/dir1和Server2:/dir2两个Brick中

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

3.3 复制卷

  • 同一文件保存一份或多份副本
  • 因为要保存副本,所以磁盘利用率较低
  • 若多个节点上的存储空间不一致,将按照不同效应取最低节点的容量作为改卷的总容量
  • 特点
    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 分布式条带卷

  • 分布式条带卷
    1. 兼顾分布式卷和条带卷的功能
    2. 主要用于大文件访问处理
    3. 至少需要4太服务器
  • 创建分布式条带卷

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

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

3.5 分布式复制卷

  • 分布式复制卷
    1. 兼顾分布式卷和复制卷的功能
    2. 用于需要冗余的情况
  • 创建分布式复制卷

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

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

四、部署群集环境流程

  • 群集环境

    node1 20.0.0.10

    node2 20.0.0.20

    node3 20.0.0.30

    node4 20.0.0.40

    client 20.0.0.50

  • 卷类型

    dis-volume 分布式卷

    stripe-volume 条带卷

    rep-volume 复制卷

    dis-stripe 分布式条带卷

    dis-rep 分布式复制卷

  • 部署群集环境
    1. 准备环境
    2. 关闭防火墙和Selinux
    3. 配置hosts文件
    4. 安装软件
    5. 启动GlusterFS
    6. 添加节点
    7. 查看集群状态

五、创建卷、部署客户端、测试文件系统流程

  • 创建卷
    1. 创建分布式卷
    2. 创建条带卷
    3. 创建复制卷
    4. 创建分布式条带卷
    5. 创建分布式复制卷
  • 部署Gluster客户端
    1. 安装客户端软件

      
      
    2. 创建挂载目录

      mkdir /data/sdb1
      mkdir /data/sdc1
      mkdir /data/sdd1
      mkdir /data/sde1
      
      
    3. 修改hosts文件

      vim /etc/hosts
      127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
      ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
      20.0.0.10       node1
      20.0.0.20       node2
      20.0.0.30       node3
      20.0.0.40       node4
      
      
    4. 挂载Gluster文件系统

      hostnamectl set-hostname node1
      hostnamectl set-hostname node2
      hostnamectl set-hostname node3
      hostnamectl set-hostname node4
      
      
    5. 修改fstab配置文件

  • 测试Gluster文件系统
    1. 卷中写入文件
    2. 查看文件分布
    3. 破坏性测试

六、其他的维护命令

七、GFS实验

  • 实验环境

    20.0.0.10 node1

    20.0.0.20 node2

    20.0.0.30 node3

    20.0.0.40 node4

    20.0.0.50 client

  • 实验步骤

    1. 修改主机名,关闭防火墙并修改hosts文件
      [root@localhost ~]# hostnamectl set-hostname node1
      [root@localhost ~]# hostnamectl set-hostname node2
      [root@localhost ~]# hostnamectl set-hostname node3
      [root@localhost ~]# hostnamectl set-hostname node4
      [root@localhost ~]# setenforce 0
      [root@localhost ~]# systemctl stop firewalld
      

    [root@localhost ~]# vim /etc/hosts
    127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
    20.0.0.10 node1
    20.0.0.20 node2
    20.0.0.30 node3
    20.0.0.40 node4

    
    2. ###### 挂载四块硬盘
    
    ```shell
    #!/bin/bash
    echo "正在初始化挂载中,请稍后..."
    DISK_=$(fdisk -l | grep "磁盘 /dev/sd[b-z]" | awk '{print $2}' | awk -F':' '{print $1}')
    for NUM in $DISK_
    do
    fdisk -l $NUM
    echo "n
    p
    
    
    
    w" | fdisk $NUM
    mkfs.xfs -i size=512 $NUM"1" &> /dev/null
    mkdir -p /data/$NUM"1" &> /dev/null
    echo -e "$NUM"1" /data/$NUM"1" xfs defaults 0 0\n">> /etc/fstab
    mount -a &> /dev/null
    done
    df -Th
    
    1. 安装并启动gluster
      [root@node1 opt]# yum -y install centos-release-gluster
      [root@node1 opt]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
      [root@node1 yum.repos.d]# systemctl start glusterd.service 
      [root@node1 yum.repos.d]# systemctl enable glusterd.service 
      [root@node1 yum.repos.d]# systemctl status glusterd.service 
      [root@node1 yum.repos.d]# setenforce 0
      [root@node1 yum.repos.d]# systemctl stop firewalld
      
       
    4. ###### 将节点添加到信任池
    
       ```shell
       #node1节点操作即可
       [root@node1 yum.repos.d]# gluster peer probe node2
       peer probe: success. 
       [root@node1 yum.repos.d]# gluster peer probe node3
       peer probe: success. 
       [root@node1 yum.repos.d]# gluster peer probe node4
       peer probe: success. 
       
       #查看所有节点
       [root@node1 yum.repos.d]# gluster peer status
       Number of Peers: 3
       
       Hostname: node2
       Uuid: 8e720eb2-e73e-431c-8c1d-788ffc386580
       State: Peer in Cluster (Connected)
       
       Hostname: node3
       Uuid: 60354787-f8ad-4214-b3c6-42cb8996f233
       State: Peer in Cluster (Connected)
       
       Hostname: node4
       Uuid: f61ecc1a-dee7-4ba6-b38e-4816ae1c986f
       State: Peer in Cluster (Connected)
    
    1. 安装client客户端
      [root@client ~]# setenforce 0
      [root@client ~]# systemctl stop firewalld
      [root@client ~]# yum -y install glusterfs glusters-fuse
      [root@client ~]# vim /etc/hosts
      127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
      ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
      20.0.0.10 node1
      20.0.0.20 node2
      20.0.0.30 node3
      20.0.0.40 node4
      
    2. 配置分布式卷
      #创建分布式卷
      [root@node1 yum.repos.d]# gluster volume create dis-vol node1:/data/dev/sdb1 node2:/data/dev/sdb1 force
      #列表
      [root@node1 yum.repos.d]# gluster volume list
      dis-vol
      #查询详细信息
      [root@node1 yum.repos.d]# gluster volume info dis-vol 
       
      Volume Name: dis-vol
      Type: Distribute
      Volume ID: e2f0c6f6-51e6-437f-a184-41b7e5ebb1c1
      Status: Created
      Snapshot Count: 0
      Number of Bricks: 2
      Transport-type: tcp
      Bricks:
      Brick1: node1:/data/dev/sdb1
      Brick2: node2:/data/dev/sdb1
      Options Reconfigured:
      transport.address-family: inet
      storage.fips-mode-rchecksum: on
      nfs.disable: on
      #删除
      [root@node1 yum.repos.d]# gluster volume delete dis-vol 
      Deleting volume will erase all information about the volume. Do you want to continue? (y/n) y
      volume delete: dis-vol: success
      #启动卷
      [root@node4 bak]# gluster volume start dis-vol
      volume start: dis-vol: success
      
    3. 条带卷(yum安装的条带卷创建不了)
      [root@localhost ~]# gluster volume create stripe-vol stripe 2 node1:/data/dev/sdc1 node2:/data/dev/sdc1 force
      
    4. 复制卷
      [root@localhost ~]# gluster volume create rep-vol replica 2 node3:/data/dev/sdb1 node4:/data/dev/sdb1 force
      
    5. 分布式条带卷(yum安装的条带卷创建不了)
      [root@localhost ~]# gluster volume create dis-stripe stripe 2 node1:/data/dev/sdd1 node2:/data/dev/sdd1 node3:/data/dev/sdd1 node4:/data/dev/sdd1 force
      
    6. 分布式复制卷
      [root@localhost ~]# gluster volume create dis-rep replica 2 node1:/data/dev/sde1 node2:/data/dev/sde1 node3:/data/dev/sde1 node4:/data/dev/sde1 force
      
    7. 测试使用文件(Client客户端操作)
      dd if=/dev/zero of=/opt/demo1.log bs=1M count=60
      dd if=/dev/zero of=/opt/demo2.log bs=1M count=60
      dd if=/dev/zero of=/opt/demo3.log bs=1M count=60
      dd if=/dev/zero of=/opt/demo4.log bs=1M count=60
      dd if=/dev/zero of=/opt/demo5.log bs=1M count=60
      dd if=/dev/zero of=/opt/demo6.log bs=1M count=60
      
  • 实验结果

    1. 客户端挂载
      [root@client test]# mkdir -p /opt/test/dis-vol /opt/test/dis-rep /opt/test/rep-vol
      [root@client test]# mount.glusterfs node1:dis-vol /opt/test/dis-vol/
      [root@client test]# mount.glusterfs node1:rep-vol /opt/test/rep-vol/
      [root@client test]# mount.glusterfs node1:dis-rep /opt/test/dis-rep/
      
    2. 查看分布式卷

      [root@node1 yum.repos.d]# cd /data/dev/sdb1/
      [root@node1 sdb1]# ll -h
      总用量 240M
      -rw-r--r--. 2 root root 60M 9月  13 23:24 demo1.log
      -rw-r--r--. 2 root root 60M 9月  13 23:24 demo2.log
      -rw-r--r--. 2 root root 60M 9月  13 23:24 demo3.log
      -rw-r--r--. 2 root root 60M 9月  13 23:24 demo4.log
      
      [root@node2 yum.repos.d]# cd /data/dev/sdb1/
      [root@node2 sdb1]# ll -h
      总用量 120M
      -rw-r--r--. 2 root root 60M 9月  13 23:24 demo5.log
      -rw-r--r--. 2 root root 60M 9月  13 23:24 demo6.log
      
    3. 查看复制卷

      [root@node3 ~]# cd /data/dev/sdb1
      [root@node3 sdb1]# ll -h
      总用量 360M
      -rw-r--r--. 2 root root 60M 9月  13 23:24 demo1.log
      -rw-r--r--. 2 root root 60M 9月  13 23:24 demo2.log
      -rw-r--r--. 2 root root 60M 9月  13 23:24 demo3.log
      -rw-r--r--. 2 root root 60M 9月  13 23:24 demo4.log
      -rw-r--r--. 2 root root 60M 9月  13 23:24 demo5.log
      -rw-r--r--. 2 root root 60M 9月  13 23:24 demo6.log
      
      [root@node4 ~]# cd /data/dev/sdb1
      [root@node4 sdb1]# ll -h
      总用量 360M
      -rw-r--r--. 2 root root 60M 9月  13 23:24 demo1.log
      -rw-r--r--. 2 root root 60M 9月  13 23:24 demo2.log
      -rw-r--r--. 2 root root 60M 9月  13 23:24 demo3.log
      -rw-r--r--. 2 root root 60M 9月  13 23:24 demo4.log
      -rw-r--r--. 2 root root 60M 9月  13 23:24 demo5.log
      -rw-r--r--. 2 root root 60M 9月  13 23:24 demo6.log
      
    4. 查看分布式复制卷

      [root@node1 ~]# cd /data/dev/sde1
      [root@node1 sde1]# ll -h
      总用量 240M
      -rw-r--r--. 2 root root 60M 9月  13 23:24 demo1.log
      -rw-r--r--. 2 root root 60M 9月  13 23:24 demo2.log
      -rw-r--r--. 2 root root 60M 9月  13 23:24 demo3.log
      -rw-r--r--. 2 root root 60M 9月  13 23:24 demo4.log
      
      [root@node2 ~]# cd /data/dev/sde1
      [root@node2 sde1]# ll -h
      总用量 240M
      -rw-r--r--. 2 root root 60M 9月  13 23:24 demo1.log
      -rw-r--r--. 2 root root 60M 9月  13 23:24 demo2.log
      -rw-r--r--. 2 root root 60M 9月  13 23:24 demo3.log
      -rw-r--r--. 2 root root 60M 9月  13 23:24 demo4.log
      
      [root@node3 ~]# cd /data/dev/sde1
      [root@node3 sde1]# ll -h
      总用量 120M
      -rw-r--r--. 2 root root 60M 9月  13 23:24 demo5.log
      -rw-r--r--. 2 root root 60M 9月  13 23:24 demo6.log
      
      [root@node4 sdb1]# cd /data/dev/sde1
      [root@node4 sde1]# ll -h
      总用量 120M
      -rw-r--r--. 2 root root 60M 9月  13 23:24 demo5.log
      -rw-r--r--. 2 root root 60M 9月  13 23:24 demo6.log
      

    注意

    只要某个节点挂了除了复制卷跟分布式复制卷,其余的都会有影响

你可能感兴趣的:(分布式文件系统与企业级应用,gfs,linux)