介绍
PB级容量、高可用、读写性能、基于文件系统级别共享、分布式、无metadata(元数据)的存储方式。
GlusterFS(GNU ClusterFile System)是一种全对称的开源分布式文件系统,所谓全对称是指GlusterFS采用弹性哈希算法,没有中心节点,所有节点全部平等。GlusterFS配置方便,稳定性好,可轻松达到PB级容量,数千个节点。
2011年被红帽收购,之后推出了基于GlusterFS的Red Hat Storage Server,增加了针对KVM的许多特性,可用作为KVM存储image存储集群,也可以为LB或HA提供存储。
概念
birck:GlusterFS的基本元素,以节点服务器目录形式展现;
volume:多个brick的逻辑集合;
metadata:元数据,用于描述文件、目录等的信息;
self-heal:用于后台运行检测副本卷中文件和目录的不一致性并解决这些不一致;
FUSE:Filesystem Userspace是一个可加载的内核模块,其支持非特权用户创建自己的文件系统而不需要修改内核代码通过在用户空间运行文件系统的代码通过FUSE代码与内核进行桥接;
Gluster Server:数据存储服务器,即组成GlusterFS存储集群的节点;
Gluster Client:使用GlusterFS存储服务的服务器,如KVM、OpenStack、LB RealServer、HA node。
内部架构
GlusterFS是模块化堆栈式的架构设计,如上图所示。模块称为Translator是GlusterFS提供的一种强大机制,借助这种良好定义的接口可以高效简便地扩展文件系统的功能。
1、服务端与客户端模块接口是兼容的,同一个translator可同时在两边加载。
2、GlusterFS中所有的功能都是通过translator实现,如Cluster, Storage,Performance, Protocol, Features等。
3、重点是GlusterFSClient端。
GlusterFS部署
环境介绍:
系统:Ubuntu20.04
如果是centos,关闭selinux,防火墙开放24007
相互解析:
所有机器必须时间同步:
apt install chrony
cat /etc/hosts
172.16.2.109 node1
172.16.2.110 node2
服务端部署:
安装:
ubuntu:
apt install -y glusterfs-server
systemctl enable glusterd --now
centos:
# yum install centos-release-gluster
# yum -y install glusterfs glusterfs-server glusterfs-fuse
创建集群
启动:
systemctl start glusterd
创建集群
# 任意节点上执行一下操作,向集群中添加节点,不需要添加自己,只需要添加其他节点即可:
# 配置节点之间的信任池
# 节点一操作
gluster peer probe node2
# 此处使用的是主机名,请自行配置hosts文件
常用命令
# 从集群中去除节点(该节点中不能存在卷中正在使用的brick)
gluster peer detach node3
# 查看集群状态:
gluster peer status
图片是生产环境截图
所有节点,设置GlusterFS挂载卷
mkdir -p /data/disk1
分布卷
分布式卷也成为哈希卷,多个文件以文件为单位在多个brick上,使用哈希算法随机存储。默认模式,近似于RAID0,文件没有分片,文件根据hash算法写入各个节点的硬盘上
应用场景:大量小文件
优点:读/写性能好,容量大
缺点:如果存储或服务器故障,该brick上的数据将丢失
不指定卷类型,默认是分布式卷
brick数量没有限制
创建分布式卷:
gluster volume create gv0 node1:/data/disk1 node2:/data/disk1
# gluster volume create gv0 172.16.2.109:/data/disk1 172.16.2.110:/data/disk1
# volume_name: 卷名,这里设置的是gv0
# node1: 节点名,也可以用ip地址
# /export/brick1: 节点目录,这个目录最好是一个单独分区 (分区类型可以是逻辑卷的方式,这样易于操作系统级别的存储空间扩展)
启动卷:
gluster volume start gv0
查看卷信息
gluster volume info [gv0]
# 指定卷名字,只查单个卷,不指定,查看全部
Volume Name: gv0
Type: Distribute
Volume ID: 2e37b934-6b56-4e35-bcaa-e53b0010f9b6
Status: Started
Snapshot Count: 0
Number of Bricks: 28
Transport-type: tcp
Bricks:
Brick1: store-8-68:/data/disk1
Brick2: store-8-68:/data/disk2
Brick3: store-8-54:/data/disk1
Brick4: store-8-54:/data/disk2
Brick5: store-8-55:/data/disk1
Brick6: store-8-55:/data/disk2
......
Brick28: store-8-67:/data/disk2
Options Reconfigured:
server.event-threads: 8
client.event-threads: 8
performance.qr-cache-timeout: 600
performance.nl-cache-positive-entry: on
performance.nl-cache-timeout: 600
performance.nl-cache: on
performance.readdir-ahead: on
network.inode-lru-limit: 500000
performance.md-cache-timeout: 600
performance.cache-invalidation: on
performance.stat-prefetch: on
features.cache-invalidation-timeout: 600
features.cache-invalidation: on
performance.io-thread-count: 32
config.transport: tcp
storage.fips-mode-rchecksum: on
nfs.disable: off
复制卷
多个文件在多个brick上复制多份,brick的数目要与需要复制的份数相等,建议brick分布在不同的服务器上。
相当于raid1,复制的份数,决定集群的大小,通常与分布式卷或者条带卷组合使用,解决前两种存储卷的冗余缺陷。缺点是磁盘利用率低。复本卷在创建时可指定复本的数量,通常为2或者3,复本在存储时会在卷的不同brick上,因此有几个复本就必须提供至少多个brick,当其中一台服务器失效后,可以从另一台服务器读取数据,因此复制GlusterFS卷提高了数据可靠性的同事,还提供了数据冗余的功能。
应用场景:对可靠性高和读写性能要求高的场景
优点:读写性能好
缺点:写性能差
replica = brick
创建复制卷:
gluster volume create volume_name replica 2 node1:/export/brick1 node2:/export/brick1
# gluster volume create volume_name replica 2 172.16.2.109:/export/brick1 172.16.2.110:/export/brick1
# replica:文件保存的份数
启动卷
gluster volume start volume_name
查看卷信息
gluster volume info [volume_name]
条带卷
将文件分成条带,存放在多个brick上,默认条带大小128k
应用场景:大文件
优点:适用于大文件存储
缺点:可靠性低,brick故障会导致数据全部丢失
stripe = birck
创建条带卷:
gluster volume create volume_name stripe 2 node1:/export/brick1 node2:/export/brick1
# stripe:条带个数
启动这个卷:
gluster volume start volume_name
查看这个卷的信息:
gluster volume info volume_name
分布式条带卷
多个文件在多个节点哈希存储,每个文件再多分条带在多个brick上存储
应用场景:读/写性能高的大量大文件场景
优点:高并发支持
缺点:没有冗余,可靠性差
brick数是stripe的倍数
最少需要4台服务器。
创建分布式条带卷
gluster volume create volume_name stripe 2 node1:/data/br1 node2:/data/br1 node3:/data/br1 node4:/data/br1
启动这个卷:
gluster volume start volume_name
查看这个卷的信息:
gluster volume info volume_name
创建时没有具体的选项,来指定卷的类型,只根据stripe和brick数量分配
分布式复制卷
多个文件在多个节点上哈希存储,在多个brick复制多份存储。
应用场景:大量文件读和可靠性要求高的场景
优点:高可靠,读性能高
缺点:牺牲存储空间,写性能差
brick数量是replica的倍数
创建分布式复制卷
gluster volume create volume_name replica 2 node1:/data/br1 node2:/data/br1 node3:/data/br1 node4:/data/br1
启动这个卷
gluster volume start volume_name
查看这个卷的信息:
gluster volume info volume_name
创建时没有具体的选项,来指定卷的类型,只根据replica和brick数量分配
条带式复制卷
一个大文件存储的时候划分条带,并且保存多份
应用场景:超大文件,并且对可靠性要求高
优点:大文件存储,可靠性高
缺点:牺牲空间写性能差
brick数量是stripe、replica的乘积
创建条带式复制卷
gluster volume create volume_name stripe 2 replica 2 node1:/data/br1 node2:/data/br1 node3:/data/br1 node4:/data/br1
启动这个卷:
gluster volume start volume_name
查看这个卷的信息:
gluster volume info volume_name
分布式条带复制卷
多个大文件在多个节点哈希存储,存储是分成条带,并且保存多份
应用场景:大量大文件并且对可靠性要求高的场景
优点:读/写/可靠性比较均匀
缺点:牺牲存储空间,写性能相对差
brick的数量是stripe、replica的乘积的倍数
创建分布式条带复制卷
gluster volume create volume_name stripe 2 replica 2 node1:/data/br1 node2:/data/br1 node3:/data/br1 node4:/data/br1 node5:/data/br1 node6:/data/br1 node7:/data/br1 node8:/data/br1
启动这个卷:
gluster volume start volume_name
查看这个卷的信息:
gluster volume info volume_name
卷管理
扩容(Expanding Volumes):
您可以根据需要扩展卷,而集群是联机和可用的。例如,你可能想添加一个砖的分布量,从而增加了分配和增加的GlusterFS卷的容量。
同样,你可能想添加一组砖分布式复制量,增加的GlusterFS卷的容量。
注意:
在扩展分布式复制和分布式分散卷时,需要添加多个副本或离散计数的砖块。例如,要使用复制计数为2扩展分布式复制卷,需要在2的倍数(例如4, 6, 8)中添加砖块。
1.将节点添加到集群中
gluster peer probe node3
gluster peer probe node4
2.扩展volume
gluster volume add-brick volume_name node3:/data/br1 node4:/data/br1
3.检查添加信息
gluster volume info volume_name
4.Rebalance(不要在业务繁忙的情况下进行)
gluster volume rebalance volume_name start
5.查看rebalance的状态
gluster volume rebalance volume_name status
缩减卷(Shrinking Volumes)
您可以根据需要缩小卷,而集群是联机和可用的。例如,您可能需要删除由于硬件或网络故障而在分布式卷中无法访问的砖块。
注意:
只有配置信息被删除——您可以继续从砖块直接访问数据。
当收缩分布式复制和分布式离散卷时,需要删除多个副本或条形数的多个砖块。例如,如果以复制计数2缩小分布式复制卷,则需要以2的倍数删除砖块(例如4, 6, 8)。另外,您要移除的砖块必须来自相同的子卷(相同的副本或分散集)。
使用“开始选项”运行“移除砖块”将自动触发重新平衡操作,将数据从已移除的砖块迁移到卷的其余部分。
1.移除brick
gluster volume remove-brick volume_name node3:/data/br1 node4:/data/br1 start
2.查看移除状态
gluster volume remove-brick volume_name node3:/data/br1 node4:/data/br1 status
gluster volume remove-brick f01087243 store-8-67:/data/disk2 status
Node Rebalanced-files size scanned failures skipped status run time in h:m:s
--------- ----------- ----------- ----------- ----------- ----------- ------------ --------------
store-8-65 2780 20.6GB 2781 0 0 in progress 0:07:09
store-8-66 2290 16.4GB 2290 0 0 in progress 0:07:09
store-8-67 2321 16.8GB 2322 0 0 in progress 0:07:08
The estimated time for rebalance to complete will be unavailable for the first 10 minutes.
3.提交
gluster volume remove-brick volume_name node3:/data/br1 node4:/data/br1 commit
4.查看brick是否被移除
gluster volume info volume_name
5.Reblance(不要在业务繁忙的情况下进行)
gluster volume rebalance volume_name start
替换Replace brick
1.将节点添加到集群中
gluster peer probe node3
2.替换brick
gluster volume replace-brick volume_name node1:/data/br1 node5:/data/br1 commit force
3.查看卷的状态
gluster volume info volume_name
命令
gluster pool list
# 列出信任池服务器列表
gluster peer status
# 查看信任池状态
gluster volume info
# 查看卷的信息
gluster volume stop gv0
# 停止存储卷
设置:
gluster volume set gv0 nfs.disable off
# gluster默认不允许nfs访问,如需要nfs挂载,需要设置开启 off开启,on关闭。默认关闭
客户端:
安装:
apt install glusterfs-client glusterfs-common
# 如果上面安装以后不能挂载,再安装glusterfs-server
挂载:
mount -t glusterfs 172.16.2.109:/gv0 /test
写入fstab文件实现glusterclient自动挂载
# 172.16.2.109:/gv0 /test glusterfs _netdev,rw,acl 0 0 # 特別注意要加上 _netdev选项。使用 acl 选项可以在挂载目录中启用POSIX ACL 的支援
写入fstab文件实现nfs自动挂载
# 172.16.2.109:/gv0 /test nfs _netdev,rw 0 0 #
验证:
cd /test
touch abcd.txt