GlusterFS分布式文件系统入门指南,多个技能多条路,大文件存储就是这么简单

10 篇文章 0 订阅
2 篇文章 0 订阅

GlusterFS (Gluster File System) 是一个开源的分布式文件系统,通熟点讲就是将多个服务器上分散的多个磁盘通过网络协议进行合并,组成一块超大号的磁盘。

官方文档:
https://docs.gluster.org/en/latest/

简介

开始搭建前介绍一些术语知识:

名称解释
brick最基本的存储单元
volume存储卷,在逻辑上由N个 bricks 组成
gluster管理存储的程序,对 glusterfs 中的资源进行查看及操作
glusterd服务端进程,用来加载多个 bricks 并开启相关网络端口供客户端连接
node安装有 glusterd 守护进程的主机,提供多个 bricks 存储

整个架构来说比较简单:

  • 主机上安装glusterfs服务端程序glusterd

  • 将多个主机通过gluster命令将其组成一个集群

  • 在每个主机上创建若干相关的目录

  • 通过gluster将相关节点及目录构建出一个存储卷并启用

  • 在任意安装有支持glusterfs的主机上挂载存储卷即可使用

环境

  • centos 7.8.2003

  • glusterfs 9.3

主机备注
10.255.129.100client 用于挂载存储卷的客户机
10.255.129.101node1 节点1 服务机
10.255.129.102node2 节点2 服务机
10.255.129.103node3 节点3 服务机

安装

在有网的情况下,安装相对比较简单。

建议配置中科大的源进行加速:https://mirrors.ustc.edu.cn/help/centos.html

sed -e 's|^mirrorlist=|#mirrorlist=|g' \
         -e 's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.ustc.edu.cn/centos|g' \
         -i.bak \
         /etc/yum.repos.d/CentOS-Base.repo
yum makecache

默认源上其实是已经有 glusterfs 相关软件包的,只是相对较旧,我们这里要安装较新一点的版本。

https://wiki.centos.org/SpecialInterestGroup(2f)Storage.html

更新软件源:

yum install -y centos-release-gluster
yum info glusterfs
Name        : glusterfs
Arch        : x86_64
Version     : 9.3
Release     : 1.el7
Size        : 647 k
Repo        : centos-gluster9/7/x86_64
Summary     : Distributed File System
URL         : http://docs.gluster.org/
License     : GPLv2 or LGPLv3+
Description : GlusterFS is a distributed file-system capable of scaling to several
            : petabytes. It aggregates various storage bricks over TCP/IP interconnect
            : into one large parallel network filesystem. GlusterFS is one of the
            : most sophisticated file systems in terms of features and extensibility.
            : It borrows a powerful concept called Translators from GNU Hurd kernel.
            : Much of the code in GlusterFS is in user space and easily manageable.
            : 
            : This package includes the glusterfs binary, the glusterfsd daemon and the
            : libglusterfs and glusterfs translator modules common to both GlusterFS server
            : and client framework.

节点安装

yum install glusterfs-server -y
systemctl enable glusterd
systemctl start glusterd
systemctl status glusterd

客户机安装

挂载 glusterfs 只需要安装 glusterfs-fuse 即可:

yum install -y glusterfs-fuse

至此,客户机及服务机都安装完毕了,接下来开始配置及创建卷并使用吧。

简单使用

三台节点虽然安装并启动了glusterfs服务,但是还都是独立的,没有构成一个存储集群,使用前,首先将他们组成一个集群。

在其中任何一台节点机器上操作即可:我们这里在 101 机器上将 102, 103 加入进来,只需加入一次。

gluster peer probe 10.255.129.102
gluster peer probe 10.255.129.103

gluster peer status

这样,我们就组建了一个有3个节点的glusterfs集群了。

有了集群还需要创建卷才能使用,在 101-103 每台机器上创建一个目录:/data/gfs/vol1

# 3台节点机器均创建此目录
mkdir -p /data/gfs/vol1

# 在其中1台节点机器上执行
# 创建名字叫gv1包含3个brick的卷,使用force是因为默认不允许root用户创建卷
gluster volume create gv1 10.255.129.101:/data/gfs/vol1 10.255.129.102:/data/gfs/vol1 10.255.129.103:/data/gfs/vol1 force
# 连续的主机可以用下面的命令简单操作
# gluster volume create gv1 10.255.129.10{1..3}:/data/gfs/vol1 force

创建好的卷,可以查看信息,确认无误,可以将其启动。

# 查看所有卷信息,gv1状态是Created
gluster volume info
 
Volume Name: gv1
Type: Distribute
Volume ID: 7f5ce32d-d984-4d14-a39a-fc38f4936c80
Status: Created
Snapshot Count: 0
Number of Bricks: 3
Transport-type: tcp
Bricks:
Brick1: 10.255.129.101:/data/gfs/vol1
Brick2: 10.255.129.102:/data/gfs/vol1
Brick3: 10.255.129.103:/data/gfs/vol1
Options Reconfigured:
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on
# 启动gv1卷
gluster volume start gv1
volume start: gv1: success
# 再次查看卷信息,此时的状态是Started
gluster volume info gv1
 
Volume Name: gv1
Type: Distribute
Volume ID: 7f5ce32d-d984-4d14-a39a-fc38f4936c80
Status: Started

这样一个最简单的共享卷就创建启动成功了,接下来用客户机挂载测试。

在 100 机器创建一个挂载点,并挂载刚才的gv1卷:

mkdir -p /data/mnt-gv1
# 将gv1挂载到/data/mnt-gv1
mount -t glusterfs 10.255.129.101:/gv1 /data/mnt-gv1
# 查看挂载情况
df -Th
Filesystem              Type            Size  Used Avail Use% Mounted on
devtmpfs                devtmpfs        7.8G     0  7.8G   0% /dev
tmpfs                   tmpfs           7.8G     0  7.8G   0% /dev/shm
tmpfs                   tmpfs           7.8G   18M  7.8G   1% /run
/dev/mapper/centos-root xfs             296G  4.9G  291G   2% /
10.255.129.101:/gv1     fuse.glusterfs  887G   21G  866G   3% /data/mnt-gv1

可以看到 /data/mnt-gv1 成功挂载了 gv1 卷,存储大小为 101-103 机器的和。

切换到 /data/mnt-gv1 目录,创建 30 个文件:

cd /data/mnt-gv1
for i in `seq -w 1 30`; do echo test-$i > test-$i; done
ls
test-01  test-03  test-05  test-07  test-09  test-11  test-13  test-15  test-17  test-19  test-21  test-23  test-25  test-27  test-29
test-02  test-04  test-06  test-08  test-10  test-12  test-14  test-16  test-18  test-20  test-22  test-24  test-26  test-28  test-30

我们分别看一下3台主机上对应的目录:

# 101
ls /data/gfs/vol1
test-02  test-11  test-12  test-13  test-18  test-26  test-28
# 102
ls /data/gfs/vol1
test-06  test-08  test-14  test-16  test-29
# 103
ls /data/gfs/vol1
test-01  test-03  test-04  test-05  test-07  test-09  test-10  test-15  test-17  test-19  test-20  test-21  test-22  test-23  test-24  test-25  test-27  test-30

30个文件随机分配到了3台主机上。

卷类型

上面的简单使用部分创建的是最简单的存储卷:Distributed Glusterfs Volume, 下面就一起来认识一下各种卷类型吧。

Distributed

分散存储,将文件分布到所有 brick server,只是扩大了磁盘空间,不具备容错能力。一个文件只会在其中一个 brick 上,这个 brick 坏掉,这个文件就会丢失。

语法:

gluster volume create NEW-VOLNAME [transport [tcp | rdma | tcp,rdma]] NEW-BRICK... [force]

示例:

gluster volume create test-volume server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4

Replicated

复制存储,文件同步复制到多个 brick 上,具有容错能力,写性能下降,读性能提升。不具备扩容的特性,每个 brick 上存储所有的文件,例如:副本为2的卷,只能用到俩个 brick。

限制:replica count == brick count

语法:

gluster volume create NEW-VOLNAME [replica COUNT] [transport [tcp |rdma | tcp,rdma]] NEW-BRICK... [force]

示例:

mkdir -p /data/gfs/vol2
# 数量不合法无法创建
gluster volume create gv2 replica 2 10.255.129.10{1..3}:/data/gfs/vol2 force
number of bricks is not a multiple of replica count
# 改为3就可以了
gluster volume create gv2 replica 3 10.255.129.10{1..3}:/data/gfs/vol2 force
volume create: gv2: success: please start the volume to access data

gluster volume info gv2
 
Volume Name: gv2
Type: Replicate
Volume ID: f894cdf6-be0d-4d93-b4f3-45f6f3a9e8da
Status: Created
Snapshot Count: 0
Number of Bricks: 1 x 3 = 3
Transport-type: tcp
Bricks:
Brick1: 10.255.129.101:/data/gfs/vol2
Brick2: 10.255.129.102:/data/gfs/vol2
Brick3: 10.255.129.103:/data/gfs/vol2
Options Reconfigured:
cluster.granular-entry-heal: on
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off

Distributed Replicated

分散且复制存储,兼具 distribute 和 replica 卷的特点。

限制:replica count x N(>1) == brick count

语法:

gluster volume create NEW-VOLNAME [replica COUNT] [transport [tcp | rdma | tcp,rdma]] NEW-BRICK... [force]

示例:

mkdir /data/gfs/vol3-1
mkdir /data/gfs/vol3-2
gluster volume create gv3 replica 3 10.255.129.10{1..3}:/data/gfs/vol3-{1,2} force
volume create: gv3: success: please start the volume to access data
gluster volume info gv3
 
Volume Name: gv3
Type: Distributed-Replicate
Volume ID: a3a1fdb5-b38d-4266-b168-cc55279ec6c3
Status: Created
Snapshot Count: 0
Number of Bricks: 2 x 3 = 6
Transport-type: tcp
Bricks:
Brick1: 10.255.129.101:/data/gfs/vol3-1
Brick2: 10.255.129.101:/data/gfs/vol3-2
Brick3: 10.255.129.102:/data/gfs/vol3-1
Brick4: 10.255.129.102:/data/gfs/vol3-2
Brick5: 10.255.129.103:/data/gfs/vol3-1
Brick6: 10.255.129.103:/data/gfs/vol3-2
Options Reconfigured:
cluster.granular-entry-heal: on
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off

Dispersed

拆分存储,之前应该叫 stripe 现在新版叫 Disperse, 就是把一个文件通过编码分割成多块,存储到多个 brick 上,并且留有多余的一部分(称为纠错块)。

此类型可以最大化利用磁盘空间达到容灾的效果,举个例子:如果10M的文件用 Replicated 类型,需要至少占用20M空间,而使用 Dispersed 可以只需要15M。

此类型的 brick 数量至少为3,也就是 2 + 1, 例如 10M 的文件会分成 2 x 5M 存在 2 个 brick 上,再计算出一个 5M 的纠错块存到第3个 brick 上,这样就可以做到丢失任意一块,仍然可以得到原文件。

关于纠错块请参考:http://www.yunweipai.com/17037.html

语法:

gluster volume create test-volume [disperse [<COUNT>]] [disperse-data <COUNT>] [redundancy <COUNT>] [transport tcp | rdma | tcp,rdma] NEW-BRICK... [force]

示例:

mkdir -p /data/gfs/vol4
gluster volume create gv4 disperse 3 redundancy 1 10.255.129.10{1..3}:/data/gfs/vol4 force
volume create: gv4: success: please start the volume to access data
gluster volume info gv4
 
Volume Name: gv4
Type: Disperse
Volume ID: 876a54f9-4a2f-4c94-ad98-43e5681eb0f9
Status: Created
Snapshot Count: 0
Number of Bricks: 1 x (2 + 1) = 3
Transport-type: tcp
Bricks:
Brick1: 10.255.129.101:/data/gfs/vol4
Brick2: 10.255.129.102:/data/gfs/vol4
Brick3: 10.255.129.103:/data/gfs/vol4
Options Reconfigured:
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on

Distributed Dispersed

拆分分散存储,达到扩容的目的。

语法:同Dispersed, 数量是单个Dispersed的倍数

gluster volume create test-volume [disperse [<COUNT>]] [disperse-data <COUNT>] [redundancy <COUNT>] [transport tcp | rdma | tcp,rdma] NEW-BRICK... [force]

示例:

mkdir -p /data/gfs/vol5-{1,2}
gluster volume create gv5 disperse 3 redundancy 1 10.255.129.10{1..3}:/data/gfs/vol5-{1,2} force
volume create: gv5: success: please start the volume to access data
gluster volume info gv5
 
Volume Name: gv5
Type: Distributed-Disperse
Volume ID: f5e695fe-f535-43cf-a851-5d045af7d313
Status: Created
Snapshot Count: 0
Number of Bricks: 2 x (2 + 1) = 6
Transport-type: tcp
Bricks:
Brick1: 10.255.129.101:/data/gfs/vol5-1
Brick2: 10.255.129.101:/data/gfs/vol5-2
Brick3: 10.255.129.102:/data/gfs/vol5-1
Brick4: 10.255.129.102:/data/gfs/vol5-2
Brick5: 10.255.129.103:/data/gfs/vol5-1
Brick6: 10.255.129.103:/data/gfs/vol5-2
Options Reconfigured:
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on

常用操作

gluster cli 可以直接查看相关帮助,也可以查阅文档:https://docs.gluster.org/en/latest/CLI-Reference/cli-main/

gluster help
 peer help                - display help for peer commands
 volume help              - display help for volume commands
 volume bitrot help       - display help for volume bitrot commands
 volume quota help        - display help for volume quota commands
 snapshot help            - display help for snapshot commands
 global help              - list global commands

启/停/删除卷

gluster volume start volume-name
gluster volume stop volume-name
gluster volume delete volume-name

扩展/收缩卷

gluster volume add-brick volume-name brick...  
gluster volume remove-brick volume-name brick... 

扩展或收缩卷时,也要按照卷的类型,加入或减少的brick个数必须满足相应的要求。

迁移卷

主要完成数据在卷之间的在线迁移

gluster volume replace-brick volume-name old-brick new-brick [start|pause|abort|status|commit]  
#迁移需要完成一系列的事务,假如我们准备将卷中的brick3替换为brick5  

#启动迁移过程  
$gluster volume replace-brick volume-name node3:/exp3 node5:/exp5 start  
#暂停迁移过程  
$gluster volume replace-brick volume-name node3:/exp3 node5:/exp5 pause  
#中止迁移过程  
$gluster volume replace-brick volume-name node3:/exp3 node5:/exp5 abort  
#查看迁移状态  
$gluster volume replace-brick volume-name node3:/exp3 node5:/exp5 status  
#迁移完成后提交完成  
$gluster volume replace-brick volume-name node3:/exp3 node5:/exp5 commit   

均衡卷

当对卷进行了扩展或收缩后,需要对卷的数据进行重新均衡。

gluster volume rebalane volume-name [start|stop|status]

卷配额

可以限制卷的大小。

gluster volume quota volume-name enable
gluster volume quota volume-name disable
gluster volume quota volume-name limit-usage DIR HARD_LIMIT
gluster volume quota volume-name list
gluster volume quota volume-name list DIR
gluster volume quota volume-name remove DIR

# eg.
gluster volume quota test-volume limit-usage /data 10GB

gluster volume quota test-volume list
/data    10 GB       6 GB
/data1   10 GB       4 GB
gluster volume quota test-volume list /data
/data    10 GB       6 GB
gluster volume quota test-volume remove /data
Usage limit set on /data is removed

副本自愈

gluster volume heal volume-name #只修复有问题的文件  
gluster volume heal volume-name full #修复所有文件  
gluster volume heal volume-name info #查看自愈详情  
gluster volume heal volume-name info [healed|heal-failed|split-brain]

开机挂载

编辑 /etc/fstab 增加配置

# HOSTNAME-OR-IPADDRESS:/VOLNAME MOUNTDIR glusterfs defaults,_netdev,log-level=WARNING,log-file=/var/log/gluster.log 0 0
10.255.129.101:/gv1 /data/mnt-gv1 glusterfs defaults,_netdev,log-level=WARNING,log-file=/var/log/gluster.log 0 0

总结

GlusterFS 很好用,也很强大,还有很多特性可供深入探究,本文仅涉及最基本的使用,有兴趣的请继续深入实践吧。

好了,今天的分享就到这里,欢迎关注,点赞,收藏,评论。很期待和大家的一起成长。

注:公&号:新质程序猿,可以找到我,欢迎链接闲侃。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值