当前位置: 首页 > news >正文

基于openEuler搭建Glusterfs集群实验

1、GFS的简介

GFS是一个可扩展、开源的分布式文件系统(可以很好的体现出弹性伸缩的特点),用于大型的、分布式的、对大量数据进行访问的应用,在传统的解决方案中,GFS 能够灵活的结合物理的,虚拟的和云资源去体现高可用和企业级的性能存储由存储服务器、客户端以及NFS/Samba 存储网关(可选,根据需要选择使用)组成。没有元数据服务器组件,这有助于提升整个系统的性能、可靠性和稳定性。

GFS由三个组件组成:

  • 存储服务器(Brick Server)
  • 客户端(不在本地)(且,有客户端,也会有服务端,这点类似于NFS,但是更为复杂)
  • 存储网关(NFS/Samaba)

无元数据服务器:

元数据是核心,描述对象的信息,影响其属性;例如NFS,存放数据本身,是一个典型的元数据服务器可能存在单点故障,故要求服务器性能较高,服务器一旦出现故障就会导致数据丢失;反过来看,所以无元数据服务不会有单点故障。那么数据存放在哪里呢?会借用分布式的原则,分散存储,不会有一个统一的数据服务器。

2、GFS的工作原理

2.1、工作流程

(1)客户端或应用程序通过 GlusterFS 的挂载点访问数据;

(2)linux系统内核通过 VFS API 虚拟接口收到请求并处理;

(3)VFS 将数据递交给 FUSE 内核文件系统,这是一个伪文件系统,这个伪文件系统主要用来转存,它提供一个虚拟接口,映射出来/dev/fuse这样一个虚拟路径,并向系统注册一个实际的文件系统 FUSE,而 FUSE 文件系统则是将数据通过 /dev/fuse 设备文件递交给了 GlusterFS client 端。可以将 FUSE 文件系统理解为一个代理

(4)GlusterFS client 会实时监听/dev/fuse下的数据,一旦数据更新,会把数据拿过来,client 根据配置文件的配置对数据进行处理

(5)经过 GlusterFS client 处理后,通过网络将数据传递至远端的 GlusterFS Server,server会先转存到本地的vfs虚拟文件系统中,然后再通过vfs转存到EXT3上。EXT3指的是各个block块中的EXT3文件系统中。

服务器详解:

  • Application:客户端或应用程序通过GlusterFSync的挂载点访问数据
  • VFS:linux系统内核通过VFS的API 收到请求并处理
  • FUSE:VFS将数据递交给FUSE内核文件系统,fuse文件系统则是将数据通过/dev/fuse设备文件递交给了GlusterFS
  • GlusterFS Client :通过网络将数据传递至远端的GlusterFS Server, 并且写入到服务器存储设备上

2.2、后端存储如何定位文件

通过弹性HASH算法,弹性 HASH 算法是 Davies-Meyer 算法的具体实现,通过 HASH 算法可以得到一个 32 位的整数范围的 hash 值,假设逻辑卷中有 N 个存储单位 Brick,则 32 位的整数范围将被划分为 N 个连续的子空间,每个空间对应一个 Brick。当用户或应用程序访问某一个命名空间时,通过对该命名空间计算 HASH 值,根据该 HASH 值所对应的 32 位整数空间定位数据所在的 Brick

3、GFS的卷类型

GlusterFS 支持七种卷, 即分布式卷、条带卷、复制卷、分布式条带卷、分布式复制卷、条带复制卷和分布式条带复制卷, 这七种卷可以满足不同应用对高性能、高可用的需求。

  • 分布式卷( Di stribute volume ) : 文件通过HASH 算法分布到所有Brick Server 上,这种卷是Glusterf 的基础; 以文件为单位根据HASH 算法散列到不同的Brick , 其实只是扩大了磁盘空间, 如果有一块磁盘损坏, 数据也将丢失, 属千文件级的RAIDO ,不具有容错能力。
  • 条带卷( Stripe volume ) : 类似RAID0 , 文件被分成数据块并以轮询的方式分布到多个Brick Server 上, 文件存储以数据块为单位, 支持大文件存储, 文件越大, 读取效率越高。
  • 复制卷(Replica volume ) : 将文件同步到多个Brick 上, 使其具备多个文件副本,属于文件级RAID 1, 具有容错能力。因为数据分散在多个Brick 中, 所以读性能得到很大提升, 但写性能下降。
  • 分布式条带卷( Distri bute Stripe volume) : Brick Server 数扯是条带数( 数据块分布的Brick 数址)的倍数, 兼具分布式卷和条带卷的特点。
  • 分布式复制卷(Distribute Replica volume ) : Brick Server 数量是镜像数(数据副本数量)的倍数, 兼具分布式卷和复制卷的特点。
  • 条带复制卷(Stripe Replica volume ) : 类似RAID 10 , 同时具有条带卷和复制卷的特点。
  • 分布式条带复制卷(Distribute Stripe Replicavolume ) : 三种基本卷的复合卷, 通常用于类Map Reduce 应用。

4、GFS的部署

4.1、环境准备

主机名IP身份
openEuler-1192.168.121.10节点1(提供两块6G硬盘)
openEuler-2192.168.121.11节点2(提供两块6G硬盘)
openEuler-3192.168.121.12节点3(提供两块6G硬盘)
openEuler-4192.168.121.13client

4.2、磁盘分区

[root@openEuler-1 ~]# lsblk
NAME                   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                      8:0    0    6G  0 disk
└─sda1                   8:1    0    6G  0 part /exp/vda1
sdb                      8:16   0    6G  0 disk
└─sdb1                   8:17   0    6G  0 part /exp/vdb1
sr0                     11:0    1  3.8G  0 rom
nvme0n1                259:0    0   20G  0 disk
├─nvme0n1p1            259:1    0    1G  0 part /boot
└─nvme0n1p2            259:2    0   19G  0 part├─openeuler_192-root 253:0    0   17G  0 lvm  /└─openeuler_192-swap 253:1    0    2G  0 lvm  [SWAP]# fdisk将添加两块硬盘每个划分一个分区,即/dev/sda1和/dev/sdb1
[root@openEuler-1 ~]# fdisk /dev/sda
[root@openEuler-1 ~]# fdisk /dev/sdb# 对创建出来的磁盘进行格式化
[root@openEuler-1 ~]# mkfs.xfs /dev/sda1
[root@openEuler-1 ~]# mkfs.xfs /dev/sdb1# 节点2、3重复上面操作

4.3、磁盘挂载

# 创建挂载点
[root@openEuler-1 ~]# mkdir -p /exp/vd{a,b}1# 配置永久挂载磁盘分区
[root@openEuler-1 ~]# echo "/dev/sda1 /exp/vda1 xfs defaults 0 0" >> /etc/fstab
[root@openEuler-1 ~]# echo "/dev/sdb1 /exp/vdb1 xfs defaults 0 0" >> /etc/fstab# 对创建出来的分区格式化
[root@openEuler-1 ~]# mkfs.xfs /dev/sda1
meta-data=/dev/sda1              isize=512    agcount=4, agsize=393152 blks=                       sectsz=512   attr=2, projid32bit=1=                       crc=1        finobt=1, sparse=1, rmapbt=0=                       reflink=1    bigtime=1 inobtcount=0
data     =                       bsize=4096   blocks=1572608, imaxpct=25=                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2=                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@openEuler-1 ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=393152 blks=                       sectsz=512   attr=2, projid32bit=1=                       crc=1        finobt=1, sparse=1, rmapbt=0=                       reflink=1    bigtime=1 inobtcount=0
data     =                       bsize=4096   blocks=1572608, imaxpct=25=                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2=                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0# 挂载
[root@openEuler-1 ~]# mount -a[root@openEuler-1 ~]# df -h
Filesystem                      Size  Used Avail Use% Mounted on
devtmpfs                        4.0M     0  4.0M   0% /dev
tmpfs                           714M     0  714M   0% /dev/shm
tmpfs                           286M  7.9M  278M   3% /run
tmpfs                           4.0M     0  4.0M   0% /sys/fs/cgroup
/dev/mapper/openeuler_192-root   17G  2.8G   13G  18% /
tmpfs                           714M     0  714M   0% /tmp
/dev/nvme0n1p1                  974M  168M  739M  19% /boot
/dev/sda1                       6.0G   76M  6.0G   2% /exp/vda1
/dev/sdb1                       6.0G   76M  6.0G   2% /exp/vdb1

4.4、配置host解析

# 各节点更改对应主机名,这里以node-1为例
[root@openEuler-1 ~]# hostnamectl set-hostname node-1# 配置主机解析
[root@openEuler-1 ~]# vim /etc/hosts
192.168.93.10 node-1
192.168.93.11 node-2
192.168.93.12 node-3# 节点2、3重复上面操作

4.5、安装GlusterFS服务端软件包

[root@openEuler-1 ~]# yum install glusterfs-server -y
[root@openEuler-1 ~]# systemctl enable --now glusterd.service# 节点2、3重复上面操作

4.6、配置GlusterFS存储信任池

# 在node1节点上,添加其它信任池节点
[root@openEuler-1 ~]# gluster peer probe node-2
peer probe: success
[root@openEuler-1 ~]# gluster peer probe node-3
peer probe: success# 查看信任池状态
[root@openEuler-1 ~]# gluster peer status
Number of Peers: 2Hostname: node-2
Uuid: 7d5ca3fa-28a4-47df-87b0-7ebb7d8bc34c
State: Peer in Cluster (Connected)Hostname: node-3
Uuid: 87bb7acc-fad4-4329-b249-e9068ba7d8bc
State: Peer in Cluster (Connected)# 查看信任池列表
[root@openEuler-1 ~]# gluster pool list
UUID                                    Hostname        State
7d5ca3fa-28a4-47df-87b0-7ebb7d8bc34c    node-2          Connected
87bb7acc-fad4-4329-b249-e9068ba7d8bc    node-3          Connected
12928d84-46a6-465b-adff-2c4fe31a9070    localhost       Connected

4.7、创建测试卷(复制卷)

[root@openEuler-1 ~]# gluster volume create gv-rep replic 3 node-1:/exp/vda1/brick node-2:/exp/vda1/brick node-3:/exp/vda1/brick
volume create: gv-rep: success: please start the volume to access data
[root@openEuler-1 ~]# gluster volume start gv-rep
volume start: gv-rep: success

5、客户端测试

5.1、安装GlusterFS客户端软件包

# 安装软件包
[root@openEuler-4 ~]# yum install glusterfs-fuse -y# 配置hosts解析
[root@openEuler-4 ~]# vim /etc/hosts
192.168.93.10 node-1
192.168.93.11 node-2
192.168.93.12 node-3

5.2、客户端挂载

# 创建挂载点
[root@openEuler-4 ~]# mkdir /mnt/test1# 挂载复制卷
[root@openEuler-4 ~]# mount.glusterfs node-1:/gv-rep /mnt/test1/

5.3、测试

# 客户端批量创建文件
[root@openEuler-4 test1]# touch file{1..10}
[root@openEuler-4 test1]# ls
file1  file10  file2  file3  file4  file5  file6  file7  file8  file9# 在节点上查看(节点1、2、3一致)
[root@openEuler-1 ~]# ls /exp/vda1/brick/
file1  file10  file2  file3  file4  file5  file6  file7  file8  file9

http://www.lryc.cn/news/585292.html

相关文章:

  • 2025企业官网黑链攻防实战:从紧急处置到长效防御体系构建
  • Python-异常、模块与包
  • 1Panel V1 无缝升级到 V2 版本 实现多个 PHP 网站共享一个容器
  • MySQL表的增删查改(下)(7)
  • 2025 年第十五届 APMCM 亚太地区大学生数学建模竞赛-B题 疾病的预测与大数据分析
  • 藏不住了,全是硬货!极空间快照,夸克网盘挂载,HDMI桌面输出全部安排!
  • 数据结构 之 【链式二叉树】(C语言实现二叉树的前序中序后序层序遍历,节点个数、树的高度、第K层的节点个数、查找、完全二叉树的判别、销毁创建二叉树)
  • 北京-4年功能测试2年空窗-报培训班学测开-第四十八天
  • 奇哥面试记:SpringBoot整合RabbitMQ与高级特性,一不小心吊打面试官
  • Ant ASpin自定义 indicator 报错
  • map数据结构在Golang中是无序的,并且键值对的查找效率较高的原因
  • 一些有意思的Python语法特性
  • pytorch的介绍以及张量的创建
  • 企业培训笔记:Vue3前端框架配置
  • mac电脑的usr/libexec目录是干什么的?
  • 怎么处理多源异构数据?搞不清楚就别谈数据融合!
  • Linux的基础I/O
  • PDF 转图助手 PDF2JPG 绿色版:免安装直接用,急处理文件的救急小天使
  • Genus:设计信息结构以及导航方式(路径种类)
  • 牛客 —— JZ22 链表中倒数最后k个结点
  • cesium添加原生MVT矢量瓦片方案
  • 云暴露面分析完整指南
  • 香港站群服务器8C/4C/2C/1C有什么区别
  • Elasticsearch混合搜索深度解析(上):问题发现与源码探索
  • C++11中的std::minmax与std::minmax_element:原理解析与实战
  • 12. 说一下 https 的加密过程
  • 笔记 | 理解C/汇编中的数组元素访问
  • 飞算JavaAI:给Java开发装上“智能引擎”的超级助手
  • UNet改进(21):门控注意力机制在UNet中的应用与优化
  • 前端高频面试题深度解析(JavaScript + Vue + jQuery)