通过鲁伯斯·伦德克
介绍
无论您是管理小型家庭网络还是大型公司的企业网络,数据存储始终是一个问题。这可能是因为磁盘空间不足或备份解决方案效率低下。在这两种情况下,GlusterFS都是解决问题的正确工具,因为它允许您水平和垂直扩展资源。在本指南中,我们将配置分布式和复制/镜像数据存储。顾名思义,GlusterFS的分布式存储模式将使您能够在多个网络节点之间平均地重新分布数据,而复制模式将确保所有数据都在所有网络节点上进行镜像。
什么是GlusterFS
阅读介绍后,您应该已经对GlusterFS有了一个清晰的认识。您可以将其视为针对整个网络中所有空磁盘空间的聚合服务。它通过TCP或RDMA通过GlusterFS安装连接所有节点,从而创建单个存储资源,将所有可用磁盘空间组合到单个存储卷中(分散式模式)或使用所有注释上的最大可用磁盘空间来镜像数据(复制的模式)。因此,每个卷都包含多个节点,在GlusterFS术语中称为砖块。
初步假设
尽管可以在任何Linux发行版上安装和使用GlusterFS,但本文将主要使用Ubuntu Linux。但是,您应该能够在RedHat,Fedora,SuSe等任何Linux发行版上使用此指南。唯一不同的部分是GlusterFS安装过程。
此外,本指南将使用3个示例主机名:
- storage.server1-GlusterFS存储服务器
- storage.server2-GlusterFS存储服务器
- storage.client-GlusterFS存储客户端
使用DNS服务器或/etc /hosts文件定义主机名,并根据本指南调整方案。
GlusterFS安装
GlusterFS服务器需要安装在要添加到最终存储卷中的所有主机上。在我们的例子中,它将是storage.server1和storage.server2。您可以将GlusterFS用作单个服务器,并可以将客户端连接用作NFS服务器。但是,GlusterFS的真正价值在于使用多个服务器主机作为一个主机。使用以下linux命令在两个服务器上安装GlusterFS服务器:
storage.server1 $ sudo apt-get install glusterfs-server
和
storage.server2 $ sudo apt-get install glusterfs-server
上面的命令将在两个系统上安装并启动glusterfs-server。确认两个服务器都运行在:
$ sudo service glusterfs-server status
分布式存储配置
首先,我们将创建一个GlusterFS分布式卷。在分布式模式下,GlusterFS将在所有连接的模块之间平均分配任何数据。例如,如果客户端将文件file1,file2,file3和file4写入GlusterFS挂载的目录,则server.storage1将包含file1和file2,server.storage2将获得file3和file4。下图说明了这种情况。
对等探针
首先,我们需要使两个GlusterFS服务器互相通信,这意味着我们正在有效地创建可信服务器池。
storage.server1 $ sudo gluster peer probe storage.server2
Probe successful
上面的命令会将storage.server2添加到受信任的服务器池中。此设置将在所有连接的服务器上复制,因此您不必在其他服务上运行上述命令。到现在,两台服务器都将具有与以下服务器相似的对等配置文件:
$ cat /etc/glusterd/peers/951b8732-42f0-42e1-a32f-0e1c4baec4f1
uuid=951b8732-42f0-42e1-a32f-0e1c4baec4f1
state=3
hostname1=storage.server2
创建存储卷
接下来,我们可以使用两个服务器来定义一个新的存储卷,该存储卷由两块砖组成,每块服务器一个。
storage.server1 $ sudo gluster volume create dist-vol storage.server1:/dist-data \
storage.server2:/dist-data
Creation of volume dist-vol has been successful. Please start the volume to access data.
上面的命令创建了一个名为dist-vol的新卷,该卷由两个砖块组成。如果目录/dist-data不存在,则还将通过上述命令在两台服务器上创建该目录。如前所述,您只能在卷中添加一个块,从而使ClusterFS服务器充当NFS服务器。您可以通过以下方式检查是否创建了新卷:
$ sudo gluster volume info dist-vol
Volume Name: dist-vol
Type: Distribute
Status: Created
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: storage.server1:/dist-data
Brick2: storage.server2:/dist-data
开始存储量
现在,我们准备开始您的新卷:
storage.server1 $ sudo gluster volume start dist-vol
Starting volume dist-vol has been successful
storage.server1 $ sudo gluster volume info dist-vol
Volume Name: dist-vol
Type: Distribute
Status: Started
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: storage.server1:/dist-data
Brick2: storage.server2:/dist-data
这样就完成了分布式模式下GlusterFS数据服务器的配置。最终结果应该是一个名为dist-vol的新分布式卷,该卷由两块砖组成。
设置客户端
现在我们已经创建了一个新的GlusterFS卷,我们可以使用GlusterFS客户端将该卷挂载到任何主机上。登录到客户端主机并安装GlusteFS客户端:
storage.client $ sudo apt-get install glusterfs-client
接下来,创建一个安装点,您要将新的dist-vol GlusterFS卷安装到该安装点,例如export-dist:
storage.client $ sudo mkdir /export-dist
现在,我们可以使用以下命令挂载dist-vol GlusterFS卷:安装命令:
storage.client $ sudo mount -t glusterfs storage.server1:dist-vol /export-dist
一切准备就绪。使用安装命令以查看您是否已正确安装GlusterFS卷:
$ mount | grep glusterf
测试GlusterFS分布式配置
一切就绪,因此我们可以开始一些测试。在客户端,在GlusterFS挂载目录中创建4个文件:
storage.client $ touch /export-dist/file1 file2 file3 file4
GlusterFS现在将获取所有文件,并在dist-vol卷中的所有砖之间平均分配它们。因此,storage.server1将包含:
storage.server1 $ ls /dist-data/
file3 file4
和storage.server2将包含:
storage.server2 $ ls /dist-data
file1 file2
当然,您的结果可能会有所不同。
复制的存储配置
创建复制的GlusterFS卷的过程与前面介绍的分布式卷相似。实际上,唯一的区别是如何创建ClusterFS卷。但是,让我们从头开始再做一次:
对等探针
首先,我们需要使两个GlusterFS服务器互相通信,这意味着我们正在有效地创建可信服务器池。
storage.server1 $ sudo gluster peer probe storage.server2
Probe successful
如果已经完成,则可以跳过此步骤。
创建存储卷
在这一步中,我们需要创建一个副本卷。
$ sudo gluster volume create repl-vol replica 2 \
storage.server1:/repl-data storage.server2:/repl-data
Creation of volume repl-vol has been successful. Please start the volume to access data.
上面命令的基本翻译可能是我们创建了一个称为repl-vol的复制卷(副本)。命令中的数字2表示条带数,这意味着在扩展此卷时,我们总是需要增加等于卷条带数的倍数(2、4、8、16等)的块数。
开始存储量
现在该开始新的复制卷了:
$ sudo gluster volume start repl-vol
Starting volume repl-vol has been successful
检查状态:
storage.server1 $ sudo gluster volume info repl-vol
Volume Name: repl-vol
Type: Replicate
Status: Started
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: storage.server1:/repl-data
Brick2: storage.server2:/repl-data
设置客户端
客户端配置与为分布式卷安装设置客户端时的配置相同。
安装客户端:
storage.client $ sudo apt-get install glusterfs-client
创建安装点:
storage.client $ sudo mkdir /export-repl
使用以下命令挂载repl-vol GlusterFS卷:安装命令:
storage.client $ sudo mount -t glusterfs storage.server1:repl-vol /export-repl
现在一切准备就绪。使用安装命令以查看您是否已正确安装GlusterFS卷:
$ mount | grep glusterf
测试GlusterFS复制配置
复制的GlusterFS卷的重点是数据将在所有节点之间无缝镜像。因此,在/export-repl /中创建文件时
$ touch /export-repl/file1 file2 file3 file4
所有文件将在两台服务器上均可用:
storage.server1 $ ls /repl-data/
file1 file2 file3 file4
和
storage.server2 $ ls /repl-data/
file1 file2 file3 file4
扩展GlusterFS卷
如果您需要扩展数据存储以包含其他模块,则过程很简单:
$ sudo gluster volume add-brick rep-vol storage.server3:/repl-vol storage.server4:repl-vol /export-repl
这将为您的repl-vol添加另外两个存储块。添加新积木后,您可能需要使用以下方法对整个体积进行re-balance:
$ sudo gluster volume rebalance repl-vol fix-layout start
并使用以下命令同步/迁移所有数据:
$ sudo gluster volume rebalance repl-vol migrate-data start
此外,您可以使用以下命令检查re-balance进度
$ sudo gluster volume rebalance vol0 status
安全设定
除了上述配置之外,您还可以通过仅允许某些主机加入信任池来使整个卷更安全。例如,如果我们只希望允许具有10.1.1.10的主机参与卷repl-vol,则使用以下命令linux命令:
$ sudo gluster volume set repl-vol auth.allow 10.1.1.10
在我们需要整个子网的情况下,只需使用星号即可:
$ sudo gluster volume set repl-vol auth.allow 10.1.1.*
结论
GlusterFS是功能强大的GPL3许可软件。通过将单个主机上的两个单独的物理设备块定义到复制的GlusterFS卷中,也可以将它用作快速软件RAID 1。当然,为该工作使用软件团队会更好,但仍然存在这种可能性。我发现GlusterFS易于使用和配置。
附录
在这里,我将仅列出在使用GlusterFS时遇到的一些错误和答案:
砖数不正确
Incorrect number of bricks supplied 1 for type REPLICATE with count 2
如果创建的带区数量为2的卷,则此时需要至少添加2个额外的块。
主机storage.server1不是朋友
Host storage.server1 not a friend
首先尝试将GlusterFS服务器添加到信任池中,然后再尝试将其包括到卷中。