一、GlusterFS概述
1、Glusterfs简介
GlusterFS是Scale-Out存储解决方案Gluster的核心,它是一个开源的分布式文件系统,具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处理数千客户端。GlusterFS借助TCP/IP或InfiniBandRDMA网络将物理分布的存储资源聚集在一起,使用单一全局命名空间来管理数据
2、Glusterfs 特点
序号 | 特性 | 描述 |
---|---|---|
1 | 扩展性和高性能 | GlusterFS 利用双重特性提供几 TB 至数 PB 高扩展存储方案,Scale - Out 架构支持通过增加资源提升存储容量和性能,磁盘、计算和 I/O 资源可独立增加,支持 10GbE 和 InfiniBand 等高速网络互联;Gluster 弹性哈希(ElasticHash)解除元数据服务器需求,消除单点故障和性能瓶颈,实现并行化数据访问 |
2 | 高可用性 | 可对文件自动复制(镜像或多次复制)确保数据访问,硬件故障时也能正常访问;自我修复功能增量式后台执行恢复数据,几乎无性能负载;采用主流标准磁盘文件系统(如 EXT3、ZFS)存储文件,数据可用标准工具复制和访问 |
3 | 弹性卷管理 | 数据存于逻辑卷,逻辑卷从虚拟化物理存储池独立逻辑划分而来;存储服务器可在线增加和移除,不中断应用;逻辑卷可在配置服务器中增长、缩减、迁移均衡容量,增减系统等操作可在线进行;文件系统配置更改可实时在线应用,适应工作负载和性能调优 |
4 | 全局统一命名空间 | 将存储资源聚成单一虚拟存储池,屏蔽物理存储信息;可弹性扩展或收缩存储;多节点场景中,能给不同节点做负载均衡,提高存取效率 |
5 | InfiniBand RDMA | 无限宽带技术,高性能计算和数据中心网络技术,提供低延迟、高带宽、可靠连接方式,连接服务器、存储设备等;可绕过操作系统内核,创建应用程序间通信直接通道,提供低延迟消息传输服务 |
3、术语简介
术语 | 解释 |
---|---|
GlusterFS | 是一个开源的分布式文件系统 |
Brick | GFS 中的存储单元,通过是一个受信存储池中的服务器的一个导出目录。可以通过主机名和目录名来标识,如SERVER:EXPORT |
Client | 挂载了 GFS 卷的设备 |
FUSE(Filesystem Userspace) | 是一个可加载的内核模块,其支持非特权用户创建自己的文件系统而不需要修改内核代码。通过在用户空间运行文件系统的代码通过 FUSE 代码与内核进行桥接 |
Node | 一个拥有若干 brick 的设备 |
Volume | 一组 bricks 的逻辑集合 |
Metadata | 元数据,关于数据的数据,用于描述文件、目录等的信息 |
VFS | 内核空间对用户空间提供的访问磁盘的接口 |
POSIX | 指可移植操作系统接口 |
4、Glusterfs的工作流程
步骤 | 操作内容 |
---|---|
(1) | 客户端 / 应用程序经 GFS 挂载点访问数据 |
(2) | Linux 系统内核借 VFS API 收请求并处理 |
(3) | VFS 把数据交给 FUSE 内核文件系统,FUSE 经 /dev/Fuse 设备文件递交给 GFS client 端(FUSE 为代理 ) |
(4) | GFS client 收数据后依配置文件处理 |
(5) | GFS client 处理后经网络传至远端 GFS Server,写入服务器存储设备 |
5、卷的类型
灰色的卷glusterfs 6.1及以上的版本已被弃用
在glusterfs 6.1版本之后,不在支持stripe ,分布式条带卷不再多说,在官方的安装文档卷的介绍中已经把条带卷移除了,因为这个卷的可用性太差,只要一个brick挂掉,整个就挂掉,客户端就不能访问,显然不符合生产环境。
分类 | 卷类型 | 英文名称 | 特点及说明 |
---|---|---|---|
基本卷 | 分布式卷 | distribute volume | 文件通过 hash 算法分布到所有 brick server 上,是 glusterfs 的基础和最大特点;仅扩大磁盘空间,无容错能力,一个磁盘坏对应数据丢失,文件级 RAID 0 |
基本卷 | 条带卷 | stripe volume | 类似 RAID0,文件分成数据块以 Round Robin 方式分布到 brick server 上,并发粒度是数据块,支持超大文件,大文件性能高;6 的版本以后不再支持 |
基本卷 | 复制卷 | replica volume | 文件同步复制到多个 brick 上,文件级 RAID 1,有容错能力,写性能下降,读性能提升 |
基本卷 | 分散卷 | - | 基于 Erasure Codes(纠错码)的新类型 Volume(3.6 版本正式发布该特性 ),类似 RAID5/6,存储大文件时性能突出;通过配置 Redundancy(冗余)级别提高可靠性,提升物理存储空间利用率 |
复合卷 | 分布式条带卷 | distribute stripe volume | brickserver 数量是条带数的倍数,兼具 distribute 和 stripe 卷的特点 |
复合卷 | 分布式复制卷 | distribute replica volume | brickserver 数量是镜像数的倍数,兼具 distribute 和 replica 卷的特点,可在 2 个或多个节点之间复制数据 |
复合卷 | 条带复制卷 | stripe replica volume | 类似 RAID 10;同时具有条带卷和复制卷的特点 |
复合卷 | 分布式条带复制卷 | distribute stripe replicavolume | 三种基本卷的复合卷;通常用于类 Map Reduce 应用 |
复合卷 | 分布式分散卷 | - | 在分散的子卷上分发文件;等效于分布式复制卷,但使用分散子卷而非复制子卷;结合 distributed 和 dispersed 的优点,HA+LB + 可扩容 |
二、实验部分
操作系统 | 系统 IP | 主机名 | 挂载磁盘 | 挂载目录 |
---|---|---|---|---|
openEuler 24.03 (LTS-SP1) | 192.168.10.101 | node1 | /dev/nvme0n2(3G) /dev/nvme0n3(4G) /dev/nvme0n4(5G) /dev/nvme0n5(6G) /dev/nvme0n6(7G) | /n3 /n4 /n5 /n6 /n7 |
openEuler 24.03 (LTS-SP1) | 192.168.10.102 | node2 | /dev/nvme0n2(3G) /dev/nvme0n3(4G) /dev/nvme0n4(5G) /dev/nvme0n5(6G) /dev/nvme0n6(7G) | /n3 /n4 /n5 /n6 /n7 |
openEuler 24.03 (LTS-SP1) | 192.168.10.103 | node3 | /dev/nvme0n2(3G) /dev/nvme0n3(4G) /dev/nvme0n4(5G) /dev/nvme0n5(6G) /dev/nvme0n6(7G) | /n3 /n4 /n5 /n6 /n7 |
openEuler 24.03 (LTS-SP1) | 192.168.10.104 | node4 | /dev/nvme0n2(3G) /dev/nvme0n3(4G) /dev/nvme0n4(5G) /dev/nvme0n5(6G) /dev/nvme0n6(7G) | /n3 /n4 /n5 /n6 /n7 |
openEuler 24.03 (LTS-SP1) | 192.168.10.105 | node5 | /dev/nvme0n2(3G) /dev/nvme0n3(4G) /dev/nvme0n4(5G) /dev/nvme0n5(6G) /dev/nvme0n6(7G) | /n3 /n4 /n5 /n6 /n7 |
openEuler 24.03 (LTS-SP1) | 192.168.10.106 | node6 | /dev/nvme0n2(3G) /dev/nvme0n3(4G) /dev/nvme0n4(5G) /dev/nvme0n5(6G) /dev/nvme0n6(7G) | /n3 /n4 /n5 /n6 /n7 |
openEuler 24.03 (LTS-SP1) | 192.168.10.107 | client |
基础配置
1、关闭防火墙及内核保护
systemctl stop firewalld
setenforce 0
2、改名
hostnamectl set-hostname node1
hostnamectl set-hostname node2
hostnamectl set-hostname node3
hostnamectl set-hostname node4
hostnamectl set-hostname node5
hostnamectl set-hostname node6
bash
3、修改hosts文件
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
4、安装软件
dnf -y install glusterfs glusterfs-server glusterfs-fuse
5、磁盘分区
fdisk /dev/nvme0n2
fdisk /dev/nvme0n3
fdisk /dev/nvme0n4
fdisk /dev/nvme0n5
fdisk /dev/nvme0n6
6、格式化文件系统
mkfs.xfs /dev/nvme0n2p1
mkfs.xfs /dev/nvme0n3p1
mkfs.xfs /dev/nvme0n4p1
mkfs.xfs /dev/nvme0n5p1
mkfs.xfs /dev/nvme0n6p1
7、创建挂载点
mkdir /n3
mkdir /n4
mkdir /n5
mkdir /n6
mkdir /n7
8、挂载
vim /etc/fstab
/dev/nvme0n2p1 /n3 xfs defaults 0 0
/dev/nvme0n3p1 /n4 xfs defaults 0 0
/dev/nvme0n4p1 /n5 xfs defaults 0 0
/dev/nvme0n5p1 /n6 xfs defaults 0 0
/dev/nvme0n6p1 /n7 xfs defaults 0 0
reboot
systemctl stop firewalld
setenforce 0
9、启动服务
systemctl start glusterd.service
10、添加节点到集群
gluster peer probe node2
gluster peer probe node3
gluster peer probe node4
gluster peer probe node5
gluster peer probe node6
11、查看状态
二、创建卷
1、创建GFS分布式卷
默认创建的就是分布式卷
# 创建一个名为 dist-volume 的 GlusterFS 卷,使用 node1 节点的 /n3 目录和 node2 节点的 /n3 目录作为存储 bricks
gluster volume create dist-volume node1:/n3 node2:/n3 force
# 启动名为 dist-volume 的 GlusterFS 卷,让其开始提供分布式存储服务,卷创建后需启动才能被客户端挂载使用
gluster volume start dist-volume
# 查看名为 dist-volume 的 GlusterFS 卷的详细信息,比如卷的类型、包含的 bricks 列表、状态、配置参数等,用于确认卷创建和启动后的情况
gluster volume info dist-volume
2、创建复制卷
复制卷要求复制的数量和Brick Server的数量(node的数量)相同
gluster volume create rep-volume replica 2 node1:/n4 node2:/n4 force
gluster volume start rep-volume
gluster volume info rep-volume
3、创建分散卷
用三个分区创建分散卷,允许一个分区失效,分散卷中每三个brick允许有一个失效(3*1或6*2)是基于ErasureCodes(纠错码)的一种新类型的Volume(3.6版本正式发布该特性),类似于RAID5/6。通过配置Redundancy(冗余)级别提高可靠性,在保证较高的可靠性同时,可以提升物理存储空间的利用率。redundancy 必须大于0,并且bricks的总数必须大于2 *redundancy 。 这意味着dispersed卷必须至少包含3个bricks。类似raid5/raid6,防止单点故障(HA),提升IO性能(LB)。
gluster volume create disp-volume disperse 3 redundancy 1 node1:/n5 node2:/n5 node3:/n5 force
gluster volume start disp-volume
gluster volume info disp-volume
4、创建分布式复制卷
分布式复制卷要求Brick Server的数量必须是复制数的倍数(两倍或更高的倍数)
gluster volume create dist-rep replica 2 node1:/n6 node2:/n6 node3:/n6 n
ode4:/n6 force
gluster volume start dist-rep
gluster volume info dist-rep
5、创建分布式分散卷
分布式分散卷需要用六个节点,每三个节点做一个分散卷,两组分散卷做成复制卷
gluster volume create dist-disp disperse 3 redundancy 1 node1:/n7 node2:/n7 node3:/n7 node4:/n7 node5:/n7 node6:/n7 force
gluster volume start dist-disp
gluster volume info dist-disp
三、部署客户端
1、关闭防火墙及内核保护
systemctl stop firewalld
setenforce 0
2、修改hosts文件
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
3、安装客户端软件
dnf -y install glusterfs glusterfs-fuse
4、创建挂载目录
mkdir dist
mkdir rep
mkdir disp
mkdir dist_and_rep
mkdir dist_and_disp
5、挂载
mount -t glusterfs node1:dist-volume /root/dist
mount -t glusterfs node1:rep-volume /root/rep
mount -t glusterfs node1:disp-volume /root/disp
mount -t glusterfs node1:dist-rep /root/dist_and_rep
mount -t glusterfs node1:dist-disp /root/dist_and_disp
四、测试
1、创建测试文件
2、写入文件
cp a* /root/dist
cp a* /root/rep
cp a* /root/disp
cp a* /root/dist_and_rep
cp a* /root/dist_and_disp