GFS分布式文件系统(理论+实验+故障模拟)

一、前言理论概述

1.1 概述

  • GFS(GlusterFS)是一款开源的分布式文件系统。
  • FS:文件系统。由文件系统接口(API)、对对象管理的软件集合、对象及属性组成
  • 文件系统作用
    • 从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。
    • 具体的说文件系统就是负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取
  • 文件系统的挂载使用
    • 除根(/)文件系统以外的文件系统创建后要使用的话,需要先挂载到挂载点后才可以被访问
    • 挂载点即分区设备文件关联的某个目录文件
  • GFS组成
    • 存储服务器
    • 客户端(其中客户端的定位比较重要,因为它是无元数据服务器)
    • NFS/Samba存储网关
  • 元数据服务器的作用
    • 存储元数据,帮用户定位文件的位置、索引等信息
    • 有元数据服务器文件系统中,如果元数据损坏,会直接导致文件系统不可用
  • GFS提供了一个全局统一命名空间。此命名空间提供了一个API,此API是用户访问GFS服务器中数据的唯一入口
  • 弹性卷管理:RAIN(基于容错、读写性能等技术)可以在分布式文件系统之上可以使用RAID卷的集中管理
  • 基于标准协议:客户端和存储服务器交互需要借助网络,而相关的网络协议包括TCP/IP协议

1.2 GFS特点

  • 1.扩展性和高性能
    • 可扩展性,扩展节点
    • 通过多节点提高性能
  • 2.高可用性
    • 不存在单点故障,有备份机制
    • 类似 Raid 的容灾机制
  • 3.全局统一命名空间
    • 集中化管理,类比 API 的性质/概念
    • 系统里根据他命名所定义的隔离区域,是一个独立空间
    • 统一的名称空间,与客户端交互,把请求存放至后端的块数据服务器
  • 4.弹性卷管理
    • 方便扩容及对后端存储集群的管理与维护
    • 较为复杂
  • 5.基于标准协议
    • 基于标准化的文件使用协议

1.3 GFS术语

  • 1.Brick(块存储服务器):实际存储用户数据的服务器
  • 2.Volume:本地文件系统的“分区”
  • 3.FUSE:用户空间的文件系统(类比EXT4),这是一个伪文件系统,用户端的交换模块
  • 4.VFS(虚拟端口):虚拟的内核态文件系统。
  • 5.Glusterd(服务):运行在存储节点的进程(客户端运行的是gluster client)

1.4 GFS构成与架构

  • GFS的架构
    • 存储服务器
    • 存储节点信息
  • GFS是模块化堆栈式架构
    • 模块化:类似linux的编译安装。很多功能都可以做定制的,通过软件开发的方式封装为模块,然后按需使用或者不使用。GFS也是这样把功能封装为一个个模块,通过加载/调用/启动的方式就可以实现对应的功能
    • 堆栈式架构设计:通过对模块不同功能的组合来实现复杂功能
      在这里插入图片描述

二、GFS的卷类型

2.1 分布式卷

  • 没有对文件进行分块处理
  • 通过扩展文件属性保存HASH值
  • 支持的底层文件系统有EXT3、EXT4、ZFS、XFS等等
  • 特点:
    • 文件分布在不同的服务器,不具备冗余性
    • 更容易和廉价地扩展卷的大小
    • 单点故障会造成数据丢失
    • 依赖底层的数据保护

2.2 条带卷

  • 根据偏移量将文件分成N块(N个条带节点),轮询的存储在每个Brick Server节点
  • 存储大文件时,性能尤为突出
  • 不具备冗余性,开始Raid0
  • 特点
    • 数据被分割成更小块分布到块服务器群中的不同条带区
    • 分布减少了负载且更小的文件加速了存取的速度
    • 没有数据冗余

2.3 复制卷

  • 同一文件保存一份或多份副本
  • 因为要保存副本,所以磁盘利用率较低
  • 若多个节点上的存储空间不一致,将按照木桶消息取最低节点的容量作为该卷的总容量
  • 特点
    • 卷中所有的服务器均保存一个完整的副本
    • 卷的副本数量可由客户在创建的时候决定
    • 至少有两个块服务器或更多服务器
    • 具备冗余性

2.4 分布式条带卷

  • 兼顾分布式卷和条带卷的功能
  • 主要用于大文件访问处理
  • 至少需要4台服务器

2.5 分布式复制卷

  • 健步分布式卷和复制卷的功能
  • 用于需要冗余的情况

三、GFS工作原理(工作流程)

  • 1、客户端或应用程序通过GlusterFS的挂载点访问数据
  • 2、linux系统内核通过VFS API收到请求并处理
  • 3、VFS将数据递交给FUSE内核文件系统, fuse文件系统则是将数据通过/dev/fuse设备文件递交给GlusterFS client端
  • 4、GlusterFS client 收到数据后,client根据配置文件的配置对数据进行处理
  • 5、通过网络将数据传递至远端的GlusterFS Server,并且将数据写入到服务器存储设备上

四、弹性HASH算法

  • 通过HASH算法得到一个32位的整数
  • 划分为N个连续的子空间,每个空间对应一个Brick
  • 弹性HASH算法的优点
  • 保证数据平均分布在每一个Brick中
  • 解决了对元数据服务器的依赖,进而解决了单点故障以及访问瓶颈

五、 GFS群集部署

5.1 部署环境

  • node1 IP:192.168.131.10 五块磁盘大小分别为30G,40G,50G,60G
  • node2 IP:192.168.131.11 五块磁盘大小分别为30G,40G,50G,60G
  • node3 IP:192.168.131.12 五块磁盘大小分别为30G,40G,50G,60G
  • node4 IP:192.168.131.13 五块磁盘大小分别为30G,40G,50G,60G
  • 以上四台为GFS服务端,以下一台为GFS客户端(测试用)
  • Server IP:192.168.131.14

5.2 脚本批量格式化创建(所有节点执行)

[root@localhost ~]# hostnamectl set-hostname node1     【分别将4台node节点主机名修改】
[root@localhost ~]# su
[root@node1 ~]# systemctl stop firewalld.service 
[root@node1 ~]# setenforce 0
[root@node1 ~]# systemctl disable firewalld.service 
[root@node1 ~]# vim /opt/fdisk.sh

#!/bin/bash
NEWDEV=`ls /dev/sd* | grep -o 'sd[b-z]' | uniq`
for VAR in $NEWDEVdo
   echo -e "n\np\n\n\n\nw\n" | fdisk /dev/$VAR &> /dev/null
   mkfs.xfs /dev/${VAR}"1" &> /dev/null   mkdir -p /data/${VAR}"1" &> /dev/null
   echo "/dev/${VAR}"1" /data/${VAR}"1" xfs defaults 0 0" >> /etc/fstab
done
mount -a &> /dev/null
[root@node1 ~]# chmod +x /opt/fdisk.sh 
[root@node1 ~]# cd /opt/
[root@node1 opt]# ./fdisk.sh 
[root@node1 opt]# df -hT                      【查看下/dev/sdb-e是否创建成功】
[root@node1 opt]# mkfs.xfs /dev/sdc1          【如果不成功需要手动格式化后刷新】
[root@node1 opt]# mount -a                    【刷新】
文件系统       类型      容量  已用  可用 已用% 挂载点
/dev/sda3      xfs        26G  3.7G   22G   15% /
devtmpfs       devtmpfs  978M     0  978M    0% /dev
tmpfs          tmpfs     993M     0  993M    0% /dev/shm
tmpfs          tmpfs     993M  9.1M  984M    1% /run
tmpfs          tmpfs     993M     0  993M    0% /sys/fs/cgroup
/dev/sda1      xfs       497M  151M  346M   31% /boot
tmpfs          tmpfs     199M   12K  199M    1% /run/user/42
tmpfs          tmpfs     199M     0  199M    0% /run/user/0
/dev/sdb1      xfs        30G   33M   30G    1% /data/sdb1
/dev/sdd1      xfs        50G   33M   50G    1% /data/sdd1
/dev/sde1      xfs        60G   33M   60G    1% /data/sde1
/dev/sr0       iso9660   4.3G  4.3G     0  100% /mnt
/dev/sdc1      xfs        40G   33M   40G    1% /data/sdc1

5.3 配置host文件并安装启动GFS(所有node节点上操作)

[root@node1 opt]# vim /etc/hosts            【添加四个节点的域名解析】

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.131.10 node1
192.168.131.11 node2
192.168.131.12 node3
192.168.131.13 node4


[root@node1 opt]# cd /etc/yum.repos.d/
[root@node1 yum.repos.d]# ls
local.repo  repos.bak
[root@node1 yum.repos.d]# mv *.repo repo.bakbak     【将所有文件移动到备份目录】
[root@node1 yum.repos.d]# ls
repo.bakbak  repos.bak
[root@node1 yum.repos.d]# vim glfs.repo             【配置glfs本地源】

[glfs]
name=glfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1

[root@node1 yum.repos.d]# cd /opt/
[root@node1 opt]# rz -E
rz waiting to receive.
[root@node1 opt]# ls
fdisk.sh  gfsrepo.zip  rh
[root@node1 opt]# unzip gfsrepo.zip 
[root@node1 opt]# yum clean all && yum makecache 
【本地安装GFS服务、GFS服务端、GFS客户端、GFS减少延迟工具包】
[root@node1 opt]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma

【开启并设置开机自启GFS服务,最后查看GFS状态】
[root@node1 opt]# systemctl start glusterd.service 
[root@node1 opt]# systemctl enable glusterd.service 
[root@node1 opt]# systemctl status glusterd.service 
● glusterd.service - GlusterFS, a clustered file-system server
   Loaded: loaded (/usr/lib/systemd/system/glusterd.service; enabled; vendor preset: disabled)
   Active: active (running) since 四 2021-05-20 16:48:39 CST; 1min 42s ago
 Main PID: 2371 (glusterd)
   CGroup: /system.slice/glusterd.service
           └─2371 /usr/sbin/glusterd -p /var/run/glusterd.pid --log-level INFO

520 16:48:39 node1 systemd[1]: Starting GlusterFS, a clustered file-system server...
520 16:48:39 node1 systemd[1]: Started GlusterFS, a clustered file-system server.


[root@node1 opt]# ntpdate ntp1.aliyun.com       【时间同步,没有配置过DNS需先配置DNS】

5.4 在存储信任池中添加节点(Node1节点)

  • 只需再一台Node节点上添加其他节点即可
[root@node1 opt]# gluster peer probe node1
peer probe: success. Probe on localhost not needed
[root@node1 opt]# gluster peer probe node2
peer probe: success. 
[root@node1 opt]# gluster peer probe node3
peer probe: success. 
[root@node1 opt]# gluster peer probe node4
peer probe: success. 
[root@node1 opt]# gluster peer status         【在每个node节点上查看群集状态,是否成功添加其他3台】
Number of Peers: 3

Hostname: node2
Uuid: 6d7cd413-66d2-427f-8948-c089dd57de09
State: Peer in Cluster (Connected)

Hostname: node3
Uuid: 74f1661c-b918-409c-84e5-0e46da1a88f7
State: Peer in Cluster (Connected)

Hostname: node4
Uuid: 13a59ff2-1b4b-40c6-8553-d94340435282
State: Peer in Cluster (Connected)

5.5 根据规划创建卷

5.5.1 规划如下表

卷名称卷类型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)

5.5.2 创建分布式卷

  • 创建分布式卷,没有指定类型,默认创建的就是分布式卷
[root@node1 opt]# gluster volume create dis-volume node1:/data/sdb1 node2:/data/sdb1 force
volume create: dis-volume: success: please start the volume to access data
[root@node1 opt]# gluster volume list                      【查看卷列表】
dis-volume
[root@node1 opt]# gluster volume start dis-volume          【启动新建分布式卷】
volume start: dis-volume: success
[root@node1 opt]# gluster volume info dis-volume           【查看创建分布式卷信息】
 
Volume Name: dis-volume
Type: Distribute
Volume ID: 5a7fd5a6-d5b6-41e3-a7f7-dcd705e6061c
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
nfs.disable: on

5.5.3 条带卷创建

  • 指定类型为stripe,数值为2,后面有2个Brick Server。所以创建的事条带卷
[root@node1 opt]# gluster volume create stripe-volume stripe 2 node1:/data/sdc1 node2:/data/sdc1 force
volume create: stripe-volume: success: please start the volume to access data
[root@node1 opt]# gluster volume start stripe-volume
volume start: stripe-volume: success
[root@node1 opt]# gluster volume info stripe-volume
 
Volume Name: stripe-volume
Type: Stripe
Volume ID: ea8fb539-fcbd-4349-97d3-c55570c5a0bf
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: node1:/data/sdc1
Brick2: node2:/data/sdc1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on

5.5.4 复制卷创建

  • 指定类型为 replica,数值为 2,且后面跟了 2 个 Brick Server,所以创建的是复制卷
[root@node1 opt]# gluster volume create rep-volume replica 2 node3:/data/sdb1 node4:/data/sdb1 force
volume create: rep-volume: success: please start the volume to access data
[root@node1 opt]# gluster volume start rep-volume
volume start: rep-volume: success
[root@node1 opt]# gluster volume info rep-volume
 
Volume Name: rep-volume
Type: Replicate
Volume ID: 684418dc-1e38-4294-9f87-37f582666df6
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: node3:/data/sdb1
Brick2: node4:/data/sdb1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on

5.5.5 分布式条带卷创建

  • 指定类型为 stripe,数值为 2,而且后面跟了 4 个 Brick Server,是 2 的两倍,所以创建的是分布式条带卷
[root@node1 opt]#  gluster volume create dis-stripe stripe 2 node1:/data/sdd1 node2:/data/sdd1 node3:/data/sdd1 node4:/data/sdd1 force
volume create: dis-stripe: success: please start the volume to access data
[root@node1 opt]# gluster volume start dis-stripe
volume start: dis-stripe: success
[root@node1 opt]# gluster volume info dis-stripe
 
Volume Name: dis-stripe
Type: Distributed-Stripe
Volume ID: fd24e048-cec6-48ee-8924-bfd09e4dc9a1
Status: Started
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/data/sdd1
Brick2: node2:/data/sdd1
Brick3: node3:/data/sdd1
Brick4: node4:/data/sdd1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on

5.5.6 分布式复制卷创建

  • 指定类型为 replica,数值为 2,而且后面跟了 4 个 Brick Server,是 2 的两倍,所以创建的是分布式复制卷
[root@node1 opt]# gluster volume create dis-rep replica 2 node1:/data/sde1 node2:/data/sde1 node3:/data/sde1 node4:/data/sde1 force
volume create: dis-rep: success: please start the volume to access data
[root@node1 opt]# gluster volume start dis-rep
volume start: dis-rep: success
[root@node1 opt]# gluster volume info dis-rep 
 
Volume Name: dis-rep
Type: Distributed-Replicate
Volume ID: a51ac773-d8af-4f2f-8512-6394eca36423
Status: Started
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/data/sde1
Brick2: node2:/data/sde1
Brick3: node3:/data/sde1
Brick4: node4:/data/sde1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@node1 opt]# gluster volume list
dis-rep
dis-stripe
dis-volume
rep-volume
stripe-volume

5.6 GFS客户端部署

5.6.1 安装客户端软件

[root@localhost ~]# hostnamectl set-hostname server
[root@localhost ~]# su
[root@server ~]# systemctl stop firewalld.service 
[root@server ~]# setenforce 0
[root@server ~]# systemctl disable firewalld.service 
[root@server ~]# cd /opt/
[root@server opt]# rz -E
rz waiting to receive.
[root@server opt]# ls
gfsrepo.zip  rh
[root@server opt]# unzip gfsrepo.zip 
[root@server opt]# cd /etc/yum.repos.d/
[root@server yum.repos.d]# ls
local.repo  repos.bak
[root@server yum.repos.d]# mv * repos.bakbak
[root@server yum.repos.d]# ls
repos.bakbak
[root@server yum.repos.d]# yum clean all && yum makecache 
[root@server yum.repos.d]# yum -y install glusterfs glusterfs-fuse.x86_64 

5.6.2 创建挂载目录并配置host文件

[root@server yum.repos.d]# mkdir -p /qz/{dis,stripe,rep,dis_stripe,dis_rep}
[root@server yum.repos.d]# ls /qz/
dis  dis_rep  dis_stripe  rep  stripe


[root@server yum.repos.d]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.131.10 node1
192.168.131.11 node2
192.168.131.12 node3
192.168.131.13 node4

5.6.3 挂载Gluster文件系统

  • 永久挂载
  • dis-volume 分布式卷
  • stripe-volume 条带卷
  • rep-volume 复制卷
  • dis-stripe 分布式条带卷
  • dis-rep 分布式复制卷
[root@server yum.repos.d]# vim /etc/fstab 


#
# /etc/fstab
# Created by anaconda on Thu May  6 22:12:01 2021
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=cdba3454-12a0-4b03-b4b0-6ae603c26738 /                       xfs     defaults        0 0
UUID=f525a789-0f67-4da4-8ec0-0e227828c425 /boot                   xfs     defaults        0 0
UUID=c46b0507-cf6d-497d-8fd9-c4402d84c28c swap                    swap    defaults        0 0
node1:dis-volume                         /qz/dis             glusterfs    defaults,_netdev 0 0 
node1:stripe-volume                      /qz/stripe          glusterfs    defaults,_netdev 0 0 
node1:rep-volume                         /qz/rep             glusterfs    defaults,_netdev 0 0 
node1:dis-stripe                         /qz/dis_stripe      glusterfs    defaults,_netdev 0 0 
node1:dis-rep                            /qz/dis_rep         glusterfs    defaults,_netdev 0 0 
[root@server yum.repos.d]# mount -a
[root@server yum.repos.d]# df -hT
文件系统            类型            容量  已用  可用 已用% 挂载点
/dev/sda3           xfs              26G  3.7G   22G   15% /
devtmpfs            devtmpfs        978M     0  978M    0% /dev
tmpfs               tmpfs           993M     0  993M    0% /dev/shm
tmpfs               tmpfs           993M  9.0M  984M    1% /run
tmpfs               tmpfs           993M     0  993M    0% /sys/fs/cgroup
/dev/sda1           xfs             497M  151M  346M   31% /boot
tmpfs               tmpfs           199M   12K  199M    1% /run/user/42
tmpfs               tmpfs           199M     0  199M    0% /run/user/0
node1:dis-volume    fuse.glusterfs   60G   65M   60G    1% /qz/dis
node1:stripe-volume fuse.glusterfs   80G   65M   80G    1% /qz/stripe
node1:rep-volume    fuse.glusterfs   30G   33M   30G    1% /qz/rep
node1:dis-stripe    fuse.glusterfs  200G  130M  200G    1% /qz/dis_stripe
node1:dis-rep       fuse.glusterfs  120G   65M  120G    1% /qz/dis_rep
  • 临时挂载
[root@server yum.repos.d]# mount.glusterfs node1:dis-volume /qz/dis
[root@server yum.repos.d]# mount.glusterfs node1:test-volume /qz/dis_per
[root@server yum.repos.d]# mount.glusterfs node1:rep-volume /qz/rep
[root@server yum.repos.d]# mount.glusterfs node1:dis-rep /qz/dis_rep

5.7 测试Gluster文件系统

5.7.1 卷中写入文件(在客户端操作)

  • 生成一个特定大小的文件给与/opt/demo*.log下,大小为1M,共处理40次
[root@server yum.repos.d]# cd /opt/
[root@server opt]# dd if=/dev/zero of=/opt/demo1.log bs=1M count=40
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.0203706 秒,2.1 GB/[root@server opt]# dd if=/dev/zero of=/opt/demo2.log bs=1M count=40
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.154105 秒,272 MB/[root@server opt]# dd if=/dev/zero of=/opt/demo3.log bs=1M count=40
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.151247 秒,277 MB/[root@server opt]# dd if=/dev/zero of=/opt/demo4.log bs=1M count=40
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.156128 秒,269 MB/[root@server opt]# dd if=/dev/zero of=/opt/demo5.log bs=1M count=40
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.154897 秒,271 MB/[root@server opt]# ls -lh /opt/
总用量 250M
-rw-r--r--. 1 root root  40M 521 14:05 demo1.log
-rw-r--r--. 1 root root  40M 521 14:06 demo2.log
-rw-r--r--. 1 root root  40M 521 14:06 demo3.log
-rw-r--r--. 1 root root  40M 521 14:06 demo4.log
-rw-r--r--. 1 root root  40M 521 14:06 demo5.log
drwxr-xr-x. 3 root root 8.0K 327 2018 gfsrepo
-rw-r--r--. 1 root root  50M 511 13:49 gfsrepo.zip
drwxr-xr-x. 2 root root    6 326 2015 rh



[root@server opt]# cp demo* /qz/dis
[root@server opt]# cp demo* /qz/stripe/
[root@server opt]# cp demo* /qz/rep/
[root@server opt]# cp demo* /qz/dis_stripe/
[root@server opt]# cp demo* /qz/dis_rep/

5.7.2 查看文件分布

  • 查看分布式文件分布(node1(/data/sdb1)、node2(/data/sdb1))
[root@node1 ~]# ls -lh /data/sdb1/                            【数据没有被分片】
总用量 160M
-rw-r--r--. 2 root root 40M 521 14:09 demo1.log
-rw-r--r--. 2 root root 40M 521 14:09 demo2.log
-rw-r--r--. 2 root root 40M 521 14:09 demo3.log
-rw-r--r--. 2 root root 40M 521 14:09 demo4.log


[root@node2 ~]# ll -h /data/sdb1/
总用量 40M
-rw-r--r--. 2 root root 40M 521 14:09 demo5.log
  • 查看条带卷文件分布(node1(/data/sdc1)、node2(/data/sdc1))
[root@node1 ~]# ls -lh /data/sdc1/                           【数据被分片50%,无副本,无冗余】
总用量 100M
-rw-r--r--. 2 root root 20M 521 14:09 demo1.log
-rw-r--r--. 2 root root 20M 521 14:09 demo2.log
-rw-r--r--. 2 root root 20M 521 14:09 demo3.log
-rw-r--r--. 2 root root 20M 521 14:09 demo4.log
-rw-r--r--. 2 root root 20M 521 14:09 demo5.log



[root@node2 ~]# ll -h /data/sdc1/                            【数据被分片50%,无副本,无冗余】
总用量 100M
-rw-r--r--. 2 root root 20M 521 14:09 demo1.log
-rw-r--r--. 2 root root 20M 521 14:09 demo2.log
-rw-r--r--. 2 root root 20M 521 14:09 demo3.log
-rw-r--r--. 2 root root 20M 521 14:09 demo4.log
-rw-r--r--. 2 root root 20M 521 14:09 demo5.log
  • 查看复制卷分布(node3(/data/sdb1)、node4(/data/sdb1))
[root@node3 ~]# ll -h /data/sdb1/                          【数据没有被分片,有副本,有冗余】
总用量 200M
-rw-r--r--. 2 root root 40M 521 14:09 demo1.log
-rw-r--r--. 2 root root 40M 521 14:09 demo2.log
-rw-r--r--. 2 root root 40M 521 14:09 demo3.log
-rw-r--r--. 2 root root 40M 521 14:09 demo4.log
-rw-r--r--. 2 root root 40M 521 14:09 demo5.log



[root@node4 ~]# ll -h /data/sdb1/                          【数据没有被分片,有副本,有冗余】
总用量 200M
-rw-r--r--. 2 root root 40M 521 14:09 demo1.log
-rw-r--r--. 2 root root 40M 521 14:09 demo2.log
-rw-r--r--. 2 root root 40M 521 14:09 demo3.log
-rw-r--r--. 2 root root 40M 521 14:09 demo4.log
-rw-r--r--. 2 root root 40M 521 14:09 demo5.log
  • 查看分布式条带卷分布(node1(/data/sdd1)、node2(/data/sdd1)、node3(/data/sdd1)、node4(/data/sdd1))
[root@node1 ~]# ls -lh /data/sdd1                            【数据被分片50%,没副本,没冗余】
总用量 80M
-rw-r--r--. 2 root root 20M 521 14:09 demo1.log
-rw-r--r--. 2 root root 20M 521 14:09 demo2.log
-rw-r--r--. 2 root root 20M 521 14:09 demo3.log
-rw-r--r--. 2 root root 20M 521 14:09 demo4.log



[root@node2 ~]# ll -h /data/sdd1/
总用量 80M
-rw-r--r--. 2 root root 20M 521 14:09 demo1.log
-rw-r--r--. 2 root root 20M 521 14:09 demo2.log
-rw-r--r--. 2 root root 20M 521 14:09 demo3.log
-rw-r--r--. 2 root root 20M 521 14:09 demo4.log



[root@node3 ~]# ll -h /data/sdd1/
总用量 20M
-rw-r--r--. 2 root root 20M 521 14:09 demo5.log


[root@node4 ~]# ll -h /data/sdd1/
总用量 20M
-rw-r--r--. 2 root root 20M 521 14:09 demo5.log
  • 查看分布式复制卷分布(node1(/data/sde1)、node2(/data/sde1)、node3(/data/sde1)、node4(/data/sde1))
[root@node1 ~]# ls -lh /data/sde1                         【数据没有被分片,有副本,有冗余】
总用量 160M
-rw-r--r--. 2 root root 40M 521 14:09 demo1.log
-rw-r--r--. 2 root root 40M 521 14:09 demo2.log
-rw-r--r--. 2 root root 40M 521 14:09 demo3.log
-rw-r--r--. 2 root root 40M 521 14:09 demo4.log


[root@node2 ~]# ll -h /data/sde1/
总用量 160M
-rw-r--r--. 2 root root 40M 521 14:09 demo1.log
-rw-r--r--. 2 root root 40M 521 14:09 demo2.log
-rw-r--r--. 2 root root 40M 521 14:09 demo3.log
-rw-r--r--. 2 root root 40M 521 14:09 demo4.log


[root@node3 ~]# ll -h /data/sde1/
总用量 40M
-rw-r--r--. 2 root root 40M 521 14:09 demo5.log


[root@node4 ~]# ll -h /data/sde1/
总用量 40M
-rw-r--r--. 2 root root 40M 521 14:09 demo5.log

5.7.3 破坏性测试

5.7.3.1 挂起node2节点来模拟故障,并在客户端上查看文件是否正常
[root@node2 ~]# [root@node2 ~]# init 0
  • 分布式卷数据查看(node1(/data/sdb1)、node2(/data/sdb1))
[root@server /]# ll /qz/dis                【在客户端查看发现少了demo5.log文件,因为是在node2】
总用量 163840
-rw-r--r--. 1 root root 41943040 521 14:09 demo1.log
-rw-r--r--. 1 root root 41943040 521 14:09 demo2.log
-rw-r--r--. 1 root root 41943040 521 14:09 demo3.log
-rw-r--r--. 1 root root 41943040 521 14:09 demo4.log
  • 条带卷查看(node1(/data/sdc1)、node2(/data/sdc1))
[root@server /]# ll /qz/stripe/          【在客户端查看发现无法访问。因为条带卷不具备冗余性】
总用量 0
  • 分布式条带卷查看(node1(/data/sdd1)、node2(/data/sdd1)、node3(/data/sdd1)、node4(/data/sdd1))
[root@server /]# ll /qz/dis_stripe       【在客户端查看无法访问。因为分布式条带卷不具备冗余性】
总用量 0
  • 分布式复制卷查看(node1(/data/sde1)、node2(/data/sde1)、node3(/data/sde1)、node4(/data/sde1))
[root@server /]# ll /qz/dis_rep/         【在客户端可以访问。因为分布式复制卷具备冗余性】
总用量 204800
-rw-r--r--. 1 root root 41943040 521 14:09 demo1.log
-rw-r--r--. 1 root root 41943040 521 14:09 demo2.log
-rw-r--r--. 1 root root 41943040 521 14:09 demo3.log
-rw-r--r--. 1 root root 41943040 521 14:09 demo4.log
-rw-r--r--. 1 root root 41943040 521 14:09 demo5.log
5.7.3.2 挂起node2和node4节点后在客户端上查看文件是否正常
[root@node2 ~]# init 0

[root@node4 ~]# init 0
  • 测试复制卷是否正常(node3(/data/sdb1)、node4(/data/sdb1))
[root@server /]# ll /qz/rep/                                 【在客户机上测试正常,有数据】
总用量 204800
-rw-r--r--. 1 root root 41943040 521 14:09 demo1.log
-rw-r--r--. 1 root root 41943040 521 14:09 demo2.log
-rw-r--r--. 1 root root 41943040 521 14:09 demo3.log
-rw-r--r--. 1 root root 41943040 521 14:09 demo4.log
-rw-r--r--. 1 root root 41943040 521 14:09 demo5.log
  • 测试分布式条带卷是否正常(node1(/data/sdd1)、node2(/data/sdd1)、node3(/data/sdd1)、node4(/data/sdd1))
[root@server /]# ll /qz/dis_stripe/       【在客户机上测试正常,没有数据】
总用量 0
  • 测试分布式复制卷是否正常(node1(/data/sde1)、node2(/data/sde1)、node3(/data/sde1)、node4(/data/sde1))
[root@server /]# ll /qz/dis_rep/           【在客户机测试正常,有数据】
总用量 204800
-rw-r--r--. 1 root root 41943040 521 14:09 demo1.log
-rw-r--r--. 1 root root 41943040 521 14:09 demo2.log
-rw-r--r--. 1 root root 41943040 521 14:09 demo3.log
-rw-r--r--. 1 root root 41943040 521 14:09 demo4.log
-rw-r--r--. 1 root root 41943040 521 14:09 demo5.log

5.8 其他维护命令

gluster volume [参数]

参数说明
list查看卷列表
info查看所有卷的信息
status查看所有卷的状态
stop dis-stripe停止一个卷
delete dis-stripe删除一个卷
删除卷时需要先停止卷,且信任池中不能有主机处于宕机状态,否则会删除失败
set dis-rep auth.allow 192.168.131.20设置卷的访问控制
仅允许192.168.131.20IP地址访问dis-rep卷
set dis-rep auth.allow 192.168.131.0设置卷的访问控制
仅允许192.168.131.0网段访问dis-rep卷
KVM(GFS)分布式存储系统的构建可以通过以下步骤来实现高可用性: 1. 构建GFS集群:首先,需要构建一个GFS集群,这可以通过安装和配置GFS软件来完成。具体的实验过程可以参考引用中的相关内容。 2. 安装KVM虚拟机:在GFS集群节点服务器上,安装和配置KVM虚拟机。这样,可以通过KVM虚拟化技术来创建和管理虚拟机,从而提供更高的灵活性和可靠性。 3. GFS集群节点服务器添加磁盘:在每个GFS集群节点服务器上,添加额外的磁盘用于存储虚拟机的镜像文件和数据。这样,可以实现虚拟机的高可用性和故障恢复能力。 4. KVM宿主机部署成GFS客户端:将KVM宿主机配置为GFS客户端,可以使得虚拟机在不同的宿主机之间进行迁移和故障转移,从而提供高可用性和负载均衡的支持。 5. 验证存储:进行存储验证,确保GFS分布式存储系统在不同节点之间的数据一致性和可靠性。可以通过数据写入和读取测试来验证存储系统的功能和性能。 6. 进行高可用测试:进行高可用性测试,模拟故障情况,验证系统在节点故障或其他异常情况下的自动故障转移和恢复能力。可以参考引用中的OpenStack和libvirt相关内容来实现高可用性的控制和管理。 通过以上步骤,可以构建一个具有高可用性的KVM(GFS)分布式存储系统,提供可靠的虚拟化环境和数据存储服务。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [2.KVM+GFS分布式存储系统构建KVM高可用](https://blog.csdn.net/a3409148395/article/details/128648676)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [KVM+GFS分布式存系统构建KVM高可用](https://download.csdn.net/download/weixin_38579899/14038636)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TaKe___Easy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值