【运维】GlusterFS 分布式文件系统

简介: GlusterFS 分布式文件系统


  PB级容量、高可用、读写性能、基于文件系统级别共享、分布式、无metadata(元数据)的存储方式。PB级容量、高可用、读写性能、基于文件系统级别共享、分布式、无metadata(元数据)的存储方式。

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

 

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

volume:多个brick的逻辑集合;

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

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

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

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

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

 

GlusterFS外部架构

image.png

GlusterFS内部架构

image.png


一、配置安装服务

1.使用阿里的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.配置挂载磁盘

image.png

每个节点添加三块磁盘,大小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:复制式卷,类似RAID1replica数等于卷中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个测试文件,查看brickgv目录,文件数量为完整的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

 

 

 

五、参考命令

image.png

集群节点操作

#添加节点

gluster peer probe <主机名或IP>

#删除节点

gluster peer detach <主机名或IP>

#查看节点连接状态

gluster peer status

#列出所有节点

gluster pool list

 

 

image.png

卷操作

#查看卷信息

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 副本卷数] <brick1(格式-IP或主机名:/存储目录)> <brick2>

#添加brick到卷,条带卷和副本卷添加brick需要添加的数量是之前的整数倍

gluster volume add-brick <卷名> <brick卷(格式-IP或主机名:/存储目录)>

#移除brick到卷,条带卷和副本卷添加brick需要移除的数量是之前的整数倍

gluster volume remove-brick <卷名> <brick卷(格式-IP或主机名:/存储目录)>

 

 

相关文章
|
5月前
|
存储 缓存 Linux
GlusterFs分布式文件系统
GlusterFs分布式文件系统
96 8
|
4月前
|
运维 Cloud Native 容灾
核心系统转型问题之云原生分布式核心运维成本如何降低
核心系统转型问题之云原生分布式核心运维成本如何降低
|
7月前
|
消息中间件 运维 Linux
运维最全Linux 命令大全之scp命令_linux scp 指令(1),2024年最新从消息中间件看分布式系统的多种套路
运维最全Linux 命令大全之scp命令_linux scp 指令(1),2024年最新从消息中间件看分布式系统的多种套路
|
运维 监控
分布式运维监控平台WGCLOUD 之 【常用命令笔记】
WGCLOUD 在 v3.4.9版本 新增了一个模块【常用命令笔记】
|
存储 网络协议 Linux
CentOS 7.6 部署 GlusterFS 分布式存储系统
CentOS 7.6 部署 GlusterFS 分布式存储系统
486 0
|
运维 监控 网络协议
【运维知识进阶篇】zabbix5.0稳定版详解7(zabbix分布式监控:使用场景+功能详解+快速部署+基本使用)
【运维知识进阶篇】zabbix5.0稳定版详解7(zabbix分布式监控:使用场景+功能详解+快速部署+基本使用)
573 0
|
运维 负载均衡 分布式数据库
《PolarDB-X开源分布式数据库实战进阶》——PolarDB-X的部署与运维(8)
《PolarDB-X开源分布式数据库实战进阶》——PolarDB-X的部署与运维(8)
173 1
|
存储 大数据
大数据数据存储的分布式文件系统的GlusterFS
在分布式文件系统 GlusterFS 中,数据的存储和管理是基于块的分布式存储。
86 0
下一篇
DataWorks