您的位置:首页 > 娱乐 > 八卦 > GFS分布式文件系统

GFS分布式文件系统

2024/12/26 14:04:38 来源:https://blog.csdn.net/m0_70627741/article/details/141330540  浏览:    关键词:GFS分布式文件系统

目录

GlusterFS概述

GlusterFS工作管理

GlusterFS工作流程

GlusterFS的卷类型

分布式卷

分布式卷的特点

创建分布式卷

复制卷

特点

创建复制卷

分散卷

特点

创建分散卷

分布式复制卷

分布式分散卷

实验案例

添加磁盘

设置域名解析

为每个节点格式化分区

创建挂载点

挂载磁盘

设置永久挂载

关闭防火墙

部署yum仓库

在所有节点上安装gfs

启动所有节点上的GFS

添加节点

在每个节点上查看状态

创建卷

创建分布式卷

创建复制卷

分散卷

分布式复制卷

分布式分散卷

部署GFS客户端

安装客户端软件

创建挂载目录

创建hosts文件

挂载Gluster文件系统

修改fstab配置文件

在客户端测试Gluster文件系统

创建测试文件

卷中写入文件

查看文件分布


GlusterFS概述

  • GlusterFS简介
    • 开源的分布式文件系统
    • 由存储服务器、客户端以及NFS/Samba存储网关组成
  • Gluster简介
    • 开源的分布式文件系统
    • 由存储服务器、客户端以及NFS/Samba存储网关组成
    • 无元数据服务器
  • GlusterFS特点
    • 扩展性和高性能
    • 高可用性
    • 全局统一命名空间
    • 弹性卷管理
    • 基于标准协议
  • GkusterFS术语
    • BRICK
      • 指可信主机池中由主机提供的用于物理存储的专用分区,是GlusterFS中的基本存储单元,同时也是可信存储池中服务器上对外提供的存储目录。
    • Volume
      • 一个逻辑卷是一组Brick的集合。卷是数据存储的逻辑设备,类似于LVM中的逻辑卷。大部分Gluster管理操作是在卷上进行的
    • FUSE
      • 是一个内核模块,允许用户创建自己的文件系统,无须修改内核代码。--伪文件系统
    • VFS
      • 内核空间对用户空间提供的访问磁盘的接口。--虚拟端口
    • Glusterd
      • 后台管理进程:在存储集中每个节点上都要运行。
  • 模块化堆栈式架构
    • 模块化、堆栈式的架构
    • 通过对模块的组合,实现复杂的功能

GlusterFS工作管理

  • 客户端或应用程序通过GlusterFS的挂载点访问数据。
  • linux系统内核通过VFS API收到1请求并处理
  • VFS将数据递交给FUSE内核文件系统,并向系统注册一个实际的文件系统FUSE,而FUSE文件系统则是将数据通过/dev/fuse设备文件递交给了GlusterFS client端,可以将FUSE文件系统理解为一个代理。
  • Gluster FS client收到数据后,client根据配置文件的配置对数据进行处理
  • 经过GlusterFS client处理后,通过网络将数据传递远端的GlusterFS Server,并且将数据写入到服务器存储设置上。
GlusterFS工作流程

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

GlusterFS的卷类型

  • 分布式卷(文件通过hash算法分布到所有brick server上,这种卷是glusterfs的基础和最大特点;实只是扩大的磁盘空间,如果有一个磁盘坏了,对应的数据也会丢失,文件级RAID0,不具有容错能力。)
  • 条带卷(类似RAID0,文件分成数据块以Round Robin方式分布到brick server上,并发粒度是数据块,支持超大文件,大文件性能高;条带卷,在6的版本以后不在支持)
  • 复制卷(文件同步复制到多个brick上,文件级RAID1,具有容错能力,写性能下降,读性能提升)
  • 分布式条带卷(brickserver数量是条带的倍数,兼具distrbute和stripe卷的特点)
  • 分布式复制卷(brickserver数量是镜像数的倍数,兼具distribute和replica卷的特点,可以在2个或多个节点之间复制数据。)
  • 条带复制卷(类似RAID10同时具有条带和复制卷的特点)
  • 分布式条带复制卷(三种基本卷的复合卷通常用于类Map Reduce应用)
  • 分散卷(是基于ErasureCodes(纠错码)的一种类型的Volume(3.6版本正式发布该特性),类似于RAID5/6--分散卷基于纠错码。存储大文件时,性能尤为突出通过配置Redundancy(冗余)级别提高可靠性,在保证较高的可靠性同时,可以提升物理存储空间的利用率。)
  • 分布式分散卷(分布式分卷在分散的子卷上分发文件。分布式分散卷等效于分布式复制卷,但是使用分散子卷而不是复制子卷结合distibuted和dispersed的优点,HA+LB+可扩容,HA+LB+可扩容)
分布式卷
  • 没有对文件进行分块处理
  • 通过扩展文件属性保存HASH值
  • 支持的底层文件系统有EXT3、EXT4、ZFS、XFS等
  • 没有分块处理,文件只能存在一个server中,效率不提升
分布式卷的特点
  • 文件分布在不同的服务器,不具备冗余性
  • 更容易和廉价地扩展卷的大小
  • 单点故障会造成数据丢失
  • 依赖底层的数据保护
创建分布式卷
  • 创建一个名为dis-volume的分布式卷,文件将根据HASH分布在server1:/dir1、server2:/dir2 server3:/dir3
# gluster volume create rep-volume replica 2 transport tcp server:/dir1 server2:/dir2
复制卷
  • 同一文件保存一份或多分副本
  • 因为要保存副本,所有磁盘利用率较低
  • 若多个节点上的存储空间不一致,将按照木桶效应取最低节点的容量作为该卷的总容量
特点
  • 卷中所有的服务器均保存一个完整的副本
  • 卷的副本数量可由客户创建的时候决定
  • 至少右两块Brik
  • 具备冗余性
创建复制卷
  • 创建名为rep-volume的复制卷,文件将同时存储两个副本,分别在Server1:/dir1和Server2:/dir2两个Brick中
# gluster volume create disp-volume disperse 3 redundancy 1 server1:/exp1 server2:/exp2 server3:/exp3
分散卷
  • 是基于ErasureCodes(纠错码)的一种新类型的Volume(3.6版本正式发布该特性),类型于RAID5/6--分散卷基于纠错码。存储大文件时,性能尤为突出
  • 通过配置Redundancy(冗余)级别提高可靠性,在保证较高的可靠性同时,可以提升物理存储空间的利用率。
特点
  • redundancy(冗余)必须大于0,并且bricks的总数必须大于2*redundancy。
  • dispersed卷必须至少包含3个bricks。
  • 类似raid5/raid6,可以防止单点故障(HA),提升IO性能(LB)。
创建分散卷
  • 创建一个冗余级别为1,(2+1)的三节点分散卷:
# gluster volume create disp-volume disperse 3 redundancy 1 server1:/exp1 server2:/exp2 server3:/exp3
分布式复制卷
  • 分布式复制卷
    • 兼顾分布式卷和复制卷的功能
    • 用于需要冗余的情况
  • 创建分布式复制卷
    • 创建名为dis-rep的分布式条带卷,配置分布式复制卷时,卷中Brick所包含的存储服务器必须是复制数的倍数(>=2倍)
# gluster volume create dist-rep replica 2 transport server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4
分布式分散卷
  • 分布式分散卷
    • 分布式分散卷在分散的子卷上分发文件
    • 分布式分散卷等效于分布式复制卷,但是使用分散子卷而不是复制子卷
    • 结合distibuted和dispersed的优点,HA+LB可扩容,HA+LB+可扩容
  • 六节点分布式分散卷,冗余级别为1,2 x (2+1)=6:
# gluster volume create dist-disp disperse 3 redundancy 1 \ 
server1:/exp1 server2:/exp2 server3:exp3 \
server4:/exp4 server5:/exp5 server6:/exp6

实验案例

给每个服务器添加五块硬盘,为了区分大小五块硬盘可以给不同的数量3.4.5.6.7

操作系统

IP 地址

挂载硬盘

CentOS7.9

192.168.10.101

硬盘:3、4、5、6、7

CentOS7.9

192.168.10.102

硬盘:3、4、5、6、7

CentOS7.9

192.168.10.103

硬盘:3、4、5、6、7

CentOS7.9

192.168.10.104

硬盘:3、4、5、6、7

CentOS7.9

192.168.10.105

硬盘:3、4、5、6、7

CentOS7.9

192.168.10.106

硬盘:3、4、5、6、7

添加磁盘

在每个主机添加五块硬盘为node节点添加相应数量和大小的磁盘,设置内存大小,新加硬盘需要重启一下reboot

修改每一个主机的名称

重启所有主机
[root@node1 ~]# reboot101
[root@localhost ~]# hostnamectl set-hostname node1
[root@localhost ~]# bash
102
[root@localhost ~]# hostnamectl set-hostname node2
[root@localhost ~]# bash
103
[root@localhost ~]# hostnamectl set-hostname node3
[root@localhost ~]# bash
104
[root@localhost ~]# hostnamectl set-hostname node4
[root@localhost ~]# bash
105
[root@localhost ~]# hostnamectl set-hostname node5
[root@localhost ~]# bash
106[root@localhost ~]# hostnamectl set-hostname node6
[root@localhost ~]# bash
设置域名解析

同步六台主机设置域名解析,为每块磁盘分区

[root@node1 ~]# vim /etc/hosts
192.168.10.101 node1
192.168.10.102 node2
192.168.10.103 node3
192.168.10.104 node4
192.168.10.105 node5
192.168.10.106 node6
[root@node1 ~]# fdisk /dev/sdb
[root@node1 ~]# fdisk /dev/sdc
[root@node1 ~]# fdisk /dev/sdd
[root@node1 ~]# fdisk /dev/sde
[root@node1 ~]# fdisk /dev/sdf
n        #创建新的分区
w        #保存
为每个节点格式化分区
[root@node1 ~]# mkfs -t ext4 /dev/sdb1
[root@node1 ~]# mkfs -t ext4 /dev/sdc1
[root@node1 ~]# mkfs -t ext4 /dev/sdd1
[root@node1 ~]# mkfs -t ext4 /dev/sde1
[root@node1 ~]# mkfs -t ext4 /dev/sdf1
创建挂载点
[root@node1 ~]# mkdir /b3
[root@node1 ~]# mkdir /c4
[root@node1 ~]# mkdir /d5
[root@node1 ~]# mkdir /e6
[root@node1 ~]# mkdir /f7
挂载磁盘
[root@node1 ~]# mount /dev/sdb1 /b3
[root@node1 ~]# mount /dev/sdc1 /c4
[root@node1 ~]# mount /dev/sdd1 /d5
[root@node1 ~]# mount /dev/sde1 /e6
[root@node1 ~]# mount /dev/sdf1 /f7
设置永久挂载
[root@node1 ~]# vim /etc/fstab
/dev/sdb1 /b3 ext4 defaults 0 0
/dev/sdc1 /c4 ext4 defaults 0 0
/dev/sdd1 /d5 ext4 defaults 0 0
/dev/sde1 /e6 ext4 defaults 0 0
/dev/sdf1 /f7 ext4 defaults 0 0
关闭防火墙

关闭防火墙设置永久关闭

[root@node1 ~]# systemctl stop firewalld
[root@node1 ~]# setenforce 0
[root@node1 ~]# systemctl disable firewalld
部署yum仓库
rm -rf /etc/yum.repos.d/*
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
[root@node1 ~]# yum repolist          #显示当前系统上配置的所有软件仓库以及状态
在所有节点上安装gfs

安装依赖环境

在 CentOS 系统上安装一个软件包,该包添加了 GlusterFS 的 YUM 仓库配置,从而使系统能够从 GlusterFS 仓库中安装和更新 GlusterFS 相关的软件包。

[root@node1 ~]# yum -y install centos-release-gluster
[root@node1 ~]# cd /etc/yum.repos.d/
[root@node1 yum.repos.d]# vim CentOS-Gluster-9.repo
#mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=$releasever&repo=storage-gluster-9
#禁用该命令
baseurl=http://mirrors.aliyun.com/$contentdir/$releasever/storage/$basearch/gluster-9/
#清除仓库原数据
[root@node1 yum.repos.d]# yum clean all
[root@node1 yum.repos.d]# yum repolist            #查看状态

允许设置和管理一个分布式存储集群。

[root@node1 yum.repos.d]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma

  1. glusterfs: GlusterFS 的客户端工具。
  2. glusterfs-server: GlusterFS 的服务器端组件。
  3. glusterfs-fuse: 使用 FUSE(文件系统用户空间)实现的 GlusterFS 客户端。
  4. glusterfs-rdma: 用于 RDMA(远程直接内存访问)的 GlusterFS 组件,可以提供更高效的数据传输。
启动所有节点上的GFS
[root@node1 yum.repos.d]# systemctl start glusterd
[root@node1 yum.repos.d]# systemctl enable glusterd
添加节点

取消同步会话在任意一个主机去配置

添加节点来到101主机

[root@node1 ~]# gluster peer probe node1
peer probe: Probe on localhost not needed
[root@node1 ~]# gluster peer probe node2
peer probe: success
[root@node1 ~]# gluster peer probe node3
peer probe: success
[root@node1 ~]# gluster peer probe node4
peer probe: success
[root@node1 ~]# gluster peer probe node5
peer probe: success
[root@node1 ~]# gluster peer probe node6
peer probe: success
在每个节点上查看状态

只能查看到其他节点本节点看不到

[root@node1 ~]# gluster peer status
Number of Peers: 5Hostname: node2
Uuid: 4622f6bb-dbf4-4830-baf0-14be73870675
State: Peer in Cluster (Connected)Hostname: node3
Uuid: b5ab5520-8b29-4c1d-9e62-c99ec9e1b744
State: Peer in Cluster (Connected)Hostname: node4
Uuid: 51b91f2d-98dd-48e0-b49c-2f99345ba7f1
State: Peer in Cluster (Connected)Hostname: node5
Uuid: 23008c77-c360-4298-a4e9-edfcef9c9f00
State: Peer in Cluster (Connected)Hostname: node6
Uuid: 3fd4a747-7858-4e20-ab1e-345a9698ad86
State: Peer in Cluster (Connected)

创建卷

创建分布式卷

创建默认的就是分布式卷,创建一个 的 GlusterFS 卷,它将数据分布到 node1 和 node2 节点上,每个节点的 force 选项确保即使在创建过程中出现一些问题或警告,卷也会被强制创建。

[root@node1 ~]# gluster volume create dist-volume node1:/e6 node2:/e6 force
[root@node1 ~]# gluster volume start dist-volume          #启动卷
[root@node1 ~]# gluster volume info dist-volume         #查看卷的状态跟配置信息Volume Name: dist-volume
Type: Distribute
Volume ID: 7158d50e-b433-4826-8f9d-ed9b351cd796
Status: Started
Snapshot Count: 0
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: node1:/e6
Brick2: node2:/e6
Options Reconfigured:
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on
创建复制卷
[root@node1 ~]# gluster volume create rep-volume replica 2 node3:/d5 node4:/d5 force
[root@node1 ~]# gluster volume start rep-volume
[root@node1 ~]# gluster volume info rep-volumeVolume Name: rep-volume
Type: Replicate
Volume ID: 813d421a-d572-4a4d-89a7-c589b3235041
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: node3:/d5
Brick2: node4:/d5
Options Reconfigured:
cluster.granular-entry-heal: on
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
分散卷
[root@node1 ~]# gluster volume create disp-volume disperse 3 redundancy 1 node1:/b3 node2:/b3 node3:/b3 force
[root@node1 ~]# gluster volume start disp-volume
[root@node1 ~]# gluster volume info disp-volumeVolume Name: disp-volume
Type: Disperse
Volume ID: 48fcc28b-1c98-4946-b5d8-799c54a8453e
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x (2 + 1) = 3
Transport-type: tcp
Bricks:
Brick1: node1:/b3
Brick2: node2:/b3
Brick3: node3:/b3
Options Reconfigured:
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on
分布式复制卷
[root@node1 ~]# gluster volume create dist-rep replica 2 node1:/c4 node2:/c4 node3:/c4 node4:/c4 force
[root@node1 ~]# gluster volume start dist-rep
[root@node1 ~]# gluster volume info dist-repVolume Name: dist-rep
Type: Distributed-Replicate
Volume ID: 2a8d0c93-4b06-4846-ae66-1ad9dcc65577
Status: Started
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/c4
Brick2: node2:/c4
Brick3: node3:/c4
Brick4: node4:/c4
Options Reconfigured:
cluster.granular-entry-heal: on
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
分布式分散卷
[root@node1 ~]# gluster volume create dist-disp disperse 3 redundancy 1 node1:/f7 node2:/f7 node3:/f7 node4:/f7 node5:/f7 node6:/f7 force
[root@node1 ~]# gluster volume start dist-disp
[root@node1 ~]# gluster volume info dist-dispVolume Name: dist-disp
Type: Distributed-Disperse
Volume ID: 6dc63279-ee96-46cc-aca8-bc5f11892656
Status: Started
Snapshot Count: 0
Number of Bricks: 2 x (2 + 1) = 6
Transport-type: tcp
Bricks:
Brick1: node1:/f7
Brick2: node2:/f7
Brick3: node3:/f7
Brick4: node4:/f7
Brick5: node5:/f7
Brick6: node6:/f7
Options Reconfigured:
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on

部署GFS客户端

安装客户端软件

随意拿一台主机当客户端

[root@node1 ~]# systemctl stop firewalld
[root@node1 ~]# setenforce 0
[root@node1 ~]# yum -y install glusterfs glusterfs-fuse
创建挂载目录
[root@node1 ~]# mkdir -p /test/{dist,rep,disp,dist_and_rep,dist_and_disp}
创建hosts文件
[root@node1 ~]# vim /etc/hosts
192.168.10.101 node1
192.168.10.102 node2
192.168.10.103 node3
192.168.10.104 node4
192.168.10.105 node5
192.168.10.106 node6
挂载Gluster文件系统
[root@node1 ~]# mount -t glusterfs node1:dist-volume /test/dist
[root@node1 ~]# mount -t glusterfs node1:rep-volume /test/rep
[root@node1 ~]# mount -t glusterfs node1:disp-volume /test/disp
[root@node1 ~]# mount -t glusterfs node1:dist-rep /test/dist_and_rep/
[root@node1 ~]# mount -t glusterfs node1:dist-disp /test/dist_and_disp/
修改fstab配置文件
[root@node1 ~]# vim /etc/fstab
node1:dist-volume   /test/dist    glusterfs defaults,_netdev 0 0
在客户端测试Gluster文件系统
创建测试文件
[root@node1 ~]# dd if=/dev/zero of=aaa1.log bs=1M count=43
[root@node1 ~]# dd if=/dev/zero of=aaa2.log bs=1M count=43
[root@node1 ~]# dd if=/dev/zero of=aaa3.log bs=1M count=43
[root@node1 ~]# dd if=/dev/zero of=aaa4.log bs=1M count=43
[root@node1 ~]# dd if=/dev/zero of=aaa5.log bs=1M count=43
[root@node1 ~]# dd if=/dev/zero of=aaa6.log bs=1M count=43
[root@node1 ~]# dd if=/dev/zero of=aaa7.log bs=1M count=43
[root@node1 ~]# dd if=/dev/zero of=aaa8.log bs=1M count=43
卷中写入文件
[root@node1 ~]# cp aaa* /test/dist/
[root@node1 ~]# cp aaa* /test/rep/
[root@node1 ~]# cp aaa* /test/disp/
[root@node1 ~]# cp aaa* /test/dist_and_rep/
[root@node1 ~]# cp aaa* /test/dist_and_disp/
[root@node1 dist]# history           #显示用户的命令历史。它列出了用户在当前会话中输入过的所有命令,以及在历史文件中保存的命令。
查看文件分布

来到102主机

[root@node2 e6]# cd /e6
[root@node2 e6]# ls
aaa1.log  aaa5.log  aaa6.log  lost+found

来到103、104主机

[root@node3 ~]# cd /d5
[root@node3 d5]# ls
demo1.log  demo2.log  demo3.log  demo4.log  demo5.log  demo6.log  demo7.log  demo8.log  lost+found

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com