共享存储GlusterFS


GFS的介绍

GlusterFS(GNU ClusterFile System)是一种全对称的开源分布式文件系统,所谓全对称是指GlusterFS采用弹性哈希算法,没有中心节点,所有节点全部平等。GlusterFS配置方便,稳定性好,可轻松达到PB级容量,数千个节点。

GlusterFS重要概念

birck:GlusterFS的基本元素,以节点服务器目录形式展现;

volume:多个brick的逻辑集合;

metadata:元数据,用于描述文件、目录等的信息;

self-heal:用于后台运行检测副本卷中文件和目录的不一致性并解决这些不一致;

FUSE:Filesystem Userspace是一个可加载的内核模块,其支持非特权用户创建自己的文件系统而不需要修改内核代码通过在用户空间运行文件系统的代码通过FUSE代码与内核进行桥接;

Gluster Server:数据存储服务器,即组成GlusterFS存储集群的节点;

Gluster Client:使用GlusterFS存储服务的服务器,如KVM、OpenStack、LB RealServer、HA node。


实战 ----环境准备

关闭防火墙、关闭selinux,hostname能互相解析


node1 --- web01 10.0.0.7
node2 --- web02 10.0.0.8
echo 172.16.1.7   web01 >> /etc/hosts
echo 172.16.1.8   web02 >> /etc/hosts

image-20240925212128524

软件包安装

[gluster9]
name=GlusterFS-9
baseurl=https://buildlogs.centos.org/centos/7/storage/x86_64/gluster-9/
gpgcheck=0
enabled=1

### 安装
yum -y install centos-release-gluster
yum -y install glusterfs glusterfs-server glusterfs-fuse


### 开机自启
systemctl start glusterd
systemctl enable glusterd
systemctl status glusterd

创建集群

## 将web02 加入集群
[root@web01 yum.repos.d]# gluster peer probe web02
peer probe: success

# 如果想从集群中去除节点,可以执行如下命令,但该节点中不能存在卷中正在使用的brick。
gluster peer detach 节点名称

## 查看集群状态
[root@web01 yum.repos.d]# gluster peer status
Number of Peers: 1

Hostname: web02
Uuid: d8f358e1-0c9b-48f5-b785-f3cfe5cdbd83
State: Peer in Cluster (Connected)

创建分布式卷,命令格式如下:

gluster volume create volume_name replica 2 node1:/data/br1 node2:/data/br1

volumn_name:卷名

node1:节点名

replica:文件保存的份数

/data/br1:可以理解为节点上的目录,这个目录最好是一个单独的分区(分区类型最好为逻辑卷的方式,这样易于操作系统级别的存储空间扩展),默认不能使用root分区进行创建卷,如需要root分区创建卷添加force参数

[root@web01 yum.repos.d]# gluster volume create kjt replica 2 web01:/data/br1 web02:/data/br1 force
volume create: kjt: success: please start the volume to access data
### 查看卷信息
[root@web01 yum.repos.d]# gluster volume list
kjt

[root@web01 yum.repos.d]# gluster volume info kjt
 Volume Name: kjt
Type: Replicate
Volume ID: 780003ac-5d92-4cc8-a85d-3ac8472eb2fc
Status: Created
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: web01:/data/br1
Brick2: web02:/data/br1
Options Reconfigured:
cluster.granular-entry-heal: on
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off


Volume Name: kjt                                # 卷的名称是 kjt
Type: Replicate                                # 卷的类型是 "复制卷",数据在多个副本间复制存储
Volume ID: 780003ac-5d92-4cc8-a85d-3ac8472eb2fc # 卷的唯一标识符 (UUID)
Status: Created                                # 卷的状态是 "已创建"
Snapshot Count: 0                              # 当前没有快照
Number of Bricks: 1 x 2 = 2                    # 卷由 1 个副本集组成,每个副本集有 2 个 bricks,总共 2 个 bricks
Transport-type: tcp                            # 使用 TCP 协议进行网络传输
Bricks:                                        # 显示卷的 bricks 列表
Brick1: web01:/data/br1                        # web01 服务器上的 /data/br1 目录作为第一个 brick
Brick2: web02:/data/br1                        # web02 服务器上的 /data/br1 目录作为第二个 brick
Options Reconfigured:                          # 显示已重新配置的卷选项
cluster.granular-entry-heal: on                # 启用细粒度条目修复,提高修复受损数据的性能
storage.fips-mode-rchecksum: on                # 启用 FIPS 模式下的校验和
transport.address-family: inet                 # 使用 IPv4 (inet) 进行网络通信
nfs.disable: on                                # 禁用 NFS 访问
performance.client-io-threads: off             # 禁用客户端 I/O 线程

image-20240925215559461

image-20240925215625627

# 打开GlusterFs磁盘限额,此处限制大小是10G,也可以不用设置.
## 开启卷
[root@web01 yum.repos.d]# gluster volume start kjt  
volume start: kjt: success
## 再启用配额功能
[root@web01 yum.repos.d]# gluster volume quota kjt enable
volume quota : success
## 配额10g
[root@web01 yum.repos.d]# gluster volume quota kjt limit-usage / 10GB
volume quota : success
[root@web01 yum.repos.d]# gluster volume status kjt
Status of volume: kjt
Gluster process                             TCP Port  RDMA Port  Online  Pid
------------------------------------------------------------------------------
Brick web01:/data/br1                       49152     0          Y       40980
Brick web02:/data/br1                       49152     0          Y       15803
Self-heal Daemon on localhost               N/A       N/A        Y       40997
Quota Daemon on localhost                   N/A       N/A        Y       41041
Self-heal Daemon on web02                   N/A       N/A        Y       15820
Quota Daemon on web02                       N/A       N/A        Y       15846
 
Task Status of Volume kjt
------------------------------------------------------------------------------
There are no active volume tasks



客户端操作

Glusterfs client端有三种客户端使用方式:Native mount,NFS,Samba
---此处使用Native mount挂载gluster volume 到web01和web02节点的本地目录/abc下
## 安装
yum install glusterfs glusterfs-fuse attr -y
## 挂载
[root@lb02 ~]# echo 172.16.1.7   web01 >> /etc/hosts
[root@lb02 ~]# echo 172.16.1.8   web02 >> /etc/hosts

[root@lb02 ~]# mount -t glusterfs web01:kjt /abc 
#### 检测
[root@lb02 ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 979M     0  979M   0% /dev
tmpfs                    991M     0  991M   0% /dev/shm
tmpfs                    991M  9.6M  981M   1% /run
tmpfs                    991M     0  991M   0% /sys/fs/cgroup
/dev/mapper/centos-root  8.5G  1.8G  6.8G  21% /
/dev/sda1                497M  131M  367M  27% /boot
tmpfs                    199M     0  199M   0% /run/user/0
web01:kjt                 10G     0   10G   0% /abc
#### 设置开机自动挂载
vim /etc/fstab

web01:kjt  /abc glusterfs  defaults 0 0

检测

在 客户端上创建10个文件    
其他两个服务端都有文件  实现了多点
至此,GFS复制卷创建完成,gfs有多种卷方式,以后使用在研究...

image-20240925223049747

image-20240925223130668