云计算-构建GlusterFS分布式存储系统

嚯嚯嚯www 发表于 2022/05/19 13:50:18 2022/05/19
【摘要】 GlusterFS是一个开源分布式文件系统,采用的时是无中心架构,可以实现横向扩展。以资源池、集群式的方式提供NAS存储系统,也有多种不同的卷类型。PB级容量、高可用、读写性能、基于文件系统级别共享、分布式、无metadata(元数据)的存储方式。 没有中心节点,所有节点全部平等。GlusterFS配置方便,稳定性好,可轻松达到PB级容量,数千个节点。GlusterFS有以下几个基本概念:b...

GlusterFS是一个开源分布式文件系统,采用的时是无中心架构,可以实现横向扩展。以资源池、集群式的方式提供NAS存储系统,也有多种不同的卷类型。PB级容量、高可用、读写性能、基于文件系统级别共享、分布式、无metadata(元数据)的存储方式。 没有中心节点,所有节点全部平等。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。

一、配置安装服务

使用阿里的yum源安装gluster4.1版本

[root@glusterfs1 yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
image.png
image.png

Glusterfs1节点和glusterfs2节点安装服务,配置服务启动

[root@glusterfs1 ~]# yum -y install centos-release-gluster41
[root@glusterfs1 ~]# yum -y install glusterfs-server
[root@glusterfs1 ~]# systemctl restart glusterd
[root@glusterfs1 ~]# systemctl enable glusterd



[root@glusterfs2 ~]# yum -y install centos-release-gluster41
[root@glusterfs2 ~]# yum -y install glusterfs-server
[root@glusterfs2 ~]# systemctl restart glusterd
[root@glusterfs2 ~]# systemctl enable glusterd

image.png

二、配置GlusterFS

1.配置挂载磁盘

每个节点添加三块磁盘,大小5G

image.png

#对三块磁盘各创建1个分区

[root@glusterfs1 ~]# fdisk /dev/sdb
[root@glusterfs1 ~]# fdisk /dev/sdc
[root@glusterfs1 ~]# fdisk /dev/sdd

image.png

#将分区进行格式化,创建分步存储数据源挂载点文件夹,将分区分别挂载

[root@glusterfs1 ~]# mkfs.xfs /dev/sdb1
[root@glusterfs1 ~]# mkfs.xfs /dev/sdc1
[root@glusterfs1 ~]# mkfs.xfs /dev/sdd1
[root@glusterfs1 ~]# mkdir -p /data/brick{1..3}
[root@glusterfs1 ~]# mount /dev/sdb1 /data/brick1
[root@glusterfs1 ~]# mount /dev/sdc1 /data/brick2
[root@glusterfs1 ~]# mount /dev/sdd1 /data/brick3
[root@glusterfs1 ~]# df -h|grep brick
/dev/sdb1            5.0G   33M  5.0G    1% /data/brick1
/dev/sdc1            5.0G   33M  5.0G    1% /data/brick2
/dev/sdd1            5.0G   33M  5.0G    1% /data/brick3

image.png

2.创建主机信任对等体

任意一台节点上配置

[root@glusterfs1 ~]# gluster peer probe glusterfs1
peer probe: success. Probe on localhost not needed
[root@glusterfs1 ~]# gluster peer probe glusterfs2
peer probe: success. 
[root@glusterfs1 ~]# gluster peer status
Number of Peers: 1

Hostname: glusterfs2
Uuid: 36515c7d-2b84-4f37-9ecf-d738887929aa
State: Peer in Cluster (Connected)

配置分布卷
Distributed:分布式卷,文件通过哈希随机算法分步到由bricks组成的卷上

3.创建配置glusterfs分布卷

#创建存储目录
[root@glusterfs1 ~]# mkdir -p /data/brick1/gv1
#创建分布卷

[root@glusterfs1 ~]# gluster volume create gv1 glusterfs1:/data/brick1/gv1/ glusterfs2:/data/brick1/gv1/
volume create: gv1: success: please start the volume to access data

#启动分布卷

[root@glusterfs1 ~]# gluster volume start gv1
volume start: gv1: success

#查看gv1状态

[root@glusterfs1 ~]# gluster volume status gv1
Status of volume: gv1
Gluster process                             TCP Port  RDMA Port  Online  Pid
------------------------------------------------------------------------------
Brick glusterfs1:/data/brick1/gv1           49152     0          Y       25156
Brick glusterfs2:/data/brick1/gv1           49152     0          Y       24611
 
Task Status of Volume gv1
------------------------------------------------------------------------------
There are no active volume tasks

#查看vg1信息

[root@glusterfs1 ~]# gluster volume info gv1
Volume Name: gv1
Type: Distribute
Volume ID: 6cee1268-6401-4f0b-9dde-8e3f0e45cb74
Status: Started
Snapshot Count: 0
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: glusterfs1:/data/brick1/gv1
Brick2: glusterfs2:/data/brick1/gv1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on

测试

#挂载gv1到目录

[root@glusterfs1 ~]# mkdir /opt/gv1
[root@glusterfs1 ~]# mount -t glusterfs glusterfs1:/gv1 /opt/gv1
[root@glusterfs1 ~]# df -h |grep gv1
glusterfs1:/gv1       10G  167M  9.9G    2% /opt/gv1  #卷大小为两个节点容量和5G+5G

#测试文件分布存储
在挂载了gv1卷的目录下,创建10个测试文件
image.png

进入glusterfs1节点的数据存储目录查看文件存储情况
image.png

进入glusterfs2节点的数据存储目录查看文件存储情况
image.png

将gv1分布卷再挂载到glusterfs2节点,可以看到同一分布卷的文件共享存储
image.png
image.png

三、配置复制卷

Replicated:复制式卷,类似RAID1,replica数等于卷中brick存储服务器数量

#创建存储目录
[root@glusterfs1 ~]# mkdir -p /data/brick1/gv2
#创建分布式卷,副本数为2,会提示出发生脑裂警告,输入Y继续即可

[root@glusterfs1 ~]# gluster volume create gv2 replica 2 glusterfs1:/data/brick1/gv2 glusterfs2:/data/brick1/gv2
Replica 2 volumes are prone to split-brain. Use Arbiter or Replica 3 to avoid this. See: http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/.
Do you still want to continue?
 (y/n) y
volume create: gv2: success: please start the volume to access data

#启动卷

[root@glusterfs1 ~]# gluster volume start gv2
volume start: gv2: success

#查看gv2状态

[root@glusterfs1 ~]# gluster volume status gv2
Status of volume: gv2
Gluster process                             TCP Port  RDMA Port  Online  Pid
------------------------------------------------------------------------------
Brick glusterfs1:/data/brick1/gv2           49153     0          Y       100756
Brick glusterfs2:/data/brick1/gv2           49153     0          Y       62646
Self-heal Daemon on localhost               N/A       N/A        Y       100805
Self-heal Daemon on glusterfs2              N/A       N/A        Y       62669
 
Task Status of Volume gv2
------------------------------------------------------------------------------
There are no active volume tasks

#查看gv2信息

[root@glusterfs1 ~]# gluster volume info gv2
Volume Name: gv2
Type: Replicate
Volume ID: 5c8ccf1a-8808-49de-b36f-74e4a2a7f215
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: glusterfs1:/data/brick1/gv2
Brick2: glusterfs2:/data/brick1/gv2
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off

测试

#创建挂载点目录,挂载gv2,可见容量大小为一半(5G+5G)/2

[root@glusterfs1 ~]# mkdir -p /opt/gv2
[root@glusterfs1 ~]# mount -t glusterfs glusterfs1:/gv2 /opt/gv2
[root@glusterfs1 ~]# df -h|grep gv2
glusterfs1:/gv2      5.0G   84M  5.0G    2% /opt/gv2

创建10个测试文件,查看brick下gv目录,文件数量为完整的10个
image.png

在glusterfs2节点查看文件数量,也是完整的10个,可见两个节点存储的文件为相同的
image.png

四、配置条带卷

Striped:条带式卷,类似RAID0,文件被分为数据块,并发粒度为数据块,大文件性能好

[root@glusterfs1 ~]# gluster volume create gv3 stripe 2 glusterfs1:/data/brick3/gv3 glusterfs2:/data/brick3/gv3
volume create: gv3: success: please start the volume to access data

[root@glusterfs1 ~]# gluster volume start gv3
volume start: gv3: success

[root@glusterfs1 ~]# gluster volume status gv3
Status of volume: gv3
Gluster process                             TCP Port  RDMA Port  Online  Pid
------------------------------------------------------------------------------
Brick glusterfs1:/data/brick3/gv3           49154     0          Y       129779
Brick glusterfs2:/data/brick3/gv3           49154     0          Y       77272
 
Task Status of Volume gv3
------------------------------------------------------------------------------
There are no active volume tasks
 
[root@glusterfs1 ~]# gluster volume info gv3
Volume Name: gv3
Type: Stripe
Volume ID: cdee0ae8-e821-44a3-8bb7-71671e3f108a
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: glusterfs1:/data/brick3/gv3
Brick2: glusterfs2:/data/brick3/gv3
Options Reconfigured:
transport.address-family: inet
nfs.disable: on

测试

#创建挂载点文件夹,挂载gv3,可用容量为5G+5G

[root@glusterfs1 ~]# mkdir /opt/gv3
[root@glusterfs1 ~]# mount -t glusterfs glusterfs1:/gv3 /opt/gv3
[root@glusterfs1 ~]# df -h|grep gv3
glusterfs1:/gv3       10G  167M  9.9G    2% /opt/gv3

#在挂载文件夹里创建一个大小为10M一个20M的测试文件

[root@glusterfs1 ~]# dd if=/dev/zero bs=1024 count=10000 of=/opt/gv3/10M.file
记录了10000+0 的读入
记录了10000+0 的写出
10240000字节(10 MB)已复制,0.883662 秒,11.6 MB/秒
[root@glusterfs1 ~]# dd if=/dev/zero bs=1024 count=20000 of=/opt/gv3/20M.file
记录了20000+0 的读入
记录了20000+0 的写出
20480000字节(20 MB)已复制,1.5851 秒,12.9 MB/秒

#分别查看glusterfs1节点和glusterfs2节点,10M的文件以5M大小文件块分别存储在两个节点上,20M文件同理

[root@glusterfs1 ~]# ll -h /data/brick3/gv3/
总用量 15M
-rw-r--r-- 2 root root 4.9M 7月  25 04:51 10M.file
-rw-r--r-- 2 root root 9.8M 7月  25 04:51 20M.file

[root@glusterfs2 ~]# ll -h /data/brick3/gv3/
总用量 15M
-rw-r--r-- 2 root root 4.9M 7月  25 04:51 10M.file
-rw-r--r-- 2 root root 9.8M 7月  25 04:51 20M.file

五、参考命令

集群节点操作:

#添加节点
gluster peer probe <主机名或IP>
#删除节点
gluster peer detach <主机名或IP>
#查看节点连接状态
gluster peer status
#列出所有节点
gluster pool list

卷操作:

#查看卷信息
gluster volume info <卷名或all>
#列出所有卷
gluster volume list 
#查看卷状态
gluster volume stat<卷名>
#启动/停止/删除卷
gluster volume start/stop/delete  <卷名>
#修复卷
gluster volume heal <卷名> //只修复有问题文件
gluster volume heal <卷名> full //修复所有文件
gluster volume heal <卷名> info //查看修复自愈详情
#创建卷
gluster volume create <新卷名>  [stripe 条带卷数] [replica 副本卷数] <brick卷1(格式-IP或主机名:/存储目录)> <brick卷2>
#添加brick到卷,条带卷和副本卷添加brick需要添加的数量是之前的整数倍
gluster volume add-brick <卷名> <brick卷(格式-IP或主机名:/存储目录)>
#移除brick到卷,条带卷和副本卷添加brick需要移除的数量是之前的整数倍
gluster volume remove-brick <卷名> <brick卷(格式-IP或主机名:/存储目录)>
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。