GFS-Gluster文件系统
当我们要处理的数据量变大时,存储将成为一个挑战。
有几种可能的解决方案可以解决此类问题。
让我们讨论一下,当数据量变大时,为什么找到一个存储解决方案非常重要。
假设我们有一个大型RAID阵列,其容量约为10 TB,并且暴露于一台服务器,其他客户端从该服务器安装该卷。
现在,必须由服务器NFS进程在服务器端完成NFS客户端发出的所有读取和写入操作。
想象一下,如果客户端同时在NFS共享上同时执行繁重的读写操作。
在这种情况下,NFS服务器将处于工作负载状态,并且资源(内存和处理能力)将变慢。
如果我们可以将两台机器及其各自的光盘的存储和处理能力结合起来以形成一个可供客户访问的卷,该怎么办?
因此,基本的想法是借助TCP或者Infiniband(数据中心使用的高性能链接来提供快速,高吞吐量的连接)聚合多个存储服务器,并形成一个非常大的存储。
GlusterFS与将多个存储服务器组成一个大型存储完全相同。
让我们看看有关GlusterFS的一些重要和值得注意的要点。
- 它的开源
- 我们可以在商用硬件服务器的帮助下部署GlusterFS
- 性能和存储容量的线性扩展
- 将存储大小扩展到几个PB,服务器可以访问成千上万个。
一个好的存储解决方案必须在存储和性能上都具有弹性,而又不影响活动操作。
是的,存储大小和性能的弹性是使存储解决方案成功的最重要因素。
尽管大多数存储解决方案的确在产品详细信息中提到了线性度是关键术语,但其中80%的解决方案并未提供所需的绝对线性度。
首先让我们了解什么是线性度?
存储的线性度意味着,如果我的存储大小为10 TB(可以为我提供10 MB/s的性能),那么将存储大小增加到20 TB可以为我提供20 MB/s的性能。
但是,这种线性缩放在大多数情况下不会发生。
不提供这种线性度的存储解决方案正在滥用术语“线性”
在此显示的配置中,我们需要注意以下几点。
服务器节点:2
磁盘驱动器:4x1TB驱动器
总存储大小:8TB
网路速度:1G
达到的总速度:200 MB/s
可以通过在每个服务器服务器上添加更多1 TB驱动器来增加存储大小,而又不影响性能的情况下修改上述配置。
但是,如果要提高上述相同存储的性能,而又不增加存储的大小,则需要再添加两个服务器节点。
配置如下图所示。
有关此配置的注意事项如下。
磁盘驱动器:2 x 1TB
总存储大小:8TB(与以前的配置相同)
网路速度:1 G
达到的总速度:400MB/S
因此,在上述配置中,我们可以通过增加配置中的节点服务器数量,以400 MB/s的改进性能实现相同的存储大小。
但是,如果继续增加节点数,则需要记住以下事实:我们的网络只有1G。
因此,在一定程度上提高性能后,网络速度将成为瓶颈。
为了解决这个问题,我们需要将我们的网络升级到10G。
系统中所有节点的组合处理能力和内存有助于提高glusterfs的性能。
Glusterfs一直是PB级性能存储的流行选择。
我们应该在环境上部署的配置取决于操作类型和要求。
在关于NFS的文章中,我们讨论了VFS(虚拟文件系统),它是内核和Linux中不同文件系统之间的接口。
简而言之,我们可以说VFS只不过是供应用程序使用的单个接口,而不必担心文件系统的底层类型。
请记住,实际的读写操作不是由VFS本身完成的。
但是,VFS只是将用户或者应用程序请求的操作移交给内核内的基础文件系统模块。
在安装和配置gluster文件系统之前,让我们首先讨论称为FUSE的事情。
计算机内存分为两部分,分别称为用户空间和内核空间。
该名称本身提示用户空间由分配给程序的内存位置组成,内核空间保留供内核运行。
现在,大多数文件系统代码(实际上在文件系统上完成工作的程序)都以模块的形式位于内核内部。
因此,基本上,如果我们需要创建自己的文件系统,则必须将该特定文件系统的内核模块作为内核的一部分。
但是,有一些简便的方法可以实现这一目标,而无需触摸或者编写内核模块的代码。
如前所述,内存中为内核隔离的区域称为内核空间,我们可以在用户空间内创建自己的文件系统代码,而无需接触内核空间。
我们可能会想,文件系统将如何成为VFS的一部分?
有一种称为FUSE(用户空间中的文件系统)的模块形式的机制可以运行我们自己的文件系统代码,而无需接触内核。
该模块将在文件系统和VFS之间建立桥梁。
因此,我们可以在FUSE模块的帮助下制作任何新文件系统,并使该文件系统与Linux兼容。
该模块用于在Linux中安装大量文件系统,下面将介绍其中一些。
- NTFS 3克
- SSHFS
- HDFS
- GlusterFS
如果我们已经仔细阅读了在FUSE的帮助下运行的文件系统的上述列表,则还包括glusterfs。
这就是我们讨论VFS,用户空间和内核空间以及最后FUSE的原因。
glusterfs需要保险丝。
Glusterfs被Red Hat广泛用于其Red Hat Enterprise Storage解决方案,并建议在非常需要缩放和弹性的地方使用Glusterfs。
由于FUSE是gluster文件系统的准备工作,因此首先安装FUSE模块。
[root@server1 ~]# yum install fuse fuse-libs
注意:在安装保险丝之前,请不要忘记安装ATRPM信息库。
我们可以按照此文档安装ATRPM
要安装软件包,我们可以从官方下载核心软件包。
在安装gluster之前,让我们弄清楚我们的配置。
我们将有两个称为server1&server2的服务器,这将是我们的服务器节点。
这两个服务器节点将共同构成一个存储卷,我们的客户端服务器将安装该存储卷。
我们需要首先安装以下可从glusterfs官方获得的软件包。
- glusterfs
- glusterfs-cli
- glusterfs-fuse
- glusterfs-libs
- glusterfs-server
以上软件包需要安装在将充当glusterfs服务器节点的服务器上(在本例中为server1和server2)。
集群服务是负责卷管理的主要服务。
因此,我们需要做的第一件事就是启动glusterd服务,如下所示。
请记住,我们需要在所有节点服务器上启动glusterd服务。
[root@server1 ~]# /etc/init.d/glusterd start Starting glusterd: [ OK ] [root@server2 ~]# /etc/init.d/glusterd start Starting glusterd: [ OK ]
因此,当我们在server1和server2上启动了glusterd服务时,现在让我们创建一个存储池,并将这两个服务器作为该池中的成员。
为了显示此glusterfs示例教程,我将在每台服务器上使用100 MB分区。
因此,我们将在客户端服务器上安装200MB的卷(但是这取决于我们使用的gluster的类型,我们将在稍后讨论。
)
首先,我们先创建一个存储池,然后再继续。
该存储池将简单地授权我们所需的服务器,作为该存储池的一部分。
请记住,如果要在将服务器添加到池中时使用主机名,则需要进行完美的DNS设置。
就我而言,我已经在/etc/hosts文件中添加了这些主机名。
[root@server1 ~]# gluster peer probe server2 peer probe: success [root@server1 ~]#
请记住,我们需要修改防火墙规则以允许池中的服务器进行探测。
否则,我们可能会收到类似以下的错误消息。
[root@server1 ~]# gluster peer probe server2 peer probe: failed: Probe returned with unknown errno 107
因此,在我们的存储池中,我们有两个服务器server1和server2.
我们可能在想,我还没有通过相同的probe命令添加server1.
这是因为localhost本身将成为池的一部分。
即使我们尝试添加它,也会收到类似以下的消息。
[root@server1 ~]# gluster peer probe server1 peer probe: success: on localhost not needed [root@server1 ~]#
现在,让我们创建一个包含来自两个节点服务器(砖)的分区/共享的卷,这将合并生成用于客户机安装的gluster卷。
以下命令可用于从每个节点服务器使用1个砖块创建gluster卷。
下面使用的exp1和exp2是两个大小为100M的分区,它们使用XFS文件系统进行了格式化。
我们甚至可以将共享与ext2和ext3一起使用。
[root@server1 ~]# gluster volume create test-volume server1:/exp1/server2:/exp2 Creation of volume test-volume has been successful. Please start the volume to access data. [root@server1 ~]#
让我们借助gluster命令查看此新创建的卷的完整信息。
下面显示的该命令将为我们提供有关卷的完整信息。
[root@server1 ~]# gluster volume info Volume Name: test-volume Type: Distribute Volume ID: 6d651bbf-cb8f-4db0-9d25-7f6a852add4f Status: Started Number of Bricks: 2 Transport-type: tcp Bricks: Brick1: server1:/exp1 Brick2: server2:/exp2
下面提到了上述命令显示的一些关键信息。
卷名:指定卷名
卷ID:指定唯一的卷ID
状态:显示卷是否已启动
砖块数量:告诉参与该体积的砖块总数
类型:告诉我们音量的类型。
该字段需要更多说明,因为胶合板中不同类型的体积之间存在很大差异。
在本文中,我们将进行不同的讨论。
默认值是“分布式”
传输:这说明用于在参与该卷的服务器节点之间建立通信的传输机制的类型。
可以使用不同类型的传输方法。
一个是TCP,另一个是服务器节点之间的高速Infiniband电缆连接(这要求在两个服务器上都安装特定的infiniband驱动程序)。
如果在卷创建期间未指定传输方法,则将选择默认方法,在本例中为TCP。
gluster文件系统中不同类型的卷
正如我们在前面的volume info命令中看到的那样,有一种称为卷的类型。
选择取决于要求。
其中一些有利于扩展存储大小,而另一些有利于提高性能,我们也可以将两种类型结合使用以同时获得这两种优点。
让我们一一讨论。
分布式Glusterfs卷
分布式Gluster卷用于在卷中的任意数量的块之间随机分布文件。
换句话说,文件1可能存储在第一个砖块中,文件2可能存储在另一个砖块中。
如果我们创建了分布式卷,则gluster不会提供任何冗余。
使用gluster制作分布式存储卷的主要目的是轻松缩放卷大小。
如果在创建卷时未指定任何选项,则默认选项是创建卷的分发类型。
请记住以下事实:分布式卷不提供任何数据冗余,这意味着砖块故障将导致完整的数据丢失。
我们需要依靠基础硬件来实现分布式卷中的数据丢失保护。
因此,如果我们将RAID用于分布式卷中的积木,那么利用RAID提供的冗余,可以使积木免于灾难。
我们先前创建的没有任何选择的卷是分布式卷。
分布式卷概述如下。
- 文件以分布量随机分布在砖块上
- 没有冗余
- 数据丢失保护由基础硬件提供(没有来自gluster的保护)
- 最适合缩放卷大小
gluster文件系统中的复制卷
复制卷以提高可靠性和数据冗余性。
因此,即使一块砖发生故障,数据也将受到保护,安全并且可以访问。
数据的精确副本将在复制卷中的所有砖块上维护。
但是,是的,我们要选择要使用“复制卷”选项创建的副本数。
简而言之,我们需要使用两个模块来创建具有2个副本的复制卷。
让我们看看如何在glusterfs中创建一个复制的卷。
它与用于创建默认分布式卷的先前命令非常相似,并增加了副本计数和类型选项。
该命令如下所示。
[root@server1 ~]# gluster volume create test-volume replica 2 server1:/exp1 server2:/exp2
上面的命令将创建一个名为test-volume的复制卷,其中两个副本存储在brick server1:/exp1和brick server2:/exp2中。
如前所述,如果不提及传输类型,则采用TCP的默认值。
复制卷概述:
- 在可用性优先的情况下很有用
- 在优先考虑冗余的情况下很有用
- 块数应等于副本数。如果我们需要5个副本,那么我们需要5个积木
Gluster文件系统中的条带化卷
条带化卷将数据划分为不同的条带后,将数据存储在模块中。
因此,想象一下,如果我们有一个大文件并且存储在第一个砖块中,并且有成千上万的客户端同时访问卷。
由于大量客户端访问同一块文件中的同一文件,因此性能将降低。
为此,一个好的解决方案是将文件分割成较小的块,然后将其存储在不同的砖块中(由于这样,负载将分散在砖块之间,并且可以更快地获取文件)。
这就是条带卷中发生的情况。
创建条带化卷时作为参数给出的条带数必须等于该卷中的块数。
创建带区卷与创建复制卷非常相似。
条带化卷可以通过以下命令创建。
[root@server1 ~]# gluster volume create test-volume stripe 2 server1:/exp1 server2:/exp2
在上面显示的示例中,我们要求将条带数保持为2,因此,我们需要两块积木。
gluster文件系统中条带化卷的总结
- 条带化卷不提供冗余
- 一砖一瓦的灾难可能会导致数据丢失
- 条纹数必须等于砖头数
- 如果大量客户端正在访问相同的卷,则可提供更高的性能
Gluster文件系统中的分布式条带化卷
分布式条带化卷与条带化卷非常相似,还有一个另外的优势,即我们可以将条带分布在更多节点上的更多块砖上。
换句话说,我们可以将具有4条带的数据分布到8台服务器上。
因此,用简单的话来说,如果要创建分布式的条带化卷,则必须创建一个具有2条带和4个砖块的条带化卷。
基本上,如果卷中的砖块数量是条纹数量的两倍,则卷类型将分布为条纹。
基本上,我们可以将条纹分布在几块砖上。
即使以后要增加块数以增加卷大小,也需要在条带号的倍数中添加更多块。
以下命令可用于创建分布式条带卷。
[root@server1 ~]# gluster volume create test-volume stripe 2 192.168.30.132:/exp1/192.168.30.132:/exp3/192.168.30.133:/exp2/192.168.30.133:/exp4 Creation of volume test-volume has been successful. Please start the volume to access data.
如果我们看到上述命令,则我们使用的条带数为2,使用的总块数为4(这是条带号2的倍数)。
如果我们创建一个具有两个砖块且条带数为2的卷,它将创建一个条带卷,而不是一个分布式条带卷。
可以肯定地说,让我们看一下分布式带区卷的信息。
[root@server1 ~]# gluster volume info Volume Name: test-volume Type: Distributed-Stripe Volume ID: 7ba49f31-d0cf-47d0-8aed-470a9fffab72 Status: Created Number of Bricks: 2 x 2 = 4 Transport-type: tcp Bricks: Brick1: server1:/exp1 Brick2: server1:/exp3 Brick3: server2:/exp2 Brick4: server2:/exp4
我们可以清楚地看到Distributed-Stripe的TYPE字段。
分布式条带化卷的汇总
- 它跨多块砖分割文件
- 有利于访问超大文件的性能
- 块数必须始终为条带数的倍数
Gluster中的分布式复制卷
分布式复制卷用于将文件存储在复制砖中。
它与分布式条带卷非常相似。
在分布式复制卷中,砖块必须是副本数的倍数。
文件分布在复制的砖块集上。
它用于由于冗余和扩展存储至关重要的高可用性的环境。
在创建分布式复制卷时添加砖时,必须格外小心。
实际上,我必须说指定砖的顺序非常重要。
让我们创建一个分布式复制卷,看看会发生什么。
[root@server1 ~]# gluster volume create test-volume replica 2 server1:/exp1/server1:/exp3/server2:/exp2/server2:/exp4 Multiple bricks of a replicate volume are present on the same server. This setup is not optimal. Do you still want to continue creating the volume? (y/n) y Creation of volume test-volume has been successful. Please start the volume to access data. [root@server1 ~]#
现在,在上面的命令中,我们创建了一个名为test-volume 4 bricks的分布式复制卷。
命令中给出的积木顺序如下所示。
服务器1:/exp1 /服务器1:/exp3 /服务器2:/exp2 /服务器2:/exp4
该顺序意味着两个副本块集:“ server1:/exp1/server1:/exp3 /”和“ server2:/exp2/server2:/exp4”
因此,命令中给定的相邻砖块被视为副本的一部分。
因此,如果副本数为3并且有9个磁盘,则前3个砖(按照我们指定的顺序)将成为第一个副本,后三个砖将成为第二个副本,依此类推。
[root@server1 ~]# gluster volume info Volume Name: test-volume Type: Distributed-Replicate Volume ID: 355f075d-e714-4dbf-af18-b1c586f0736a Status: Created Number of Bricks: 2 x 2 = 4 Transport-type: tcp Bricks: Brick1: server1:/exp1 Brick2: server1:/exp3 Brick3: server2:/exp2 Brick4: server2:/exp4 [root@server1 ~]#
上面的volume info命令显示其类型为Distributed-Replicate。
分布式复制卷概述
- 数据跨复制集分布
- 良好的冗余性和良好的扩展性
我们已经看到可以使用不同数量的砖块制作5种不同类型的体积。
但是,我们还没有看到如何启动这些卷,以便客户端可以装入它并使用该卷。
如何在glusterfs中启动卷
可以通过以下命令启动glusterfs卷。
我们可以通过此命令为已创建的任何类型的卷启动卷。
[root@server1 ~]# gluster volume start test-volume Starting volume test-volume has been successful [root@server1 ~]#
现在,当我们开始批量生产时,客户端现在可以使用它了。
让我们看看如何。
如何访问glusterfs卷
建议访问glusterfs卷的主要方法是通过glusterfs客户端。
必须在需要访问该卷的客户端上安装Glusterfs客户端。
但是,由于以下原因,这是所有访问gluster卷的最佳方法。
- 与其他选项相比,它提供并发性和性能
- GNU Linux中的透明故障转移。
可以用来访问glusterfs卷的另一种方法是通过NFS。
CIFS也可以在Windows中访问gluster的卷。
让我们看看使用glusterfs客户端访问glusterfs卷的推荐方法。
让我们使用Linux机器上的glusterfs客户端访问我们的测试卷。
为了使其正常工作,我们需要在客户端上安装以下软件包。
- fuse
- fuse-libs
- openib (for infiniband)
- libibverbs(for infiniband)
- glusterfs-core
- glusterfs-rdma
- glusterfs-fuse
以下命令可用于从包含该砖的任何服务器上安装gluster卷。
glusterf在内部将在所有包含砖的节点之间进行通信以分配负载。
[root@client ~]# mount.glusterfs server1:/test-volume /mnt
以类似的方法,任何数量的客户端都可以使用上面显示的相同命令来安装相同的卷。
现在,让我们看看用于增加和减少胶合剂体积大小的方法。
如何扩大gluster卷
我们可能有兴趣在卷中添加更多bricks以增加卷的大小。
添加更多模块的第一步是探测该服务器(无论是新节点还是旧探测服务器)。
[root@server1 ~]# gluster peer probe server2 Probe on host 192.168.30.133 port 24007 already in peer list
现在,使用以下命令添加所需的新积木。
[root@server1 ~]# gluster volume add-brick test-volume server2:/exp5
现在,通过前面显示的命令gluster volume info重新检查音量信息。
如果我们能够看到新添加的积木,那就好了。
现在让我们重新平衡音量。
[root@server1 ~]# gluster volume rebalance test-volume start Starting rebalance on volume test-volume has been successful
如果我们要增加复制的分布式卷或者条带化分布式卷的大小,请不要忘记在多个条带和副本中添加块。
重新平衡完成后,必须固定数据布局,以便将新添加到旧目录中的文件也可以移至新的砖块中。
[root@server2 ~]# gluster volume rebalance test-volume fix-layout start
但是,即使执行上述命令,尽管旧目录的布局结构现在包括新砖,但其中的实际数据尚未迁移。
因此,我们需要应用以下命令。
[root@server1 ~]# gluster volume rebalence test-volume migrate data start
可通过命令“ gluster卷重新平衡测试卷状态”找到重新平衡状态。
如何缩小gluster卷
缩小gluster的卷可以与扩展卷的大小完全相同,只是使用的命令略有不同。
缩小将通过移除参与体积的砖块来完成。
[root@server1 ~]# gluster volume remove-brick test-volume server2:/exp4
现在,我们可以从volume info命令中查看卷信息。
还请记住以下事实:如果要收缩分布式复制或者分布式条带化卷,请删除副本和条带倍数中的brick。