如何在 Ubuntu 服务器上使用 GlusterFS 创建冗余存储池

2024-05-05 09:12

本文主要是介绍如何在 Ubuntu 服务器上使用 GlusterFS 创建冗余存储池,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

简介


冗余和高可用性对于各种服务器活动都是必要的。在数据存储方面存在单点故障对于任何关键数据来说都是非常危险的配置。

虽然许多数据库和其他软件允许您在单个应用程序的上下文中分散数据,但其他系统可以在文件系统级别操作,以确保数据在写入磁盘时被复制到另一个位置。像 GlusterFS 这样的集群存储解决方案提供了这种功能。

在本指南中,我们将在两个 64 位 Ubuntu 12.04 VPS 实例之间设置冗余的 GlusterFS 集群。这将类似于具有镜像 RAID 的 NAS 服务器。然后,我们将从第三个 64 位 Ubuntu 12.04 VPS 访问该集群。

一般概念


集群环境允许您汇集资源(通常是计算或存储),以便您将各种计算机视为单个、更强大的单元。使用 GlusterFS,我们能够汇集各种 VPS 实例的存储并将它们视为单个服务器。

GlusterFS 允许您创建不同类型的存储配置,其中许多在功能上类似于 RAID 级别。例如,您可以在集群中的不同节点之间进行数据条带化,或者您可以实现冗余以获得更好的数据可用性。

在本指南中,我们将创建一个冗余的集群存储阵列,也称为分布式文件系统。基本上,这将允许我们具有类似于网络上的镜像 RAID 配置的功能。每个独立的服务器将包含其自己的数据副本,从而允许我们的应用程序访问任一副本,这将有助于分发我们的读取负载。

在每个 VPS 上需要执行的步骤


在本指南中,我们将在每个 VPS 实例上执行一些步骤。我们需要在每个主机上配置 DNS 解析,并设置我们将用于安装 GlusterFS 软件包的软件源。

配置 DNS 解析


为了使我们的不同组件能够轻松地相互通信,最好在每台计算机之间设置某种主机名解析。

如果您有一个要配置为指向每个系统的域名,您可以按照此指南设置使用 DigitalOcean 的域名。

如果您没有多余的域名,或者如果您只想快速简单地设置一些内容,您可以在每台计算机上编辑 hosts 文件。

使用 root 权限在您的第一台计算机上打开此文件:

sudo nano /etc/hosts

您应该看到类似于以下内容:

127.0.0.1       localhost gluster2# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

在本地主机定义下面,您应该添加每个 VPS 的 IP 地址,然后是您希望用于引用它的长名称和短名称。

完成后,它应该看起来像这样:

127.0.0.1       localhost hostname
first_ip gluster0.droplet.com gluster0
second_ip gluster1.droplet.com gluster1
third_ip gluster2.droplet.com gluster2# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

gluster0.droplet.comgluster0 部分的行可以更改为您希望用于访问每个 droplet 的任何名称。我们将在本指南中使用这些设置。

完成后,将您添加的行复制并将它们添加到其他 VPS 实例的 /etc/hosts 文件中。每个 /etc/hosts 文件应包含将您的 IP 链接到您选择的名称的行。

完成后保存并关闭每个文件。

设置软件源


尽管 Ubuntu 12.04 包含 GlusterFS 软件包,但它们相当过时,因此我们将使用 GlusterFS 项目的最新稳定版本(截至撰写本文时为版本 3.4)。

我们将在所有将作为我们集群节点的计算机以及客户端计算机上设置软件源。

实际上,我们将添加项目推荐给 Ubuntu 用户的 PPA(个人软件包存档)。这将允许我们使用与其他系统软件相同的工具来管理我们的软件包。

首先,我们需要安装 python-software-properties 软件包,它将允许我们使用 apt 轻松管理 PPA:

sudo apt-get update
sudo apt-get install python-software-properties

安装了 PPA 工具后,我们可以通过输入以下命令添加 GlusterFS 软件包的 PPA:

sudo add-apt-repository ppa:semiosis/ubuntu-glusterfs-3.4

添加了 PPA 后,我们需要刷新本地软件包数据库,以便我们的系统知道来自 PPA 的新软件包:

sudo apt-get update

在您用于本指南的所有 VPS 实例上重复这些步骤。

安装服务器组件


在本指南中,我们将把两台机器指定为集群成员,第三台机器作为客户端。

我们将配置标记为 gluster0gluster1 的计算机作为集群组件。我们将使用 gluster2 作为客户端。

在我们的集群成员机器(gluster0 和 gluster1)上,可以通过以下命令安装 GlusterFS 服务器软件包:

sudo apt-get install glusterfs-server

一旦在两个节点上都安装了这个软件包,我们就可以开始设置存储卷。

在其中一台主机上,我们需要与第二台主机进行对等连接。使用哪台服务器并不重要,但出于简单起见,我们将从我们的 gluster0 服务器执行以下命令:

sudo gluster peer probe gluster1.droplet.com
peer probe: success

这意味着对等连接成功。我们可以随时通过输入以下命令来检查节点是否在通信:

sudo gluster peer status
Number of Peers: 1Hostname: gluster1.droplet.com
Port: 24007
Uuid: 7bcba506-3a7a-4c5e-94fa-1aaf83f5729b
State: Peer in Cluster (Connected)

此时,我们的两台服务器正在通信,它们可以一起设置存储卷。

创建存储卷


现在我们有了可用的服务器池,我们可以创建我们的第一个存储卷。

因为我们对冗余性感兴趣,我们将设置一个具有复制功能的卷。这将允许我们保留数据的多个副本,避免单点故障。

由于我们希望在每台服务器上都有一份数据副本,我们将把复制选项设置为 “2”,这是我们拥有的服务器数量。我们将使用以下一般语法来创建卷:

sudo gluster volume create <span class="highlight">volume_name</span> replica <span class="highlight">num_of_servers</span> transport tcp <span class="highlight">domain1.com:/path/to/data/directory domain2.com:/path/to/data/directory ...</span> force

我们将运行的确切命令是:

sudo gluster volume create volume1 replica 2 transport tcp gluster0.droplet.com:/gluster-storage gluster1.droplet.com:/gluster-storage force
volume create: volume1: success: please start the volume to access data

这将创建一个名为 volume1 的卷。它将在每个主机的 /gluster-storage 目录中存储该卷的数据。如果此目录不存在,它将被创建。

此时,我们的卷已创建,但处于非活动状态。我们可以通过输入以下命令来启动卷并使其可供使用:

sudo gluster volume start volume1
volume start: volume1: success

我们的卷目前应该是在线的。

安装和配置客户端组件


现在我们已经配置好了我们的卷,可以在我们的客户端机器上使用它。

但在开始之前,我们需要从之前设置的 PPA 中实际安装相关软件包。

在您的客户端机器(例如本例中的 gluster2)上,输入以下命令:

sudo apt-get install glusterfs-client

这将安装客户端应用程序,并安装必要的 fuse 文件系统工具,以在内核之外提供文件系统功能。

我们将在客户端计算机上挂载远程存储卷。为此,我们需要创建一个挂载点。传统上,这是在 /mnt 目录中,但可以使用任何方便的位置。

我们将在 /storage-pool 目录下创建一个目录:

sudo mkdir /storage-pool

完成这一步后,我们可以挂载远程卷。为此,我们只需使用以下语法:

sudo mount -t glusterfs <span class="highlight">domain1.com</span>:<span class="highlight">volume_name</span> <span class="highlight">path_to_mount_point</span>

请注意,在挂载命令中我们使用了卷名。GlusterFS 对每个主机的实际存储目录进行了抽象。我们要挂载的不是 /gluster-storage 目录,而是 volume1 卷。

还要注意,我们只需要指定存储集群的一个成员。

我们将运行的实际命令是:

sudo mount -t glusterfs gluster0.droplet.com:/volume1 /storage-pool

这应该会挂载我们的卷。如果使用 df 命令,您将看到我们的 GlusterFS 已经挂载到了正确的位置。

测试冗余功能

现在我们已经设置好了客户端来使用我们的存储池,让我们来测试功能。

在我们的客户端机器(gluster2)上,我们可以输入以下命令将一些文件添加到我们的存储池目录:

cd /storage-pool
sudo touch file{1..20}

这将在我们的存储池中创建 20 个文件。

如果我们查看每个存储主机上的 /gluster-storage 目录,我们会发现所有这些文件都存在于每个系统上:

# 在 gluster0.droplet.com 和 gluster1.droplet.com 上
cd /gluster-storage
ls
file1  file10  file11  file12  file13  file14  file15  file16  file17  file18  file19  file2  file20  file3  file4  file5  file6  file7  file8  file9

如您所见,这将客户端的数据写入了我们的两个节点。

如果存储集群中的某个节点宕机并对文件系统进行更改,那么在节点恢复在线后,在客户端挂载点上执行读取操作应该会提示获取任何丢失的文件:

ls /storage-pool

限制对卷的访问

现在我们已经验证了我们的存储池可以挂载并将数据复制到集群中的两台机器,我们应该锁定我们的存储池。

目前,任何计算机都可以连接到我们的存储卷而不受任何限制。我们可以通过在卷上设置选项来更改这一点。

在您的存储节点中的一台上,输入以下命令:

sudo gluster volume set volume1 auth.allow <span class="highlight">gluster_client_IP_addr</span>

您需要在此命令中替换集群客户端(gluster2)的 IP 地址。目前,至少在 /etc/hosts 配置中,域名限制无法正常工作。如果以这种方式设置限制,它将阻止所有流量。您必须改用 IP 地址。

如果需要在任何时候删除限制,可以输入:

sudo gluster volume set volume1 auth.allow *

这将再次允许来自任何计算机的连接。这是不安全的,但可能对调试问题有用。

如果您有多个客户端,可以同时指定它们的 IP 地址,用逗号分隔:

sudo gluster volume set volume1 auth.allow <span class="highlight">gluster_client1_ip</span>,<span class="highlight">gluster_client2_ip</span>

使用 GlusterFS 命令获取信息

当您开始更改一些 GlusterFS 存储的设置时,您可能会对您可以使用的选项、哪些卷是活动的以及每个卷关联的节点感到困惑。

在您的节点上有许多不同的命令可用于检索这些数据并与您的存储池交互。

如果您想要关于每个卷的信息,可以输入:

sudo gluster volume info
Volume Name: volume1
Type: Replicate
Volume ID: 3634df4a-90cd-4ef8-9179-3bfa43cca867
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: gluster0.droplet.com:/gluster-storage
Brick2: gluster1.droplet.com:/gluster-storage
Options Reconfigured:
auth.allow: 111.111.1.11

类似地,要获取有关此节点连接的对等体的信息,可以输入:

sudo gluster peer status
Number of Peers: 1Hostname: gluster0.droplet.com
Port: 24007
Uuid: 6f30f38e-b47d-4df1-b106-f33dfd18b265
State: Peer in Cluster (Connected)

如果您想要关于每个节点的性能的详细信息,可以通过输入以下命令对卷进行分析:

sudo gluster volume profile <span class="highlight">volume_name</span> start

当此命令完成时,您可以通过输入以下命令获取收集的信息:

sudo gluster volume profile <span class="highlight">volume_name</span> info
Brick: gluster1.droplet.com:/gluster-storage
--------------------------------------------
Cumulative Stats:%-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop---------   -----------   -----------   -----------   ------------        ----0.00       0.00 us       0.00 us       0.00 us             20     RELEASE0.00       0.00 us       0.00 us       0.00 us              6  RELEASEDIR10.80     113.00 us     113.00 us     113.00 us              1    GETXATTR28.68     150.00 us     139.00 us     161.00 us              2      STATFS60.52     158.25 us     117.00 us     226.00 us              4      LOOKUPDuration: 8629 secondsData Read: 0 bytes
Data Written: 0 bytes
. . .

通过此命令,您将获得有关每个节点的大量信息。

要获取每个节点上运行的所有与 GlusterFS 相关的组件的列表,可以输入:

sudo gluster volume status
Status of volume: volume1
Gluster process                                         Port    Online  Pid
------------------------------------------------------------------------------
Brick gluster0.droplet.com:/gluster-storage             49152   Y       2808
Brick gluster1.droplet.com:/gluster-storage             49152   Y       2741
NFS Server on localhost                                 2049    Y       3271
Self-heal Daemon on localhost                           N/A     Y       2758
NFS Server on gluster0.droplet.com                      2049    Y       3211
Self-heal Daemon on gluster0.droplet.com                N/A     Y       2825There are no active volume tasks

如果您将要管理您的 GlusterFS 存储卷,可能最好进入 GlusterFS 控制台。这将允许您与您的 GlusterFS 环境进行交互,而无需在每个命令前输入 sudo gluster

sudo gluster

这将为您提供一个提示符,您可以在其中输入命令。这是一个很好的命令,可以帮助您定位自己:

help

完成后,像这样退出:

exit

结论


到这一步,你应该已经拥有了一个冗余存储系统,可以让我们同时向两台独立的服务器写入数据。这对于许多应用程序来说非常有用,并且可以确保我们的数据在一台服务器宕机时仍然可用。

这篇关于如何在 Ubuntu 服务器上使用 GlusterFS 创建冗余存储池的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/961335

相关文章

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

Linux流媒体服务器部署流程

《Linux流媒体服务器部署流程》文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建... 目录流媒体服务器部署部署安装1.更新系统2.安装依赖组件3.解压4.编译安装(添加RTMP和openssl模块